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) | ||||