|
7 | 7 |
|
8 | 8 | logger = logging.getLogger(__name__)
|
9 | 9 |
|
10 |
| -# the python marshallers for gobject signal handling |
| 10 | +# the python marshalers for gobject signal handling |
11 | 11 | # we keep a ref to each callback to stop them being GCd
|
12 | 12 |
|
13 | 13 | if pyvips.API_mode:
|
14 | 14 | @ffi.def_extern()
|
15 |
| - def _marshall_image_progress(vi, pointer, handle): |
16 |
| - # the image we're passed is not reffed for us, so make a ref for us |
17 |
| - gobject_lib.g_object_ref(vi) |
18 |
| - image = pyvips.Image(vi) |
19 |
| - callback = ffi.from_handle(handle) |
20 |
| - progress = ffi.cast('VipsProgress*', pointer) |
21 |
| - callback(image, progress) |
22 |
| - |
23 |
| - _marshall_image_progress_cb = \ |
24 |
| - ffi.cast('GCallback', gobject_lib._marshall_image_progress) |
| 15 | +def _marshal_image_progress(vi, pointer, handle): |
| 16 | + # the image we're passed is not reffed for us, so make a ref for us |
| 17 | + gobject_lib.g_object_ref(vi) |
| 18 | + image = pyvips.Image(vi) |
| 19 | + callback = ffi.from_handle(handle) |
| 20 | + progress = ffi.cast('VipsProgress*', pointer) |
| 21 | + callback(image, progress) |
| 22 | + |
| 23 | +if pyvips.API_mode: |
| 24 | + _marshal_image_progress_cb = \ |
| 25 | + ffi.cast('GCallback', gobject_lib._marshal_image_progress) |
25 | 26 | else:
|
26 |
| - def _marshall_image_progress(vi, pointer, handle): |
27 |
| - # the image we're passed is not reffed for us, so make a ref for us |
28 |
| - gobject_lib.g_object_ref(vi) |
29 |
| - image = pyvips.Image(vi) |
30 |
| - callback = ffi.from_handle(handle) |
31 |
| - progress = ffi.cast('VipsProgress*', pointer) |
32 |
| - callback(image, progress) |
33 |
| - |
34 |
| - _marshall_image_progress_cb = \ |
| 27 | + _marshal_image_progress_cb = \ |
35 | 28 | ffi.cast('GCallback',
|
36 | 29 | ffi.callback('void(VipsImage*, void*, void*)',
|
37 |
| - _marshall_image_progress)) |
| 30 | + _marshal_image_progress)) |
| 31 | + |
| 32 | +if pyvips.API_mode: |
| 33 | + @ffi.def_extern() |
| 34 | +def _marshal_read(streamiu, pointer, length, handle): |
| 35 | + buf = ffi.buffer(pointer, length) |
| 36 | + callback = ffi.from_handle(handle) |
| 37 | + callback(streamiu, buf) |
| 38 | + |
| 39 | +if pyvips.API_mode: |
| 40 | + _marshal_read_cb = \ |
| 41 | + ffi.cast('GCallback', gobject_lib._marshal_read) |
| 42 | +else: |
| 43 | + _marshal_read_cb = \ |
| 44 | + ffi.cast('GCallback', |
| 45 | + ffi.callback('gint64(VipsStreamiu*, void*, gint64, void*)', |
| 46 | + _marshal_read)) |
| 47 | + |
| 48 | +_marshalers = [ |
| 49 | + "image_progress": _marshal_image_progress_cb, |
| 50 | + "read": _marshal_read_cb, |
| 51 | + "seek": _marshal_seek_cb, |
| 52 | +] |
| 53 | + |
| 54 | +if pyvips.API_mode: |
| 55 | + @ffi.def_extern() |
| 56 | +def _marshal_seek(streamiu, offset, whence, handle): |
| 57 | + callback = ffi.from_handle(handle) |
| 58 | + callback(streamiu, offset, whence) |
| 59 | + |
| 60 | +if pyvips.API_mode: |
| 61 | + _marshal_read_cb = \ |
| 62 | + ffi.cast('GCallback', gobject_lib._marshal_seek) |
| 63 | +else: |
| 64 | + _marshal_read_cb = \ |
| 65 | + ffi.cast('GCallback', |
| 66 | + ffi.callback('gint64(VipsStreamiu*, gint64, int, void*)', |
| 67 | + _marshal_seek)) |
38 | 68 |
|
39 | 69 |
|
40 | 70 | class GObject(object):
|
@@ -77,7 +107,7 @@ def signal_connect(self, name, callback):
|
77 | 107 | self._handles.append(handle)
|
78 | 108 |
|
79 | 109 | gobject_lib.g_signal_connect_data(go, _to_bytes(name),
|
80 |
| - _marshall_image_progress_cb, |
| 110 | + _marshal_image_progress_cb, |
81 | 111 | handle, ffi.NULL, 0)
|
82 | 112 |
|
83 | 113 |
|
|
0 commit comments