Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions shared-module/displayio/ColorConverter.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,11 @@ bool common_hal_displayio_colorconverter_convert(displayio_colorconverter_t *sel
*output_color = __builtin_bswap16(packed);
return true;
}

// Currently no refresh logic is needed for a ColorConverter.
bool displayio_colorconverter_needs_refresh(displayio_colorconverter_t *self) {
return false;
}

void displayio_colorconverter_finish_refresh(displayio_colorconverter_t *self) {
}
3 changes: 3 additions & 0 deletions shared-module/displayio/ColorConverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,7 @@ typedef struct {
mp_obj_base_t base;
} displayio_colorconverter_t;

bool displayio_colorconverter_needs_refresh(displayio_colorconverter_t *self);
void displayio_colorconverter_finish_refresh(displayio_colorconverter_t *self);

#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_COLORCONVERTER_H
16 changes: 14 additions & 2 deletions shared-module/displayio/TileGrid.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,12 +170,24 @@ bool displayio_tilegrid_get_pixel(displayio_tilegrid_t *self, int16_t x, int16_t
}

bool displayio_tilegrid_needs_refresh(displayio_tilegrid_t *self) {
return self->needs_refresh || displayio_palette_needs_refresh(self->pixel_shader);
if (self->needs_refresh) {
return true;
} else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_palette_type)) {
return displayio_palette_needs_refresh(self->pixel_shader);
} else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_colorconverter_type)) {
return displayio_colorconverter_needs_refresh(self->pixel_shader);
}

return false;
}

void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) {
self->needs_refresh = false;
displayio_palette_finish_refresh(self->pixel_shader);
if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_palette_type)) {
displayio_palette_finish_refresh(self->pixel_shader);
} else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_colorconverter_type)) {
displayio_colorconverter_finish_refresh(self->pixel_shader);
}
// TODO(tannewt): We could double buffer changes to position and move them over here.
// That way they won't change during a refresh and tear.
}