summaryrefslogtreecommitdiff
path: root/shared-module/displayio/TileGrid.h
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2019-06-13 21:55:07 -0400
committerDan Halbert <halbert@halwitz.org>2019-06-13 21:55:07 -0400
commitbed6d43a768838fd3bc5d2048bf7acdc6e9b0a33 (patch)
tree814683e585940b502d4e47f8556a69045729c77a /shared-module/displayio/TileGrid.h
parent6fed24e1b6fce58f2c06328b9bc8b8f9d9512b42 (diff)
parent6be7cf7440acb827d4b0f767b6083a859499b045 (diff)
merge from upstream; WIP redo Address; no more AddressType
Diffstat (limited to 'shared-module/displayio/TileGrid.h')
-rw-r--r--shared-module/displayio/TileGrid.h37
1 files changed, 30 insertions, 7 deletions
diff --git a/shared-module/displayio/TileGrid.h b/shared-module/displayio/TileGrid.h
index 59645553d..4d97eccc2 100644
--- a/shared-module/displayio/TileGrid.h
+++ b/shared-module/displayio/TileGrid.h
@@ -31,29 +31,52 @@
#include <stdint.h>
#include "py/obj.h"
+#include "shared-module/displayio/area.h"
typedef struct {
mp_obj_base_t base;
mp_obj_t bitmap;
mp_obj_t pixel_shader;
- uint16_t x;
- uint16_t y;
+ int16_t x;
+ int16_t y;
+ uint16_t pixel_width;
+ uint16_t pixel_height;
uint16_t bitmap_width_in_tiles;
uint16_t width_in_tiles;
uint16_t height_in_tiles;
- uint16_t total_width;
- uint16_t total_height;
uint16_t tile_width;
uint16_t tile_height;
uint16_t top_left_x;
uint16_t top_left_y;
uint8_t* tiles;
- bool needs_refresh;
+ const displayio_buffer_transform_t* absolute_transform;
+ displayio_area_t dirty_area; // Stored as a relative area until the refresh area is fetched.
+ displayio_area_t previous_area; // Stored as an absolute area.
+ displayio_area_t current_area; // Stored as an absolute area so it applies across frames.
+ bool partial_change;
+ bool full_change;
+ bool first_draw;
+ bool moved;
bool inline_tiles;
+ bool in_group;
+ bool flip_x;
+ bool flip_y;
+ bool transpose_xy;
} displayio_tilegrid_t;
-bool displayio_tilegrid_get_pixel(displayio_tilegrid_t *self, int16_t x, int16_t y, uint16_t *pixel);
-bool displayio_tilegrid_needs_refresh(displayio_tilegrid_t *self);
+// Updating the screen is a three stage process.
+
+// The first stage is used to determine i
+displayio_area_t* displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *self, displayio_area_t* tail);
+
+// Area is always in absolute screen coordinates. Update transform is used to inform TileGrids how
+// they relate to it.
+bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self, const displayio_area_t* area, uint32_t* mask, uint32_t *buffer);
+void displayio_tilegrid_update_transform(displayio_tilegrid_t *group, const displayio_buffer_transform_t* parent_transform);
+
+// Fills in area with the maximum bounds of all related pixels in the last rendered frame. Returns
+// false if the tilegrid wasn't rendered in the last frame.
+bool displayio_tilegrid_get_previous_area(displayio_tilegrid_t *self, displayio_area_t* area);
void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self);
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_TILEGRID_H