@@ -301,37 +301,50 @@ void common_hal_bitmaptools_boundary_fill(displayio_bitmap_t *destination,
301
301
value );
302
302
303
303
// add all 4 surrounding points to the list to check
304
- mp_obj_t above_point [] = {
305
- tuple_items [0 ],
306
- MP_OBJ_NEW_SMALL_INT (mp_obj_int_get_checked (tuple_items [1 ]) - 1 )
307
- };
308
- mp_obj_list_append (
309
- fill_area ,
310
- mp_obj_new_tuple (2 , above_point ));
311
-
312
- mp_obj_t left_point [] = {
313
- MP_OBJ_NEW_SMALL_INT (mp_obj_int_get_checked (tuple_items [0 ]) - 1 ),
314
- tuple_items [1 ]
315
- };
316
- mp_obj_list_append (
317
- fill_area ,
318
- mp_obj_new_tuple (2 , left_point ));
319
-
320
- mp_obj_t right_point [] = {
321
- MP_OBJ_NEW_SMALL_INT (mp_obj_int_get_checked (tuple_items [0 ]) + 1 ),
322
- tuple_items [1 ]
323
- };
324
- mp_obj_list_append (
325
- fill_area ,
326
- mp_obj_new_tuple (2 , right_point ));
327
-
328
- mp_obj_t below_point [] = {
329
- tuple_items [0 ],
330
- MP_OBJ_NEW_SMALL_INT (mp_obj_int_get_checked (tuple_items [1 ]) + 1 )
331
- };
332
- mp_obj_list_append (
333
- fill_area ,
334
- mp_obj_new_tuple (2 , below_point ));
304
+
305
+ // ignore points outside of the bitmap
306
+ if (mp_obj_int_get_checked (tuple_items [1 ]) - 1 >= 0 ) {
307
+ mp_obj_t above_point [] = {
308
+ tuple_items [0 ],
309
+ MP_OBJ_NEW_SMALL_INT (mp_obj_int_get_checked (tuple_items [1 ]) - 1 )
310
+ };
311
+ mp_obj_list_append (
312
+ fill_area ,
313
+ mp_obj_new_tuple (2 , above_point ));
314
+ }
315
+
316
+ // ignore points outside of the bitmap
317
+ if (mp_obj_int_get_checked (tuple_items [0 ]) - 1 >= 0 ) {
318
+ mp_obj_t left_point [] = {
319
+ MP_OBJ_NEW_SMALL_INT (mp_obj_int_get_checked (tuple_items [0 ]) - 1 ),
320
+ tuple_items [1 ]
321
+ };
322
+ mp_obj_list_append (
323
+ fill_area ,
324
+ mp_obj_new_tuple (2 , left_point ));
325
+ }
326
+
327
+ // ignore points outside of the bitmap
328
+ if (mp_obj_int_get_checked (tuple_items [0 ]) + 1 < destination -> width ) {
329
+ mp_obj_t right_point [] = {
330
+ MP_OBJ_NEW_SMALL_INT (mp_obj_int_get_checked (tuple_items [0 ]) + 1 ),
331
+ tuple_items [1 ]
332
+ };
333
+ mp_obj_list_append (
334
+ fill_area ,
335
+ mp_obj_new_tuple (2 , right_point ));
336
+ }
337
+
338
+ // ignore points outside of the bitmap
339
+ if (mp_obj_int_get_checked (tuple_items [1 ]) + 1 < destination -> height ) {
340
+ mp_obj_t below_point [] = {
341
+ tuple_items [0 ],
342
+ MP_OBJ_NEW_SMALL_INT (mp_obj_int_get_checked (tuple_items [1 ]) + 1 )
343
+ };
344
+ mp_obj_list_append (
345
+ fill_area ,
346
+ mp_obj_new_tuple (2 , below_point ));
347
+ }
335
348
336
349
mp_obj_list_get (fill_area , & list_length , & fill_points );
337
350
}
0 commit comments