GUI: Checkerboard overlay behind popup elements (#380)

* GUI: Checkerboard overlay behind popup elements

Adds setting 'Popup Overlay' (default ON) which draws a checkerboard pattern behind popups, like the Archive actions menu, keypad/pin lock modal, and the varitemlist locked message. Gives the illusion of separation from the popup element and the background content and is an aesthetic improvement.

* Refactor

* Update changelog

---------

Co-authored-by: Willy-JL <49810075+Willy-JL@users.noreply.github.com>
This commit is contained in:
Alexander Bays
2025-04-12 21:59:28 -05:00
committed by GitHub
parent 21c9852666
commit 16fb7e44df
10 changed files with 127 additions and 57 deletions

View File

@@ -167,6 +167,9 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) {
}
if(m->show_lock_popup) {
if(momentum_settings.popup_overlay) {
canvas_draw_overlay(canvas);
}
canvas_set_font(canvas, FontSecondary);
elements_bold_rounded_frame(canvas, 24, 4, 80, 56);
canvas_draw_str_aligned(canvas, 64, 16, AlignCenter, AlignCenter, "Keypad Lock");

View File

@@ -484,6 +484,22 @@ void canvas_draw_dot(Canvas* canvas, int32_t x, int32_t y) {
u8g2_DrawPixel(&canvas->fb, x, y);
}
void canvas_draw_overlay(Canvas* canvas) {
furi_check(canvas);
uint8_t original = canvas->fb.draw_color;
canvas_set_color(canvas, ColorWhite);
for(size_t j = 0; j < canvas->height; j++) {
bool draw_pixel = (j % 2) == 0;
for(size_t i = 0; i < canvas->width; i += 2) {
size_t x = i + (draw_pixel ? 0 : 1);
if(x < canvas->width) {
canvas_draw_dot(canvas, x, j);
}
}
}
canvas->fb.draw_color = original;
}
void canvas_draw_box(Canvas* canvas, int32_t x, int32_t y, size_t width, size_t height) {
furi_check(canvas);
x += canvas->offset_x;

View File

@@ -346,6 +346,12 @@ void canvas_draw_xbm_ex(
*/
void canvas_draw_dot(Canvas* canvas, int32_t x, int32_t y);
/** Draw overlay
*
* @param canvas Canvas instance
*/
void canvas_draw_overlay(Canvas* canvas);
/** Draw box of width, height at x,y
*
* @param canvas Canvas instance

View File

@@ -5,6 +5,7 @@
#include <assets_icons.h>
#include <m-array.h>
#include <stdint.h>
#include <momentum/settings.h>
struct VariableItem {
FuriString* label;
@@ -146,6 +147,9 @@ static void variable_item_list_draw_callback(Canvas* canvas, void* _model) {
elements_scrollbar(canvas, model->position, VariableItemArray_size(model->items));
if(model->locked_message_visible) {
if(momentum_settings.popup_overlay) {
canvas_draw_overlay(canvas);
}
canvas_set_color(canvas, ColorWhite);
canvas_draw_box(canvas, 8, 10, 110, 48);
canvas_set_color(canvas, ColorBlack);