@@ -51,7 +51,7 @@ extern const int32_t colorwheel(float pos);
5151//|
5252//| :class:`~_pixelbuf.PixelBuf` implements an RGB[W] bytearray abstraction.
5353//|
54- //| .. class:: PixelBuf(size, buf, byteorder=BGR, bpp=3 )
54+ //| .. class:: PixelBuf(size, buf, byteorder=BGR, brightness=0, rawbuf=None, offset=0, dotstar=False, auto_write=False, write_function=None, write_args=None )
5555//|
5656//| Create a PixelBuf object of the specified size, byteorder, and bits per pixel.
5757//|
@@ -66,14 +66,14 @@ extern const int32_t colorwheel(float pos);
6666//|
6767//| :param ~int size: Number of pixelsx
6868//| :param ~bytearray buf: Bytearray to store pixel data in
69- //| :param ~_pixelbuf.ByteOrder byteorder: Byte order constant from `_pixelbuf` (also sets the bpp)
69+ //| :param ~_pixelbuf.ByteOrder byteorder: Byte order constant from `_pixelbuf`
7070//| :param ~float brightness: Brightness (0 to 1.0, default 1.0)
7171//| :param ~bytearray rawbuf: Bytearray to store raw pixel colors in
7272//| :param ~int offset: Offset from start of buffer (default 0)
7373//| :param ~bool dotstar: Dotstar mode (default False)
7474//| :param ~bool auto_write: Whether to automatically write pixels (Default False)
7575//| :param ~callable write_function: (optional) Callable to use to send pixels
76- //| :param ~list write_args: (optional) Tuple or list of args to pass to ``write_function``. The
76+ //| :param ~list write_args: (optional) Tuple or list of args to pass to ``write_function``. The
7777//| PixelBuf instance is appended after these args.
7878//|
7979STATIC mp_obj_t pixelbuf_pixelbuf_make_new (const mp_obj_type_t * type , size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
@@ -95,7 +95,7 @@ STATIC mp_obj_t pixelbuf_pixelbuf_make_new(const mp_obj_type_t *type, size_t n_a
9595 mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
9696 mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
9797
98- if (mp_obj_is_subclass_fast (args [ARG_byteorder ].u_obj , & pixelbuf_byteorder_type ))
98+ if (mp_obj_is_subclass_fast (args [ARG_byteorder ].u_obj , & pixelbuf_byteorder_type ))
9999 mp_raise_TypeError_varg (translate ("byteorder is not an instance of ByteOrder (got a %s)" ), mp_obj_get_type_str (args [ARG_byteorder ].u_obj ));
100100
101101 pixelbuf_byteorder_obj_t * byteorder = (args [ARG_byteorder ].u_obj == mp_const_none ) ? MP_OBJ_FROM_PTR (& byteorder_BGR ) : args [ARG_byteorder ].u_obj ;
@@ -122,7 +122,7 @@ STATIC mp_obj_t pixelbuf_pixelbuf_make_new(const mp_obj_type_t *type, size_t n_a
122122
123123 if (!MP_OBJ_IS_TYPE (args [ARG_write_args ].u_obj , & mp_type_list ) &&
124124 !MP_OBJ_IS_TYPE (args [ARG_write_args ].u_obj , & mp_type_tuple ) &&
125- args [ARG_write_args ].u_obj != mp_const_none )
125+ args [ARG_write_args ].u_obj != mp_const_none )
126126 {
127127 mp_raise_ValueError (translate ("write_args must be a list, tuple, or None" ));
128128 }
@@ -186,8 +186,8 @@ STATIC mp_obj_t pixelbuf_pixelbuf_make_new(const mp_obj_type_t *type, size_t n_a
186186 else if (self -> brightness > 1 )
187187 self -> brightness = 1 ;
188188 }
189-
190- if (self -> dotstar_mode ) {
189+
190+ if (self -> dotstar_mode ) {
191191 // Initialize the buffer with the dotstar start bytes.
192192 // Header and end must be setup by caller
193193 for (uint i = 0 ; i < self -> pixels * 4 ; i += 4 ) {
@@ -197,7 +197,7 @@ STATIC mp_obj_t pixelbuf_pixelbuf_make_new(const mp_obj_type_t *type, size_t n_a
197197 }
198198 }
199199 }
200-
200+
201201 return MP_OBJ_FROM_PTR (self );
202202}
203203
@@ -227,7 +227,7 @@ const mp_obj_property_t pixelbuf_pixelbuf_bpp_obj = {
227227//| setting this value causes a recomputation of the values in buf.
228228//| If only a buf was provided, then the brightness only applies to
229229//| future pixel changes.
230- //| In DotStar mode
230+ //| In DotStar mode
231231//|
232232STATIC mp_obj_t pixelbuf_pixelbuf_obj_get_brightness (mp_obj_t self_in ) {
233233 mp_check_self (MP_OBJ_IS_TYPE (self_in , & pixelbuf_pixelbuf_type ));
@@ -266,7 +266,7 @@ void pixelbuf_recalculate_brightness(pixelbuf_pixelbuf_obj_t *self) {
266266 // Compensate for shifted buffer (bpp=3 dotstar)
267267 for (uint i = 0 ; i < self -> bytes ; i ++ ) {
268268 // Don't adjust per-pixel luminance bytes in dotstar mode
269- if (!self -> dotstar_mode || (i % 4 != 0 ))
269+ if (!self -> dotstar_mode || (i % 4 != 0 ))
270270 buf [i ] = rawbuf [i ] * self -> brightness ;
271271 }
272272}
@@ -367,11 +367,13 @@ void call_write_function(pixelbuf_pixelbuf_obj_t *self) {
367367 }
368368}
369369
370-
371-
372- //| .. method:: []
370+ //| .. method:: __getitem__(index)
371+ //|
372+ //| Returns the pixel value at the given index.
373373//|
374- //| Get or set pixels. Supports individual pixels and slices.
374+ //| .. method:: __setitem__(index, value)
375+ //|
376+ //| Sets the pixel value at the given index.
375377//|
376378STATIC mp_obj_t pixelbuf_pixelbuf_subscr (mp_obj_t self_in , mp_obj_t index_in , mp_obj_t value ) {
377379 mp_check_self (MP_OBJ_IS_TYPE (self_in , & pixelbuf_pixelbuf_type ));
@@ -380,7 +382,7 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
380382 // delete item
381383 // slice deletion
382384 return MP_OBJ_NULL ; // op not supported
383- }
385+ }
384386
385387 pixelbuf_pixelbuf_obj_t * self = MP_OBJ_TO_PTR (self_in );
386388 if (0 ) {
@@ -390,7 +392,7 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
390392
391393 if (!mp_seq_get_fast_slice_indexes (self -> bytes , index_in , & slice ))
392394 mp_raise_NotImplementedError (translate ("Only slices with step=1 (aka None) are supported" ));
393- if ((slice .stop * self -> pixel_step ) > self -> bytes )
395+ if ((slice .stop * self -> pixel_step ) > self -> bytes )
394396 mp_raise_IndexError (translate ("Range out of bounds" ));
395397
396398 if (value == MP_OBJ_SENTINEL ) { // Get
@@ -422,8 +424,8 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
422424 for (size_t i = slice .start ; i < slice .stop ; i ++ ) {
423425 mp_obj_t * item = src_objs [i - slice .start ];
424426 if (MP_OBJ_IS_TYPE (value , & mp_type_list ) || MP_OBJ_IS_TYPE (value , & mp_type_tuple ) || MP_OBJ_IS_INT (value )) {
425- pixelbuf_set_pixel (self -> buf + (i * self -> pixel_step ),
426- self -> two_buffers ? self -> rawbuf + (i * self -> pixel_step ) : NULL ,
427+ pixelbuf_set_pixel (self -> buf + (i * self -> pixel_step ),
428+ self -> two_buffers ? self -> rawbuf + (i * self -> pixel_step ) : NULL ,
427429 self -> brightness , item , & self -> byteorder , self -> dotstar_mode );
428430 }
429431 }
@@ -438,14 +440,14 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
438440 } else { // Single index rather than slice.
439441 size_t index = mp_get_index (self -> base .type , self -> pixels , index_in , false);
440442 size_t offset = (index * self -> pixel_step );
441- if (offset > self -> bytes )
443+ if (offset > self -> bytes )
442444 mp_raise_IndexError (translate ("Pixel beyond bounds of buffer" ));
443445
444446 if (value == MP_OBJ_SENTINEL ) { // Get
445447 uint8_t * pixelstart = (uint8_t * )(self -> two_buffers ? self -> rawbuf : self -> buf ) + offset ;
446448 return pixelbuf_get_pixel (pixelstart , & self -> byteorder , self -> dotstar_mode );
447449 } else { // Store
448- pixelbuf_set_pixel (self -> buf + offset , self -> two_buffers ? self -> rawbuf + offset : NULL ,
450+ pixelbuf_set_pixel (self -> buf + offset , self -> two_buffers ? self -> rawbuf + offset : NULL ,
449451 self -> brightness , value , & self -> byteorder , self -> dotstar_mode );
450452 if (self -> auto_write )
451453 call_write_function (self );
0 commit comments