Skip to content

Commit b90563d

Browse files
authored
Merge pull request #6442 from FoamyGuy/tilegrid_contains
tilegrid.contains() function
2 parents 80ae142 + c9c864a commit b90563d

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

shared-bindings/displayio/TileGrid.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,24 @@ MP_PROPERTY_GETSET(displayio_tilegrid_transpose_xy_obj,
322322
(mp_obj_t)&displayio_tilegrid_get_transpose_xy_obj,
323323
(mp_obj_t)&displayio_tilegrid_set_transpose_xy_obj);
324324

325+
//| def contains(self, touch_tuple: tuple) -> bool:
326+
//| """Returns True if the first two values in ``touch_tuple`` represent an x,y coordinate
327+
//| inside the tilegrid rectangle bounds."""
328+
//|
329+
STATIC mp_obj_t displayio_tilegrid_obj_contains(mp_obj_t self_in, mp_obj_t touch_tuple) {
330+
displayio_tilegrid_t *self = MP_OBJ_TO_PTR(self_in);
331+
332+
mp_obj_t *touch_tuple_items;
333+
mp_obj_get_array_fixed_n(touch_tuple, 3, &touch_tuple_items);
334+
uint16_t x = 0;
335+
uint16_t y = 0;
336+
x = mp_obj_get_int(touch_tuple_items[0]);
337+
y = mp_obj_get_int(touch_tuple_items[1]);
338+
339+
return mp_obj_new_bool(common_hal_displayio_tilegrid_contains(self, x, y));
340+
}
341+
MP_DEFINE_CONST_FUN_OBJ_2(displayio_tilegrid_contains_obj, displayio_tilegrid_obj_contains);
342+
325343
//| pixel_shader: Union[ColorConverter, Palette]
326344
//| """The pixel shader of the tilegrid."""
327345
//|
@@ -484,6 +502,7 @@ STATIC const mp_rom_map_elem_t displayio_tilegrid_locals_dict_table[] = {
484502
{ MP_ROM_QSTR(MP_QSTR_flip_x), MP_ROM_PTR(&displayio_tilegrid_flip_x_obj) },
485503
{ MP_ROM_QSTR(MP_QSTR_flip_y), MP_ROM_PTR(&displayio_tilegrid_flip_y_obj) },
486504
{ MP_ROM_QSTR(MP_QSTR_transpose_xy), MP_ROM_PTR(&displayio_tilegrid_transpose_xy_obj) },
505+
{ MP_ROM_QSTR(MP_QSTR_contains), MP_ROM_PTR(&displayio_tilegrid_contains_obj) },
487506
{ MP_ROM_QSTR(MP_QSTR_pixel_shader), MP_ROM_PTR(&displayio_tilegrid_pixel_shader_obj) },
488507
{ MP_ROM_QSTR(MP_QSTR_bitmap), MP_ROM_PTR(&displayio_tilegrid_bitmap_obj) },
489508
};

shared-bindings/displayio/TileGrid.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ void common_hal_displayio_tilegrid_set_flip_y(displayio_tilegrid_t *self, bool f
5656
bool common_hal_displayio_tilegrid_get_transpose_xy(displayio_tilegrid_t *self);
5757
void common_hal_displayio_tilegrid_set_transpose_xy(displayio_tilegrid_t *self, bool transpose_xy);
5858

59+
bool common_hal_displayio_tilegrid_contains(displayio_tilegrid_t *self, uint16_t x, uint16_t y);
60+
5961
uint16_t common_hal_displayio_tilegrid_get_width(displayio_tilegrid_t *self);
6062
uint16_t common_hal_displayio_tilegrid_get_height(displayio_tilegrid_t *self);
6163

shared-module/displayio/TileGrid.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,13 @@ void common_hal_displayio_tilegrid_set_transpose_xy(displayio_tilegrid_t *self,
342342
self->moved = true;
343343
}
344344

345+
bool common_hal_displayio_tilegrid_contains(displayio_tilegrid_t *self, uint16_t x, uint16_t y) {
346+
uint16_t right_edge = self->x + (self->width_in_tiles * self->tile_width);
347+
uint16_t bottom_edge = self->y + (self->height_in_tiles * self->tile_height);
348+
return x >= self->x && x < right_edge &&
349+
y >= self->y && y < bottom_edge;
350+
}
351+
345352
void common_hal_displayio_tilegrid_set_top_left(displayio_tilegrid_t *self, uint16_t x, uint16_t y) {
346353
self->top_left_x = x;
347354
self->top_left_y = y;

0 commit comments

Comments
 (0)