diff options
| author | Roy Hooper <rhooper@toybox.ca> | 2020-01-01 16:10:01 -0500 |
|---|---|---|
| committer | Roy Hooper <rhooper@toybox.ca> | 2020-01-01 16:10:01 -0500 |
| commit | ca5b2770cf30f30946991faeaab16263bce435e9 (patch) | |
| tree | cbe21818ca3352583e83e63cfcafbf98540b3536 /shared-bindings/_pixelbuf | |
| parent | 64556e017d046fe94119d09502b8c3705db3d202 (diff) | |
try a property with a callable static class
Diffstat (limited to 'shared-bindings/_pixelbuf')
| -rw-r--r-- | shared-bindings/_pixelbuf/PixelBuf.c | 64 |
1 files changed, 61 insertions, 3 deletions
diff --git a/shared-bindings/_pixelbuf/PixelBuf.c b/shared-bindings/_pixelbuf/PixelBuf.c index 7c624a8fd..75f1b2188 100644 --- a/shared-bindings/_pixelbuf/PixelBuf.c +++ b/shared-bindings/_pixelbuf/PixelBuf.c @@ -346,8 +346,26 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pixelbuf_pixelbuf_show_obj, pixelbuf_pixelbuf_s //| Fills the entire buffer with the given color. //| -STATIC mp_obj_t pixelbuf_pixelbuf_fill(mp_obj_t self_in, mp_obj_t value) { - pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(self_in); + +// Pixelbuf Fill callable class + +typedef struct _pixelbuf_fill_t { + mp_obj_base_t base; +} pixelbuf_fill_t; + + +STATIC mp_obj_t pixelbuf_fill_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) { + pixelbuf_fill_t *o = m_new_obj(pixelbuf_fill_t); + o->base.type = type; + return MP_OBJ_FROM_PTR(o); +} + +// calls show +STATIC mp_obj_t pixelbuf_fill_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { + mp_arg_check_num_kw_array(n_args, n_kw, 2, 2, false); + mp_obj_t object = args[0]; + mp_obj_t value = args[1]; + pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(object); for (size_t offset = 0; offset < self->bytes; offset+= self->pixel_step) { pixelbuf_set_pixel(self->buf + offset, self->two_buffers ? (self->rawbuf + offset) : NULL, @@ -357,7 +375,47 @@ STATIC mp_obj_t pixelbuf_pixelbuf_fill(mp_obj_t self_in, mp_obj_t value) { call_show(self_in); return mp_const_none; } -STATIC MP_DEFINE_CONST_FUN_OBJ_2(pixelbuf_pixelbuf_fill_obj, pixelbuf_pixelbuf_fill); + +const mp_obj_type_t pixelbuf_fill_type = { + { &mp_type_type }, + .name = MP_QSTR_PixelBufFill, + .make_new = pixelbuf_fill_make_new, + .call = pixelbuf_fill_call, +}; + +STATIC const pixelbuf_fill_t pixelbuf_fill_singleton = { + .base = { &pixelbuf_fill_type }, +}; + + +// STATIC mp_obj_t pixelbuf_pixelbuf_fill(mp_obj_t self_in, mp_obj_t value) { +// pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(self_in); + +// for (size_t offset = 0; offset < self->bytes; offset+= self->pixel_step) { +// pixelbuf_set_pixel(self->buf + offset, self->two_buffers ? (self->rawbuf + offset) : NULL, +// self->brightness, value, &self->byteorder, self->byteorder.is_dotstar); +// } +// if (self->auto_write) +// call_show(self_in); +// return mp_const_none; +// } +// STATIC MP_DEFINE_CONST_FUN_OBJ_2(pixelbuf_pixelbuf_fill_obj, pixelbuf_pixelbuf_fill); + + +STATIC mp_obj_t pixelbuf_pixelbuf_obj_fill_get(mp_obj_t self_in) { + // pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(self_in); + return MP_OBJ_FROM_PTR(&pixelbuf_fill_singleton); +} +MP_DEFINE_CONST_FUN_OBJ_1(pixelbuf_pixelbuf_obj_fill_get_obj, pixelbuf_pixelbuf_obj_fill_get); + +const mp_obj_property_t pixelbuf_pixelbuf_fill_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&pixelbuf_pixelbuf_obj_fill_get_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + + //| .. method:: __getitem__(index) |
