Skip to content

Commit ca5b277

Browse files
committed
try a property with a callable static class
1 parent 64556e0 commit ca5b277

File tree

1 file changed

+61
-3
lines changed

1 file changed

+61
-3
lines changed

shared-bindings/_pixelbuf/PixelBuf.c

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,26 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pixelbuf_pixelbuf_show_obj, pixelbuf_pixelbuf_s
346346
//| Fills the entire buffer with the given color.
347347
//|
348348

349-
STATIC mp_obj_t pixelbuf_pixelbuf_fill(mp_obj_t self_in, mp_obj_t value) {
350-
pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(self_in);
349+
350+
// Pixelbuf Fill callable class
351+
352+
typedef struct _pixelbuf_fill_t {
353+
mp_obj_base_t base;
354+
} pixelbuf_fill_t;
355+
356+
357+
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) {
358+
pixelbuf_fill_t *o = m_new_obj(pixelbuf_fill_t);
359+
o->base.type = type;
360+
return MP_OBJ_FROM_PTR(o);
361+
}
362+
363+
// calls show
364+
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) {
365+
mp_arg_check_num_kw_array(n_args, n_kw, 2, 2, false);
366+
mp_obj_t object = args[0];
367+
mp_obj_t value = args[1];
368+
pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(object);
351369

352370
for (size_t offset = 0; offset < self->bytes; offset+= self->pixel_step) {
353371
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) {
357375
call_show(self_in);
358376
return mp_const_none;
359377
}
360-
STATIC MP_DEFINE_CONST_FUN_OBJ_2(pixelbuf_pixelbuf_fill_obj, pixelbuf_pixelbuf_fill);
378+
379+
const mp_obj_type_t pixelbuf_fill_type = {
380+
{ &mp_type_type },
381+
.name = MP_QSTR_PixelBufFill,
382+
.make_new = pixelbuf_fill_make_new,
383+
.call = pixelbuf_fill_call,
384+
};
385+
386+
STATIC const pixelbuf_fill_t pixelbuf_fill_singleton = {
387+
.base = { &pixelbuf_fill_type },
388+
};
389+
390+
391+
// STATIC mp_obj_t pixelbuf_pixelbuf_fill(mp_obj_t self_in, mp_obj_t value) {
392+
// pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(self_in);
393+
394+
// for (size_t offset = 0; offset < self->bytes; offset+= self->pixel_step) {
395+
// pixelbuf_set_pixel(self->buf + offset, self->two_buffers ? (self->rawbuf + offset) : NULL,
396+
// self->brightness, value, &self->byteorder, self->byteorder.is_dotstar);
397+
// }
398+
// if (self->auto_write)
399+
// call_show(self_in);
400+
// return mp_const_none;
401+
// }
402+
// STATIC MP_DEFINE_CONST_FUN_OBJ_2(pixelbuf_pixelbuf_fill_obj, pixelbuf_pixelbuf_fill);
403+
404+
405+
STATIC mp_obj_t pixelbuf_pixelbuf_obj_fill_get(mp_obj_t self_in) {
406+
// pixelbuf_pixelbuf_obj_t *self = native_pixelbuf(self_in);
407+
return MP_OBJ_FROM_PTR(&pixelbuf_fill_singleton);
408+
}
409+
MP_DEFINE_CONST_FUN_OBJ_1(pixelbuf_pixelbuf_obj_fill_get_obj, pixelbuf_pixelbuf_obj_fill_get);
410+
411+
const mp_obj_property_t pixelbuf_pixelbuf_fill_obj = {
412+
.base.type = &mp_type_property,
413+
.proxy = {(mp_obj_t)&pixelbuf_pixelbuf_obj_fill_get_obj,
414+
(mp_obj_t)&mp_const_none_obj,
415+
(mp_obj_t)&mp_const_none_obj},
416+
};
417+
418+
361419

362420

363421
//| .. method:: __getitem__(index)

0 commit comments

Comments
 (0)