Issue #15: Fix returned pointer with caca types.tags/v0.99.beta20
@@ -21,12 +21,16 @@ from caca import _lib, utf8_to_utf32, utf32_to_utf8 | |||||
from caca import _PYTHON3, _str_to_bytes, _bytes_to_str | from caca import _PYTHON3, _str_to_bytes, _bytes_to_str | ||||
from caca.font import _Font | from caca.font import _Font | ||||
class _CanvasStruct(ctypes.Structure): | |||||
pass | |||||
class _Canvas(object): | class _Canvas(object): | ||||
""" Model for Canvas objects. | """ Model for Canvas objects. | ||||
""" | """ | ||||
def __init__(self): | def __init__(self): | ||||
self._cv = 0 | |||||
self._cv = None | |||||
def from_param(self): | def from_param(self): | ||||
""" Required by ctypes module to call object as parameter of | """ Required by ctypes module to call object as parameter of | ||||
@@ -38,7 +42,7 @@ class _Canvas(object): | |||||
return "<CacaCanvas %dx%d>" % (self.get_width(), self.get_height()) | return "<CacaCanvas %dx%d>" % (self.get_width(), self.get_height()) | ||||
def __del__(self): | def __del__(self): | ||||
if self._cv > 0 and _lib is not None: | |||||
if self._cv and _lib is not None: | |||||
self._free() | self._free() | ||||
def _free(self): | def _free(self): | ||||
@@ -61,6 +65,7 @@ class Canvas(_Canvas): | |||||
pointer -- pointer to libcaca canvas | pointer -- pointer to libcaca canvas | ||||
""" | """ | ||||
_lib.caca_create_canvas.argtypes = [ctypes.c_int, ctypes.c_int] | _lib.caca_create_canvas.argtypes = [ctypes.c_int, ctypes.c_int] | ||||
_lib.caca_create_canvas.restype = ctypes.POINTER(_CanvasStruct) | |||||
if pointer is None: | if pointer is None: | ||||
try: | try: | ||||
@@ -19,6 +19,11 @@ import ctypes | |||||
from caca import _lib, _PYTHON3, _str_to_bytes | from caca import _lib, _PYTHON3, _str_to_bytes | ||||
from caca.canvas import _Canvas, Canvas | from caca.canvas import _Canvas, Canvas | ||||
class _DisplayStruct(ctypes.Structure): | |||||
pass | |||||
class _Display(object): | class _Display(object): | ||||
""" Model for Display objects. | """ Model for Display objects. | ||||
""" | """ | ||||
@@ -32,7 +37,7 @@ class _Display(object): | |||||
return "<CacaDisplay>" | return "<CacaDisplay>" | ||||
def __del__(self): | def __del__(self): | ||||
if self._dp > 0 and _lib is not None: | |||||
if self._dp and _lib is not None: | |||||
self._free() | self._free() | ||||
def _free(self): | def _free(self): | ||||
@@ -57,11 +62,15 @@ class Display(_Display): | |||||
if driver is None: | if driver is None: | ||||
_lib.caca_create_display.argtypes = [_Canvas] | _lib.caca_create_display.argtypes = [_Canvas] | ||||
_lib.caca_create_display.restype = ctypes.POINTER(_DisplayStruct) | |||||
self._dp = _lib.caca_create_display(cv) | self._dp = _lib.caca_create_display(cv) | ||||
else: | else: | ||||
_lib.caca_create_display_with_driver.argtypes = [ | _lib.caca_create_display_with_driver.argtypes = [ | ||||
_Canvas, ctypes.c_char_p | _Canvas, ctypes.c_char_p | ||||
] | ] | ||||
_lib.caca_create_display_with_driver.restype = ctypes.POINTER( | |||||
_DisplayStruct | |||||
) | |||||
if _PYTHON3 and isinstance(driver, str): | if _PYTHON3 and isinstance(driver, str): | ||||
driver = _str_to_bytes(driver) | driver = _str_to_bytes(driver) | ||||
@@ -197,9 +206,11 @@ class Display(_Display): | |||||
return _lib.caca_get_mouse_y(self) | return _lib.caca_get_mouse_y(self) | ||||
class DisplayError(Exception): | class DisplayError(Exception): | ||||
pass | pass | ||||
class Event(ctypes.Structure): | class Event(ctypes.Structure): | ||||
""" Object to store libcaca event. | """ Object to store libcaca event. | ||||
""" | """ | ||||
@@ -19,11 +19,15 @@ import ctypes | |||||
from caca import _lib | from caca import _lib | ||||
from caca.canvas import _Canvas | from caca.canvas import _Canvas | ||||
class _DitherStruct(ctypes.Structure): | |||||
pass | |||||
class _Dither(object): | class _Dither(object): | ||||
""" Model for Dither object. | """ Model for Dither object. | ||||
""" | """ | ||||
def __init__(self): | def __init__(self): | ||||
self._dither = 0 | |||||
self._dither = None | |||||
def from_param(self): | def from_param(self): | ||||
""" Required by ctypes module to call object as parameter of | """ Required by ctypes module to call object as parameter of | ||||
@@ -32,7 +36,7 @@ class _Dither(object): | |||||
return self._dither | return self._dither | ||||
def __del__(self): | def __del__(self): | ||||
if self._dither > 0: | |||||
if self._dither: | |||||
self._free() | self._free() | ||||
def __str__(self): | def __str__(self): | ||||
@@ -66,6 +70,7 @@ class Dither(_Dither): | |||||
ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, | ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, | ||||
ctypes.c_uint, ctypes.c_uint, ctypes.c_uint, ctypes.c_uint, | ctypes.c_uint, ctypes.c_uint, ctypes.c_uint, ctypes.c_uint, | ||||
] | ] | ||||
_lib.caca_create_dither.restype = ctypes.POINTER(_DitherStruct) | |||||
self._dither = _lib.caca_create_dither(bpp, width, height, pitch, | self._dither = _lib.caca_create_dither(bpp, width, height, pitch, | ||||
rmask, gmask, bmask, amask) | rmask, gmask, bmask, amask) | ||||
@@ -19,11 +19,15 @@ import errno | |||||
from caca import _lib, _PYTHON3, _str_to_bytes | from caca import _lib, _PYTHON3, _str_to_bytes | ||||
class _FontStruct(ctypes.Structure): | |||||
pass | |||||
class _Font(object): | class _Font(object): | ||||
""" Model for Font object. | """ Model for Font object. | ||||
""" | """ | ||||
def __init__(self): | def __init__(self): | ||||
self._font = 0 | |||||
self._font = None | |||||
def from_param(self): | def from_param(self): | ||||
""" Required by ctypes module to call object as parameter of | """ Required by ctypes module to call object as parameter of | ||||
@@ -33,7 +37,7 @@ class _Font(object): | |||||
def __del__(self): | def __del__(self): | ||||
if hasattr(self, "_font"): | if hasattr(self, "_font"): | ||||
if self._font > 0: | |||||
if self._font: | |||||
self._free() | self._free() | ||||
def __str__(self): | def __str__(self): | ||||
@@ -62,7 +66,7 @@ class Font(_Font): | |||||
else: | else: | ||||
raise FontError("Unsupported method") | raise FontError("Unsupported method") | ||||
_lib.caca_load_font.restype = ctypes.c_int | |||||
_lib.caca_load_font.restype = ctypes.POINTER(_FontStruct) | |||||
if _PYTHON3: | if _PYTHON3: | ||||
font = _str_to_bytes(font) | font = _str_to_bytes(font) | ||||