Skip to content

Commit bcfec10

Browse files
committed
starting bitmaptools.paint_fill
1 parent 06325c4 commit bcfec10

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

shared-bindings/bitmaptools/__init__.c

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,63 @@ STATIC mp_obj_t bitmaptools_obj_fill_region(size_t n_args, const mp_obj_t *pos_a
296296
}
297297

298298
MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_fill_region_obj, 0, bitmaptools_obj_fill_region);
299+
//|
300+
//| def paint_fill(
301+
//| dest_bitmap: displayio.Bitmap,
302+
//| x: int, y: int
303+
//| value: int, background_value: int) -> None:
304+
//| """Draws the color value into the destination bitmap enclosed
305+
//| area of pixels of the background_value color. Like "Paint Bucket"
306+
//| fill tool.
307+
//|
308+
//| :param bitmap dest_bitmap: Destination bitmap that will be written into
309+
//| :param int x: x-pixel position of the first pixel to check and fill if needed
310+
//| :param int y: y-pixel position of the first pixel to check and fill if needed
311+
//| :param int value: Bitmap palette index that will be written into the rectangular
312+
//| fill region in the destination bitmap"""
313+
//| :param int background_value: Bitmap palette index that will filled with the
314+
//| value color in the enclosed area in the destination bitmap"""
315+
//| ...
316+
//|
317+
STATIC mp_obj_t bitmaptools_obj_paint_fill(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
318+
enum {ARG_dest_bitmap, ARG_x, ARG_y, ARG_value, ARG_background_value};
319+
320+
static const mp_arg_t allowed_args[] = {
321+
{MP_QSTR_dest_bitmap, MP_ARG_REQUIRED | MP_ARG_OBJ},
322+
{MP_QSTR_x, MP_ARG_REQUIRED | MP_ARG_INT},
323+
{MP_QSTR_y, MP_ARG_REQUIRED | MP_ARG_INT},
324+
{MP_QSTR_value, MP_ARG_REQUIRED | MP_ARG_INT},
325+
{MP_QSTR_background_value, MP_ARG_REQUIRED | MP_ARG_INT},
326+
};
327+
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
328+
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
329+
330+
displayio_bitmap_t *destination = MP_OBJ_TO_PTR(args[ARG_dest_bitmap].u_obj); // the destination bitmap
331+
332+
uint32_t value, color_depth;
333+
value = args[ARG_value].u_int;
334+
color_depth = (1 << destination->bits_per_value);
335+
if (color_depth <= value) {
336+
mp_raise_ValueError(translate("value out of range of target"));
337+
}
338+
339+
uint32_t background_value, color_depth;
340+
background_value = args[ARG_background_value].u_int;
341+
color_depth = (1 << destination->bits_per_value);
342+
if (color_depth <= background_value) {
343+
mp_raise_ValueError(translate("background value out of range of target"));
344+
}
345+
346+
int16_t x = args[ARG_x].u_int;
347+
int16_t y = args[ARG_y].u_int;
348+
349+
350+
common_hal_bitmaptools_paint_fill(destination, x, y, value, background_value);
351+
352+
return mp_const_none;
353+
}
354+
355+
MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_paint_fill_obj, 0, bitmaptools_obj_paint_fill);
299356
// requires all 6 arguments
300357

301358
//|
@@ -520,6 +577,7 @@ STATIC const mp_rom_map_elem_t bitmaptools_module_globals_table[] = {
520577
{ MP_ROM_QSTR(MP_QSTR_rotozoom), MP_ROM_PTR(&bitmaptools_rotozoom_obj) },
521578
{ MP_ROM_QSTR(MP_QSTR_arrayblit), MP_ROM_PTR(&bitmaptools_arrayblit_obj) },
522579
{ MP_ROM_QSTR(MP_QSTR_fill_region), MP_ROM_PTR(&bitmaptools_fill_region_obj) },
580+
{ MP_ROM_QSTR(MP_QSTR_paint_fill), MP_ROM_PTR(&bitmaptools_paint_fill_obj) },
523581
{ MP_ROM_QSTR(MP_QSTR_draw_line), MP_ROM_PTR(&bitmaptools_draw_line_obj) },
524582
};
525583
STATIC MP_DEFINE_CONST_DICT(bitmaptools_module_globals, bitmaptools_module_globals_table);

shared-bindings/bitmaptools/__init__.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ void common_hal_bitmaptools_fill_region(displayio_bitmap_t *destination,
4646
int16_t x2, int16_t y2,
4747
uint32_t value);
4848

49+
void common_hal_bitmaptools_paint_fill(displayio_bitmap_t *destination,
50+
int16_t x, int16_t y,
51+
uint32_t value, uint32_t background_value);
52+
4953
void common_hal_bitmaptools_draw_line(displayio_bitmap_t *destination,
5054
int16_t x0, int16_t y0,
5155
int16_t x1, int16_t y1,

shared-module/bitmaptools/__init__.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,13 @@ void common_hal_bitmaptools_fill_region(displayio_bitmap_t *destination,
252252
}
253253
}
254254

255+
void common_hal_bitmaptools_paint_fill(displayio_bitmap_t *destination,
256+
int16_t x, int16_t y,
257+
uint32_t value, uint32_t background_value) {
258+
259+
260+
}
261+
255262
void common_hal_bitmaptools_draw_line(displayio_bitmap_t *destination,
256263
int16_t x0, int16_t y0,
257264
int16_t x1, int16_t y1,

0 commit comments

Comments
 (0)