summaryrefslogtreecommitdiff
path: root/shared-bindings/_pixelbuf
diff options
context:
space:
mode:
authorRoy Hooper <rhooper@toybox.ca>2020-01-01 16:10:01 -0500
committerRoy Hooper <rhooper@toybox.ca>2020-01-01 16:10:01 -0500
commitca5b2770cf30f30946991faeaab16263bce435e9 (patch)
treecbe21818ca3352583e83e63cfcafbf98540b3536 /shared-bindings/_pixelbuf
parent64556e017d046fe94119d09502b8c3705db3d202 (diff)
try a property with a callable static class
Diffstat (limited to 'shared-bindings/_pixelbuf')
-rw-r--r--shared-bindings/_pixelbuf/PixelBuf.c64
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)