Skip to content

Commit 6f78306

Browse files
committed
ignore points outside of bitmap
1 parent 4d8494f commit 6f78306

File tree

1 file changed

+44
-31
lines changed

1 file changed

+44
-31
lines changed

shared-module/bitmaptools/__init__.c

Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -301,37 +301,50 @@ void common_hal_bitmaptools_boundary_fill(displayio_bitmap_t *destination,
301301
value);
302302

303303
// 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+
}
335348

336349
mp_obj_list_get(fill_area, &list_length, &fill_points);
337350
}

0 commit comments

Comments
 (0)