Fix out of screen drawings (#842)
* Fix lock screen menu * Fix pin setup in lock menu * Desktop GUI layer on FS, black status bar * Desktop: fix spelling * Fix first start screen * Fix status bar drawing Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
@@ -25,7 +25,7 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
||||
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
canvas_draw_str(canvas, 2, 9, headers[m->screen]);
|
||||
canvas_draw_str(canvas, 2, 9 + STATUS_BAR_Y_SHIFT, headers[m->screen]);
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
|
||||
if(m->screen != DesktopViewStatsMeta) {
|
||||
@@ -40,13 +40,13 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
||||
furi_hal_version_get_hw_body(),
|
||||
furi_hal_version_get_hw_connect(),
|
||||
my_name ? my_name : "Unknown");
|
||||
canvas_draw_str(canvas, 5, 19, buffer);
|
||||
canvas_draw_str(canvas, 5, 19 + STATUS_BAR_Y_SHIFT, buffer);
|
||||
|
||||
ver = m->screen == DesktopViewStatsBoot ? furi_hal_version_get_bootloader_version() :
|
||||
furi_hal_version_get_firmware_version();
|
||||
|
||||
if(!ver) {
|
||||
canvas_draw_str(canvas, 5, 29, "No info");
|
||||
canvas_draw_str(canvas, 5, 29 + STATUS_BAR_Y_SHIFT, "No info");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
||||
"%s [%s]",
|
||||
version_get_version(ver),
|
||||
version_get_builddate(ver));
|
||||
canvas_draw_str(canvas, 5, 28, buffer);
|
||||
canvas_draw_str(canvas, 5, 28 + STATUS_BAR_Y_SHIFT, buffer);
|
||||
|
||||
snprintf(
|
||||
buffer,
|
||||
@@ -64,11 +64,11 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
||||
"%s [%s]",
|
||||
version_get_githash(ver),
|
||||
version_get_gitbranchnum(ver));
|
||||
canvas_draw_str(canvas, 5, 39, buffer);
|
||||
canvas_draw_str(canvas, 5, 39 + STATUS_BAR_Y_SHIFT, buffer);
|
||||
|
||||
snprintf(
|
||||
buffer, sizeof(buffer), "[%d] %s", version_get_target(ver), version_get_gitbranch(ver));
|
||||
canvas_draw_str(canvas, 5, 50, buffer);
|
||||
canvas_draw_str(canvas, 5, 50 + STATUS_BAR_Y_SHIFT, buffer);
|
||||
|
||||
} else {
|
||||
char buffer[64];
|
||||
@@ -81,7 +81,7 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
||||
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
snprintf(buffer, 64, "Icounter: %ld Butthurt %ld", m->icounter, m->butthurt);
|
||||
canvas_draw_str(canvas, 5, 19, buffer);
|
||||
canvas_draw_str(canvas, 5, 19 + STATUS_BAR_Y_SHIFT, buffer);
|
||||
|
||||
snprintf(
|
||||
buffer,
|
||||
@@ -89,11 +89,11 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
||||
"Level: %ld To level up: %ld",
|
||||
current_lvl,
|
||||
(remaining == (uint32_t)(-1) ? remaining : 0));
|
||||
canvas_draw_str(canvas, 5, 29, buffer);
|
||||
canvas_draw_str(canvas, 5, 29 + STATUS_BAR_Y_SHIFT, buffer);
|
||||
|
||||
snprintf(buffer, 64, "%s", asctime(localtime((const time_t*)&m->timestamp)));
|
||||
canvas_draw_str(canvas, 5, 39, buffer);
|
||||
canvas_draw_str(canvas, 0, 49, "[< >] icounter value [ok] save");
|
||||
canvas_draw_str(canvas, 5, 39 + STATUS_BAR_Y_SHIFT, buffer);
|
||||
canvas_draw_str(canvas, 0, 49 + STATUS_BAR_Y_SHIFT, "[< >] icounter value [ok] save");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -27,19 +27,24 @@ static void desktop_first_start_draw(Canvas* canvas, void* model) {
|
||||
const char* my_name = furi_hal_version_get_name_ptr();
|
||||
if(m->page == 0) {
|
||||
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart0_70x53);
|
||||
elements_multiline_text_framed(canvas, 75, 16, "Hey m8,\npress > to\ncontinue");
|
||||
elements_multiline_text_framed(
|
||||
canvas, 75, 16 + STATUS_BAR_Y_SHIFT, "Hey m8,\npress > to\ncontinue");
|
||||
} else if(m->page == 1) {
|
||||
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart1_59x53);
|
||||
elements_multiline_text_framed(canvas, 64, 16, "First Of All,\n... >");
|
||||
elements_multiline_text_framed(
|
||||
canvas, 64, 16 + STATUS_BAR_Y_SHIFT, "First Of All,\n... >");
|
||||
} else if(m->page == 2) {
|
||||
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart2_59x51);
|
||||
elements_multiline_text_framed(canvas, 64, 16, "Thank you\nfor your\nsupport! >");
|
||||
elements_multiline_text_framed(
|
||||
canvas, 64, 16 + STATUS_BAR_Y_SHIFT, "Thank you\nfor your\nsupport! >");
|
||||
} else if(m->page == 3) {
|
||||
canvas_draw_icon(canvas, width - 57, height - 45, &I_DolphinFirstStart3_57x48);
|
||||
elements_multiline_text_framed(canvas, 0, 16, "Kickstarter\ncampaign\nwas INSANE! >");
|
||||
elements_multiline_text_framed(
|
||||
canvas, 0, 16 + STATUS_BAR_Y_SHIFT, "Kickstarter\ncampaign\nwas INSANE! >");
|
||||
} else if(m->page == 4) {
|
||||
canvas_draw_icon(canvas, width - 67, height - 51, &I_DolphinFirstStart4_67x53);
|
||||
elements_multiline_text_framed(canvas, 0, 13, "Now\nallow me\nto introduce\nmyself >");
|
||||
elements_multiline_text_framed(
|
||||
canvas, 0, 13 + STATUS_BAR_Y_SHIFT, "Now\nallow me\nto introduce\nmyself >");
|
||||
} else if(m->page == 5) {
|
||||
char buf[64];
|
||||
snprintf(
|
||||
@@ -50,19 +55,25 @@ static void desktop_first_start_draw(Canvas* canvas, void* model) {
|
||||
my_name ? my_name : "Unknown",
|
||||
",\ncyberdolphin\nliving in your\npocket >");
|
||||
canvas_draw_icon(canvas, 0, height - 49, &I_DolphinFirstStart5_54x49);
|
||||
elements_multiline_text_framed(canvas, 60, 13, buf);
|
||||
elements_multiline_text_framed(canvas, 60, 13 + STATUS_BAR_Y_SHIFT, buf);
|
||||
} else if(m->page == 6) {
|
||||
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart6_58x54);
|
||||
elements_multiline_text_framed(
|
||||
canvas, 63, 13, "I can grow\nsmart'n'cool\nif you use me\noften >");
|
||||
canvas,
|
||||
63,
|
||||
13 + STATUS_BAR_Y_SHIFT,
|
||||
"I can grow\nsmart'n'cool\nif you use me\noften >");
|
||||
} else if(m->page == 7) {
|
||||
canvas_draw_icon(canvas, width - 61, height - 51, &I_DolphinFirstStart7_61x51);
|
||||
elements_multiline_text_framed(
|
||||
canvas, 0, 13, "As long as\nyou read, write\nand emulate >");
|
||||
canvas, 0, 13 + STATUS_BAR_Y_SHIFT, "As long as\nyou read, write\nand emulate >");
|
||||
} else if(m->page == 8) {
|
||||
canvas_draw_icon(canvas, width - 56, height - 51, &I_DolphinFirstStart8_56x51);
|
||||
elements_multiline_text_framed(
|
||||
canvas, 0, 13, "You can check\nmy level and\nmood in the\nPassport menu");
|
||||
canvas,
|
||||
0,
|
||||
13 + STATUS_BAR_Y_SHIFT,
|
||||
"You can check\nmy level and\nmood in the\nPassport menu");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -54,8 +54,8 @@ void desktop_lock_menu_render(Canvas* canvas, void* model) {
|
||||
DesktopLockMenuViewModel* m = model;
|
||||
canvas_clear(canvas);
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
canvas_draw_icon(canvas, -57, 0, &I_DoorLeft_70x55);
|
||||
canvas_draw_icon(canvas, 115, 0, &I_DoorRight_70x55);
|
||||
canvas_draw_icon(canvas, -57, 0 + STATUS_BAR_Y_SHIFT, &I_DoorLeft_70x55);
|
||||
canvas_draw_icon(canvas, 116, 0 + STATUS_BAR_Y_SHIFT, &I_DoorRight_70x55);
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
|
||||
for(uint8_t i = 0; i < 3; ++i) {
|
||||
@@ -64,9 +64,10 @@ void desktop_lock_menu_render(Canvas* canvas, void* model) {
|
||||
if(i == 1 && !m->pin_set) str = "Set PIN";
|
||||
if(m->hint_timeout && m->idx == 2 && m->idx == i) str = "Not implemented";
|
||||
|
||||
canvas_draw_str_aligned(canvas, 64, 13 + (i * 17), AlignCenter, AlignCenter, str);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 64, 9 + (i * 17) + STATUS_BAR_Y_SHIFT, AlignCenter, AlignCenter, str);
|
||||
|
||||
if(m->idx == i) elements_frame(canvas, 15, 5 + (i * 17), 98, 15);
|
||||
if(m->idx == i) elements_frame(canvas, 15, 1 + (i * 17) + STATUS_BAR_Y_SHIFT, 98, 15);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -17,13 +17,17 @@ void locked_view_timer_callback(void* context) {
|
||||
locked_view->callback(DesktopLockedEventUpdate, locked_view->context);
|
||||
}
|
||||
|
||||
void desktop_locked_set_dolphin_animation(DesktopLockedView* locked_view, const Icon* icon) {
|
||||
void desktop_locked_set_dolphin_animation(
|
||||
DesktopLockedView* locked_view,
|
||||
const Icon* icon,
|
||||
bool status_bar_background_black) {
|
||||
with_view_model(
|
||||
locked_view->view, (DesktopLockedViewModel * model) {
|
||||
if(model->animation) icon_animation_free(model->animation);
|
||||
model->animation = icon_animation_alloc(icon);
|
||||
view_tie_icon_animation(locked_view->view, model->animation);
|
||||
icon_animation_start(model->animation);
|
||||
model->status_bar_background_black = status_bar_background_black;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
@@ -95,23 +99,26 @@ void desktop_locked_render(Canvas* canvas, void* model) {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
|
||||
if(!m->animation_seq_end) {
|
||||
canvas_draw_icon(canvas, m->door_left_x, 0, &I_DoorLeft_70x55);
|
||||
canvas_draw_icon(canvas, m->door_right_x, 0, &I_DoorRight_70x55);
|
||||
canvas_draw_icon(canvas, m->door_left_x, 0 + STATUS_BAR_Y_SHIFT, &I_DoorLeft_70x55);
|
||||
canvas_draw_icon(canvas, m->door_right_x, 0 + STATUS_BAR_Y_SHIFT, &I_DoorRight_70x55);
|
||||
}
|
||||
|
||||
if(m->animation && m->animation_seq_end) {
|
||||
canvas_draw_icon_animation(canvas, 0, 0, m->animation);
|
||||
if(m->status_bar_background_black) {
|
||||
canvas_draw_box(canvas, 0, 0, GUI_STATUS_BAR_WIDTH, GUI_STATUS_BAR_HEIGHT);
|
||||
}
|
||||
canvas_draw_icon_animation(canvas, 0, 0 + STATUS_BAR_Y_SHIFT, m->animation);
|
||||
}
|
||||
|
||||
if(now < m->hint_expire_at) {
|
||||
if(!m->animation_seq_end) {
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
elements_multiline_text_framed(canvas, 42, 30, "Locked");
|
||||
elements_multiline_text_framed(canvas, 42, 30 + STATUS_BAR_Y_SHIFT, "Locked");
|
||||
|
||||
} else if(!m->pin_lock) {
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
canvas_draw_icon(canvas, 13, 2, &I_LockPopup_100x49);
|
||||
elements_multiline_text(canvas, 65, 20, "To unlock\npress:");
|
||||
canvas_draw_icon(canvas, 13, 2 + STATUS_BAR_Y_SHIFT, &I_LockPopup_100x49);
|
||||
elements_multiline_text(canvas, 65, 20 + STATUS_BAR_Y_SHIFT, "To unlock\npress:");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -43,6 +43,7 @@ typedef struct {
|
||||
IconAnimation* animation;
|
||||
uint32_t hint_expire_at;
|
||||
|
||||
bool status_bar_background_black;
|
||||
uint8_t scene_num;
|
||||
int8_t door_left_x;
|
||||
int8_t door_right_x;
|
||||
@@ -56,7 +57,10 @@ void desktop_locked_set_callback(
|
||||
DesktopLockedViewCallback callback,
|
||||
void* context);
|
||||
|
||||
void desktop_locked_set_dolphin_animation(DesktopLockedView* locked_view, const Icon* icon);
|
||||
void desktop_locked_set_dolphin_animation(
|
||||
DesktopLockedView* locked_view,
|
||||
const Icon* icon,
|
||||
bool status_bar_background_black);
|
||||
void desktop_locked_update_hint_timeout(DesktopLockedView* locked_view);
|
||||
void desktop_locked_reset_counter(DesktopLockedView* locked_view);
|
||||
void desktop_locked_reset_door_pos(DesktopLockedView* locked_view);
|
||||
|
@@ -22,7 +22,10 @@ void desktop_main_reset_hint(DesktopMainView* main_view) {
|
||||
});
|
||||
}
|
||||
|
||||
void desktop_main_switch_dolphin_animation(DesktopMainView* main_view, const Icon* icon) {
|
||||
void desktop_main_switch_dolphin_animation(
|
||||
DesktopMainView* main_view,
|
||||
const Icon* icon,
|
||||
bool status_bar_background_black) {
|
||||
with_view_model(
|
||||
main_view->view, (DesktopMainViewModel * model) {
|
||||
if(model->animation) icon_animation_free(model->animation);
|
||||
@@ -30,6 +33,7 @@ void desktop_main_switch_dolphin_animation(DesktopMainView* main_view, const Ico
|
||||
view_tie_icon_animation(main_view->view, model->animation);
|
||||
icon_animation_start(model->animation);
|
||||
model->icon = NULL;
|
||||
model->status_bar_background_black = status_bar_background_black;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
@@ -49,15 +53,18 @@ void desktop_main_render(Canvas* canvas, void* model) {
|
||||
DesktopMainViewModel* m = model;
|
||||
uint32_t now = osKernelGetTickCount();
|
||||
|
||||
if(m->status_bar_background_black) {
|
||||
canvas_draw_box(canvas, 0, 0, GUI_STATUS_BAR_WIDTH, GUI_STATUS_BAR_HEIGHT);
|
||||
}
|
||||
if(m->icon) {
|
||||
canvas_draw_icon(canvas, 0, 0, m->icon);
|
||||
canvas_draw_icon(canvas, 0, 0 + STATUS_BAR_Y_SHIFT, m->icon);
|
||||
} else if(m->animation) {
|
||||
canvas_draw_icon_animation(canvas, 0, 0, m->animation);
|
||||
canvas_draw_icon_animation(canvas, 0, 0 + STATUS_BAR_Y_SHIFT, m->animation);
|
||||
}
|
||||
|
||||
if(now < m->hint_expire_at) {
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
elements_multiline_text_framed(canvas, 42, 30, "Unlocked");
|
||||
elements_multiline_text_framed(canvas, 42, 30 + STATUS_BAR_Y_SHIFT, "Unlocked");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -32,6 +32,7 @@ typedef struct {
|
||||
IconAnimation* animation;
|
||||
const Icon* icon;
|
||||
uint8_t scene_num;
|
||||
bool status_bar_background_black;
|
||||
uint32_t hint_expire_at;
|
||||
} DesktopMainViewModel;
|
||||
|
||||
@@ -43,7 +44,10 @@ void desktop_main_set_callback(
|
||||
View* desktop_main_get_view(DesktopMainView* main_view);
|
||||
DesktopMainView* desktop_main_alloc();
|
||||
void desktop_main_free(DesktopMainView* main_view);
|
||||
void desktop_main_switch_dolphin_animation(DesktopMainView* main_view, const Icon* icon);
|
||||
void desktop_main_switch_dolphin_animation(
|
||||
DesktopMainView* main_view,
|
||||
const Icon* icon,
|
||||
bool status_bar_background_black);
|
||||
void desktop_main_unlocked(DesktopMainView* main_view);
|
||||
void desktop_main_reset_hint(DesktopMainView* main_view);
|
||||
void desktop_main_switch_dolphin_icon(DesktopMainView* main_view, const Icon* icon);
|
||||
|
Reference in New Issue
Block a user