summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2022-04-15 01:54:42 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2022-04-15 01:54:42 -0400
commitd56d96031c42a68fa38e7b12bf028ee6d2eb3ef3 (patch)
tree37e96ce3906f120f6509407b178972f680db57b3 /firmware
parentb9c3ab2e049124894716305c9aa8a1d7a610d134 (diff)
downloadrockbox-d56d96031c42a68fa38e7b12bf028ee6d2eb3ef3.tar.gz
rockbox-d56d96031c42a68fa38e7b12bf028ee6d2eb3ef3.zip
viewports add flag to disable updates
when drwing multiple areas of the screen with other gui elements you might want to combine updates into a single screen redraw Change-Id: Ie4130366fa13e25d3d14e937257d11547dd61134
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/lcd-bitmap-common.c12
-rw-r--r--firmware/export/lcd.h5
2 files changed, 14 insertions, 3 deletions
diff --git a/firmware/drivers/lcd-bitmap-common.c b/firmware/drivers/lcd-bitmap-common.c
index 48710df49b..4fe095096f 100644
--- a/firmware/drivers/lcd-bitmap-common.c
+++ b/firmware/drivers/lcd-bitmap-common.c
@@ -178,7 +178,13 @@ struct viewport *LCDFN(get_viewport)(bool *is_default)
void LCDFN(update_viewport)(void)
{
+
struct viewport* vp = LCDFN(current_viewport);
+ if ((vp->flags & VP_FLAG_OWNER_UPDATE) == VP_FLAG_OWNER_UPDATE)
+ {
+ logf("%s ignored - owner update", __func__);
+ return;
+ }
int x, y;
if (vp->buffer->stride != LCDFN(framebuffer_default.stride))
{
@@ -196,7 +202,11 @@ void LCDFN(update_viewport)(void)
void LCDFN(update_viewport_rect)(int x, int y, int width, int height)
{
struct viewport* vp = LCDFN(current_viewport);
-
+ if ((vp->flags & VP_FLAG_OWNER_UPDATE) == VP_FLAG_OWNER_UPDATE)
+ {
+ logf("%s ignored - owner update", __func__);
+ return;
+ }
/* handle the case of viewport with differing stride from main screen */
if (vp->buffer->stride != LCDFN(framebuffer_default.stride))
{
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h
index 13165129b1..2f8fd3e751 100644
--- a/firmware/export/lcd.h
+++ b/firmware/export/lcd.h
@@ -178,8 +178,9 @@ struct frame_buffer_t {
#define VP_IS_RTL(vp) (((vp)->flags & VP_FLAG_ALIGNMENT_MASK) == VP_FLAG_ALIGN_RIGHT)
-#define VP_FLAG_VP_DIRTY 0x4000
-#define VP_FLAG_CLEAR_FLAG 0x8000
+#define VP_FLAG_OWNER_UPDATE 0x2000 /* block update_vp functions */
+#define VP_FLAG_VP_DIRTY 0x4000
+#define VP_FLAG_CLEAR_FLAG 0x8000
#define VP_FLAG_VP_SET_CLEAN (VP_FLAG_CLEAR_FLAG | VP_FLAG_VP_DIRTY)
struct viewport {