diff options
author | William Wilgus <wilgus.william@gmail.com> | 2022-04-15 01:54:42 -0400 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2022-04-15 01:54:42 -0400 |
commit | d56d96031c42a68fa38e7b12bf028ee6d2eb3ef3 (patch) | |
tree | 37e96ce3906f120f6509407b178972f680db57b3 | |
parent | b9c3ab2e049124894716305c9aa8a1d7a610d134 (diff) | |
download | rockbox-d56d96031c.tar.gz rockbox-d56d96031c.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
-rw-r--r-- | firmware/drivers/lcd-bitmap-common.c | 12 | ||||
-rw-r--r-- | firmware/export/lcd.h | 5 |
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 { |