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:
parent
6857b98ecd
commit
3ab9112c21
@ -25,6 +25,8 @@
|
|||||||
#include "desktop/desktop_settings/desktop_settings.h"
|
#include "desktop/desktop_settings/desktop_settings.h"
|
||||||
#include <gui/icon.h>
|
#include <gui/icon.h>
|
||||||
|
|
||||||
|
#define STATUS_BAR_Y_SHIFT 13
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DesktopViewMain,
|
DesktopViewMain,
|
||||||
DesktopViewLockMenu,
|
DesktopViewLockMenu,
|
||||||
|
@ -214,11 +214,18 @@ void desktop_animation_activate(DesktopAnimation* animation) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const Icon* desktop_animation_get_current_idle_animation(DesktopAnimation* animation) {
|
static const Icon* desktop_animation_get_current_idle_animation(
|
||||||
const Icon* active_icon = animation->current->active->icon;
|
DesktopAnimation* animation,
|
||||||
const Icon* basic_icon = animation->current->basic->icon;
|
bool* status_bar_background_black) {
|
||||||
return (animation->state == DesktopAnimationStateActive && active_icon) ? active_icon :
|
const ActiveAnimation* active = animation->current->active;
|
||||||
basic_icon;
|
const BasicAnimation* basic = animation->current->basic;
|
||||||
|
if(animation->state == DesktopAnimationStateActive && active->icon) {
|
||||||
|
*status_bar_background_black = active->black_status_bar;
|
||||||
|
return active->icon;
|
||||||
|
} else {
|
||||||
|
*status_bar_background_black = basic->black_status_bar;
|
||||||
|
return basic->icon;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Every time somebody starts 'desktop_animation_get_animation()'
|
// Every time somebody starts 'desktop_animation_get_animation()'
|
||||||
@ -227,7 +234,9 @@ static const Icon* desktop_animation_get_current_idle_animation(DesktopAnimation
|
|||||||
// 3) check if the SD card is empty
|
// 3) check if the SD card is empty
|
||||||
// 4) if all false - get idle animation
|
// 4) if all false - get idle animation
|
||||||
|
|
||||||
const Icon* desktop_animation_get_animation(DesktopAnimation* animation) {
|
const Icon* desktop_animation_get_animation(
|
||||||
|
DesktopAnimation* animation,
|
||||||
|
bool* status_bar_background_black) {
|
||||||
Dolphin* dolphin = furi_record_open("dolphin");
|
Dolphin* dolphin = furi_record_open("dolphin");
|
||||||
Storage* storage = furi_record_open("storage");
|
Storage* storage = furi_record_open("storage");
|
||||||
const Icon* icon = NULL;
|
const Icon* icon = NULL;
|
||||||
@ -272,7 +281,10 @@ const Icon* desktop_animation_get_animation(DesktopAnimation* animation) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!icon) {
|
if(!icon) {
|
||||||
icon = desktop_animation_get_current_idle_animation(animation);
|
icon =
|
||||||
|
desktop_animation_get_current_idle_animation(animation, status_bar_background_black);
|
||||||
|
} else {
|
||||||
|
status_bar_background_black = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
furi_record_close("storage");
|
furi_record_close("storage");
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <gui/icon.h>
|
#include <gui/icon.h>
|
||||||
|
|
||||||
@ -22,11 +23,13 @@ struct BasicAnimation {
|
|||||||
uint16_t duration; // sec
|
uint16_t duration; // sec
|
||||||
uint16_t active_cooldown;
|
uint16_t active_cooldown;
|
||||||
uint8_t weight;
|
uint8_t weight;
|
||||||
|
bool black_status_bar;
|
||||||
uint16_t butthurt_level_mask;
|
uint16_t butthurt_level_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ActiveAnimation {
|
struct ActiveAnimation {
|
||||||
const Icon* icon;
|
const Icon* icon;
|
||||||
|
bool black_status_bar;
|
||||||
uint16_t duration; // sec
|
uint16_t duration; // sec
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -49,7 +52,8 @@ DesktopAnimationState desktop_animation_handle_right(DesktopAnimation* animation
|
|||||||
|
|
||||||
void desktop_animation_start_oneshot_levelup(DesktopAnimation* animation);
|
void desktop_animation_start_oneshot_levelup(DesktopAnimation* animation);
|
||||||
|
|
||||||
const Icon* desktop_animation_get_animation(DesktopAnimation* animation);
|
const Icon*
|
||||||
|
desktop_animation_get_animation(DesktopAnimation* animation, bool* status_bar_background_black);
|
||||||
const Icon* desktop_animation_get_oneshot_frame(DesktopAnimation* animation);
|
const Icon* desktop_animation_get_oneshot_frame(DesktopAnimation* animation);
|
||||||
|
|
||||||
void desktop_start_new_idle_animation(DesktopAnimation* animation);
|
void desktop_start_new_idle_animation(DesktopAnimation* animation);
|
||||||
|
@ -33,6 +33,7 @@ static const ActiveAnimation animation_TV_active = {
|
|||||||
|
|
||||||
static const BasicAnimation animation_sleep = {
|
static const BasicAnimation animation_sleep = {
|
||||||
.icon = &A_Sleep_128x51,
|
.icon = &A_Sleep_128x51,
|
||||||
|
.black_status_bar = true,
|
||||||
.duration = COMMON_BASIC_DURATION,
|
.duration = COMMON_BASIC_DURATION,
|
||||||
.weight = COMMON_WEIGHT,
|
.weight = COMMON_WEIGHT,
|
||||||
.active_cooldown = COMMON_ACTIVE_COOLDOWN,
|
.active_cooldown = COMMON_ACTIVE_COOLDOWN,
|
||||||
@ -43,6 +44,7 @@ static const BasicAnimation animation_sleep = {
|
|||||||
|
|
||||||
static const ActiveAnimation animation_sleep_active = {
|
static const ActiveAnimation animation_sleep_active = {
|
||||||
.icon = &A_SleepActive_128x51,
|
.icon = &A_SleepActive_128x51,
|
||||||
|
.black_status_bar = true,
|
||||||
.duration = COMMON_ACTIVE_DURATION(2),
|
.duration = COMMON_ACTIVE_DURATION(2),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -19,8 +19,9 @@ void desktop_scene_hw_mismatch_on_enter(void* context) {
|
|||||||
furi_hal_version_get_hw_target(),
|
furi_hal_version_get_hw_target(),
|
||||||
version_get_target(NULL));
|
version_get_target(NULL));
|
||||||
popup_set_context(popup, desktop);
|
popup_set_context(popup, desktop);
|
||||||
popup_set_header(popup, "!!!! HW Mismatch !!!!", 60, 14, AlignCenter, AlignCenter);
|
popup_set_header(
|
||||||
popup_set_text(popup, buffer, 60, 37, AlignCenter, AlignCenter);
|
popup, "!!!! HW Mismatch !!!!", 60, 14 + STATUS_BAR_Y_SHIFT, AlignCenter, AlignCenter);
|
||||||
|
popup_set_text(popup, buffer, 60, 37 + STATUS_BAR_Y_SHIFT, AlignCenter, AlignCenter);
|
||||||
popup_set_callback(popup, desktop_scene_hw_mismatch_callback);
|
popup_set_callback(popup, desktop_scene_hw_mismatch_callback);
|
||||||
view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewHwMismatch);
|
view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewHwMismatch);
|
||||||
}
|
}
|
||||||
|
@ -25,8 +25,10 @@ void desktop_scene_locked_on_enter(void* context) {
|
|||||||
|
|
||||||
desktop_animation_set_animation_changed_callback(
|
desktop_animation_set_animation_changed_callback(
|
||||||
desktop->animation, desktop_scene_locked_animation_changed_callback, desktop);
|
desktop->animation, desktop_scene_locked_animation_changed_callback, desktop);
|
||||||
const Icon* icon = desktop_animation_get_animation(desktop->animation);
|
bool status_bar_background_black = false;
|
||||||
desktop_locked_set_dolphin_animation(locked_view, icon);
|
const Icon* icon =
|
||||||
|
desktop_animation_get_animation(desktop->animation, &status_bar_background_black);
|
||||||
|
desktop_locked_set_dolphin_animation(locked_view, icon, status_bar_background_black);
|
||||||
|
|
||||||
uint32_t state = scene_manager_get_scene_state(desktop->scene_manager, DesktopViewLocked);
|
uint32_t state = scene_manager_get_scene_state(desktop->scene_manager, DesktopViewLocked);
|
||||||
|
|
||||||
@ -81,8 +83,11 @@ bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) {
|
|||||||
desktop->pincode_buffer.length = 0;
|
desktop->pincode_buffer.length = 0;
|
||||||
break;
|
break;
|
||||||
case DesktopMainEventUpdateAnimation: {
|
case DesktopMainEventUpdateAnimation: {
|
||||||
const Icon* icon = desktop_animation_get_animation(desktop->animation);
|
bool status_bar_background_black = false;
|
||||||
desktop_locked_set_dolphin_animation(desktop->locked_view, icon);
|
const Icon* icon =
|
||||||
|
desktop_animation_get_animation(desktop->animation, &status_bar_background_black);
|
||||||
|
desktop_locked_set_dolphin_animation(
|
||||||
|
desktop->locked_view, icon, status_bar_background_black);
|
||||||
consumed = true;
|
consumed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -54,8 +54,10 @@ void desktop_scene_main_on_enter(void* context) {
|
|||||||
desktop_animation_activate(desktop->animation);
|
desktop_animation_activate(desktop->animation);
|
||||||
desktop_animation_set_animation_changed_callback(
|
desktop_animation_set_animation_changed_callback(
|
||||||
desktop->animation, desktop_scene_main_animation_changed_callback, desktop);
|
desktop->animation, desktop_scene_main_animation_changed_callback, desktop);
|
||||||
const Icon* icon = desktop_animation_get_animation(desktop->animation);
|
bool status_bar_background_black = false;
|
||||||
desktop_main_switch_dolphin_animation(desktop->main_view, icon);
|
const Icon* icon =
|
||||||
|
desktop_animation_get_animation(desktop->animation, &status_bar_background_black);
|
||||||
|
desktop_main_switch_dolphin_animation(desktop->main_view, icon, status_bar_background_black);
|
||||||
view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewMain);
|
view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewMain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,8 +94,11 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DesktopMainEventUpdateAnimation: {
|
case DesktopMainEventUpdateAnimation: {
|
||||||
const Icon* icon = desktop_animation_get_animation(desktop->animation);
|
bool status_bar_background_black = false;
|
||||||
desktop_main_switch_dolphin_animation(desktop->main_view, icon);
|
const Icon* icon =
|
||||||
|
desktop_animation_get_animation(desktop->animation, &status_bar_background_black);
|
||||||
|
desktop_main_switch_dolphin_animation(
|
||||||
|
desktop->main_view, icon, status_bar_background_black);
|
||||||
consumed = true;
|
consumed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
|||||||
|
|
||||||
canvas_set_color(canvas, ColorBlack);
|
canvas_set_color(canvas, ColorBlack);
|
||||||
canvas_set_font(canvas, FontPrimary);
|
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);
|
canvas_set_font(canvas, FontSecondary);
|
||||||
|
|
||||||
if(m->screen != DesktopViewStatsMeta) {
|
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_body(),
|
||||||
furi_hal_version_get_hw_connect(),
|
furi_hal_version_get_hw_connect(),
|
||||||
my_name ? my_name : "Unknown");
|
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() :
|
ver = m->screen == DesktopViewStatsBoot ? furi_hal_version_get_bootloader_version() :
|
||||||
furi_hal_version_get_firmware_version();
|
furi_hal_version_get_firmware_version();
|
||||||
|
|
||||||
if(!ver) {
|
if(!ver) {
|
||||||
canvas_draw_str(canvas, 5, 29, "No info");
|
canvas_draw_str(canvas, 5, 29 + STATUS_BAR_Y_SHIFT, "No info");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
|||||||
"%s [%s]",
|
"%s [%s]",
|
||||||
version_get_version(ver),
|
version_get_version(ver),
|
||||||
version_get_builddate(ver));
|
version_get_builddate(ver));
|
||||||
canvas_draw_str(canvas, 5, 28, buffer);
|
canvas_draw_str(canvas, 5, 28 + STATUS_BAR_Y_SHIFT, buffer);
|
||||||
|
|
||||||
snprintf(
|
snprintf(
|
||||||
buffer,
|
buffer,
|
||||||
@ -64,11 +64,11 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
|||||||
"%s [%s]",
|
"%s [%s]",
|
||||||
version_get_githash(ver),
|
version_get_githash(ver),
|
||||||
version_get_gitbranchnum(ver));
|
version_get_gitbranchnum(ver));
|
||||||
canvas_draw_str(canvas, 5, 39, buffer);
|
canvas_draw_str(canvas, 5, 39 + STATUS_BAR_Y_SHIFT, buffer);
|
||||||
|
|
||||||
snprintf(
|
snprintf(
|
||||||
buffer, sizeof(buffer), "[%d] %s", version_get_target(ver), version_get_gitbranch(ver));
|
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 {
|
} else {
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
@ -81,7 +81,7 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
|||||||
|
|
||||||
canvas_set_font(canvas, FontSecondary);
|
canvas_set_font(canvas, FontSecondary);
|
||||||
snprintf(buffer, 64, "Icounter: %ld Butthurt %ld", m->icounter, m->butthurt);
|
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(
|
snprintf(
|
||||||
buffer,
|
buffer,
|
||||||
@ -89,11 +89,11 @@ void desktop_debug_render(Canvas* canvas, void* model) {
|
|||||||
"Level: %ld To level up: %ld",
|
"Level: %ld To level up: %ld",
|
||||||
current_lvl,
|
current_lvl,
|
||||||
(remaining == (uint32_t)(-1) ? remaining : 0));
|
(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)));
|
snprintf(buffer, 64, "%s", asctime(localtime((const time_t*)&m->timestamp)));
|
||||||
canvas_draw_str(canvas, 5, 39, buffer);
|
canvas_draw_str(canvas, 5, 39 + STATUS_BAR_Y_SHIFT, buffer);
|
||||||
canvas_draw_str(canvas, 0, 49, "[< >] icounter value [ok] save");
|
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();
|
const char* my_name = furi_hal_version_get_name_ptr();
|
||||||
if(m->page == 0) {
|
if(m->page == 0) {
|
||||||
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart0_70x53);
|
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) {
|
} else if(m->page == 1) {
|
||||||
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart1_59x53);
|
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) {
|
} else if(m->page == 2) {
|
||||||
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart2_59x51);
|
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) {
|
} else if(m->page == 3) {
|
||||||
canvas_draw_icon(canvas, width - 57, height - 45, &I_DolphinFirstStart3_57x48);
|
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) {
|
} else if(m->page == 4) {
|
||||||
canvas_draw_icon(canvas, width - 67, height - 51, &I_DolphinFirstStart4_67x53);
|
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) {
|
} else if(m->page == 5) {
|
||||||
char buf[64];
|
char buf[64];
|
||||||
snprintf(
|
snprintf(
|
||||||
@ -50,19 +55,25 @@ static void desktop_first_start_draw(Canvas* canvas, void* model) {
|
|||||||
my_name ? my_name : "Unknown",
|
my_name ? my_name : "Unknown",
|
||||||
",\ncyberdolphin\nliving in your\npocket >");
|
",\ncyberdolphin\nliving in your\npocket >");
|
||||||
canvas_draw_icon(canvas, 0, height - 49, &I_DolphinFirstStart5_54x49);
|
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) {
|
} else if(m->page == 6) {
|
||||||
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart6_58x54);
|
canvas_draw_icon(canvas, 0, height - 51, &I_DolphinFirstStart6_58x54);
|
||||||
elements_multiline_text_framed(
|
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) {
|
} else if(m->page == 7) {
|
||||||
canvas_draw_icon(canvas, width - 61, height - 51, &I_DolphinFirstStart7_61x51);
|
canvas_draw_icon(canvas, width - 61, height - 51, &I_DolphinFirstStart7_61x51);
|
||||||
elements_multiline_text_framed(
|
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) {
|
} else if(m->page == 8) {
|
||||||
canvas_draw_icon(canvas, width - 56, height - 51, &I_DolphinFirstStart8_56x51);
|
canvas_draw_icon(canvas, width - 56, height - 51, &I_DolphinFirstStart8_56x51);
|
||||||
elements_multiline_text_framed(
|
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;
|
DesktopLockMenuViewModel* m = model;
|
||||||
canvas_clear(canvas);
|
canvas_clear(canvas);
|
||||||
canvas_set_color(canvas, ColorBlack);
|
canvas_set_color(canvas, ColorBlack);
|
||||||
canvas_draw_icon(canvas, -57, 0, &I_DoorLeft_70x55);
|
canvas_draw_icon(canvas, -57, 0 + STATUS_BAR_Y_SHIFT, &I_DoorLeft_70x55);
|
||||||
canvas_draw_icon(canvas, 115, 0, &I_DoorRight_70x55);
|
canvas_draw_icon(canvas, 116, 0 + STATUS_BAR_Y_SHIFT, &I_DoorRight_70x55);
|
||||||
canvas_set_font(canvas, FontSecondary);
|
canvas_set_font(canvas, FontSecondary);
|
||||||
|
|
||||||
for(uint8_t i = 0; i < 3; ++i) {
|
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(i == 1 && !m->pin_set) str = "Set PIN";
|
||||||
if(m->hint_timeout && m->idx == 2 && m->idx == i) str = "Not implemented";
|
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);
|
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(
|
with_view_model(
|
||||||
locked_view->view, (DesktopLockedViewModel * model) {
|
locked_view->view, (DesktopLockedViewModel * model) {
|
||||||
if(model->animation) icon_animation_free(model->animation);
|
if(model->animation) icon_animation_free(model->animation);
|
||||||
model->animation = icon_animation_alloc(icon);
|
model->animation = icon_animation_alloc(icon);
|
||||||
view_tie_icon_animation(locked_view->view, model->animation);
|
view_tie_icon_animation(locked_view->view, model->animation);
|
||||||
icon_animation_start(model->animation);
|
icon_animation_start(model->animation);
|
||||||
|
model->status_bar_background_black = status_bar_background_black;
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -95,23 +99,26 @@ void desktop_locked_render(Canvas* canvas, void* model) {
|
|||||||
canvas_set_color(canvas, ColorBlack);
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
|
||||||
if(!m->animation_seq_end) {
|
if(!m->animation_seq_end) {
|
||||||
canvas_draw_icon(canvas, m->door_left_x, 0, &I_DoorLeft_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, &I_DoorRight_70x55);
|
canvas_draw_icon(canvas, m->door_right_x, 0 + STATUS_BAR_Y_SHIFT, &I_DoorRight_70x55);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m->animation && m->animation_seq_end) {
|
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(now < m->hint_expire_at) {
|
||||||
if(!m->animation_seq_end) {
|
if(!m->animation_seq_end) {
|
||||||
canvas_set_font(canvas, FontPrimary);
|
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) {
|
} else if(!m->pin_lock) {
|
||||||
canvas_set_font(canvas, FontSecondary);
|
canvas_set_font(canvas, FontSecondary);
|
||||||
canvas_draw_icon(canvas, 13, 2, &I_LockPopup_100x49);
|
canvas_draw_icon(canvas, 13, 2 + STATUS_BAR_Y_SHIFT, &I_LockPopup_100x49);
|
||||||
elements_multiline_text(canvas, 65, 20, "To unlock\npress:");
|
elements_multiline_text(canvas, 65, 20 + STATUS_BAR_Y_SHIFT, "To unlock\npress:");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ typedef struct {
|
|||||||
IconAnimation* animation;
|
IconAnimation* animation;
|
||||||
uint32_t hint_expire_at;
|
uint32_t hint_expire_at;
|
||||||
|
|
||||||
|
bool status_bar_background_black;
|
||||||
uint8_t scene_num;
|
uint8_t scene_num;
|
||||||
int8_t door_left_x;
|
int8_t door_left_x;
|
||||||
int8_t door_right_x;
|
int8_t door_right_x;
|
||||||
@ -56,7 +57,10 @@ void desktop_locked_set_callback(
|
|||||||
DesktopLockedViewCallback callback,
|
DesktopLockedViewCallback callback,
|
||||||
void* context);
|
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_update_hint_timeout(DesktopLockedView* locked_view);
|
||||||
void desktop_locked_reset_counter(DesktopLockedView* locked_view);
|
void desktop_locked_reset_counter(DesktopLockedView* locked_view);
|
||||||
void desktop_locked_reset_door_pos(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(
|
with_view_model(
|
||||||
main_view->view, (DesktopMainViewModel * model) {
|
main_view->view, (DesktopMainViewModel * model) {
|
||||||
if(model->animation) icon_animation_free(model->animation);
|
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);
|
view_tie_icon_animation(main_view->view, model->animation);
|
||||||
icon_animation_start(model->animation);
|
icon_animation_start(model->animation);
|
||||||
model->icon = NULL;
|
model->icon = NULL;
|
||||||
|
model->status_bar_background_black = status_bar_background_black;
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -49,15 +53,18 @@ void desktop_main_render(Canvas* canvas, void* model) {
|
|||||||
DesktopMainViewModel* m = model;
|
DesktopMainViewModel* m = model;
|
||||||
uint32_t now = osKernelGetTickCount();
|
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) {
|
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) {
|
} 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) {
|
if(now < m->hint_expire_at) {
|
||||||
canvas_set_font(canvas, FontPrimary);
|
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;
|
IconAnimation* animation;
|
||||||
const Icon* icon;
|
const Icon* icon;
|
||||||
uint8_t scene_num;
|
uint8_t scene_num;
|
||||||
|
bool status_bar_background_black;
|
||||||
uint32_t hint_expire_at;
|
uint32_t hint_expire_at;
|
||||||
} DesktopMainViewModel;
|
} DesktopMainViewModel;
|
||||||
|
|
||||||
@ -43,7 +44,10 @@ void desktop_main_set_callback(
|
|||||||
View* desktop_main_get_view(DesktopMainView* main_view);
|
View* desktop_main_get_view(DesktopMainView* main_view);
|
||||||
DesktopMainView* desktop_main_alloc();
|
DesktopMainView* desktop_main_alloc();
|
||||||
void desktop_main_free(DesktopMainView* main_view);
|
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_unlocked(DesktopMainView* main_view);
|
||||||
void desktop_main_reset_hint(DesktopMainView* main_view);
|
void desktop_main_reset_hint(DesktopMainView* main_view);
|
||||||
void desktop_main_switch_dolphin_icon(DesktopMainView* main_view, const Icon* icon);
|
void desktop_main_switch_dolphin_icon(DesktopMainView* main_view, const Icon* icon);
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#include "gui/canvas.h"
|
||||||
#include "gui_i.h"
|
#include "gui_i.h"
|
||||||
|
|
||||||
#define TAG "GuiSrv"
|
#define TAG "GuiSrv"
|
||||||
@ -53,7 +54,19 @@ void gui_redraw_status_bar(Gui* gui) {
|
|||||||
canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal);
|
canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal);
|
||||||
canvas_frame_set(
|
canvas_frame_set(
|
||||||
gui->canvas, GUI_STATUS_BAR_X, GUI_STATUS_BAR_Y, GUI_DISPLAY_WIDTH, GUI_STATUS_BAR_HEIGHT);
|
gui->canvas, GUI_STATUS_BAR_X, GUI_STATUS_BAR_Y, GUI_DISPLAY_WIDTH, GUI_STATUS_BAR_HEIGHT);
|
||||||
|
|
||||||
|
/* for support black theme - paint white area and
|
||||||
|
* draw icon with transparent white color
|
||||||
|
*/
|
||||||
|
canvas_set_color(gui->canvas, ColorWhite);
|
||||||
|
canvas_draw_box(gui->canvas, 1, 1, 9, 7);
|
||||||
|
canvas_draw_box(gui->canvas, 7, 3, 58, 6);
|
||||||
|
canvas_draw_box(gui->canvas, 61, 1, 32, 7);
|
||||||
|
canvas_draw_box(gui->canvas, 89, 3, 38, 6);
|
||||||
|
canvas_set_color(gui->canvas, ColorBlack);
|
||||||
|
canvas_set_bitmap_mode(gui->canvas, 1);
|
||||||
canvas_draw_icon(gui->canvas, 0, 0, &I_Background_128x11);
|
canvas_draw_icon(gui->canvas, 0, 0, &I_Background_128x11);
|
||||||
|
canvas_set_bitmap_mode(gui->canvas, 0);
|
||||||
|
|
||||||
// Right side
|
// Right side
|
||||||
x = GUI_DISPLAY_WIDTH;
|
x = GUI_DISPLAY_WIDTH;
|
||||||
@ -66,25 +79,22 @@ void gui_redraw_status_bar(Gui* gui) {
|
|||||||
if(!width) width = 8;
|
if(!width) width = 8;
|
||||||
x_used += width;
|
x_used += width;
|
||||||
x -= (width + 2);
|
x -= (width + 2);
|
||||||
canvas_frame_set(gui->canvas, x - 3, GUI_STATUS_BAR_Y, width, GUI_STATUS_BAR_HEIGHT);
|
canvas_frame_set(
|
||||||
|
gui->canvas, x - 3, GUI_STATUS_BAR_Y, width + 5, GUI_STATUS_BAR_HEIGHT);
|
||||||
|
|
||||||
canvas_set_color(gui->canvas, ColorWhite);
|
canvas_set_color(gui->canvas, ColorWhite);
|
||||||
canvas_draw_box(gui->canvas, 1, 1, width + 3, 11);
|
canvas_draw_box(gui->canvas, 2, 1, width + 2, 10);
|
||||||
|
|
||||||
canvas_set_color(gui->canvas, ColorBlack);
|
canvas_set_color(gui->canvas, ColorBlack);
|
||||||
|
|
||||||
canvas_draw_box(gui->canvas, 1, 0, 1, 12);
|
canvas_draw_rframe(
|
||||||
canvas_draw_box(gui->canvas, 0, 1, 1, 11);
|
gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas), 1);
|
||||||
|
canvas_draw_line(gui->canvas, 1, 1, 1, canvas_height(gui->canvas) - 2);
|
||||||
canvas_draw_box(gui->canvas, 1, 11, width + 4, 2);
|
canvas_draw_line(
|
||||||
canvas_draw_box(gui->canvas, 1, 0, width + 4, 1);
|
gui->canvas,
|
||||||
canvas_draw_box(gui->canvas, width + 4, 1, 1, 11);
|
2,
|
||||||
|
canvas_height(gui->canvas) - 2,
|
||||||
canvas_set_color(gui->canvas, ColorWhite);
|
canvas_width(gui->canvas) - 2,
|
||||||
canvas_draw_dot(gui->canvas, width + 4, 0);
|
canvas_height(gui->canvas) - 2);
|
||||||
canvas_draw_dot(gui->canvas, width + 4, 12);
|
|
||||||
|
|
||||||
canvas_set_color(gui->canvas, ColorBlack);
|
|
||||||
|
|
||||||
canvas_frame_set(
|
canvas_frame_set(
|
||||||
gui->canvas, x, GUI_STATUS_BAR_Y + 2, width, GUI_STATUS_BAR_WORKAREA_HEIGHT);
|
gui->canvas, x, GUI_STATUS_BAR_Y + 2, width, GUI_STATUS_BAR_WORKAREA_HEIGHT);
|
||||||
@ -103,26 +113,23 @@ void gui_redraw_status_bar(Gui* gui) {
|
|||||||
width = view_port_get_width(view_port);
|
width = view_port_get_width(view_port);
|
||||||
if(!width) width = 8;
|
if(!width) width = 8;
|
||||||
x_used += width;
|
x_used += width;
|
||||||
canvas_frame_set(gui->canvas, x, GUI_STATUS_BAR_Y, width, GUI_STATUS_BAR_HEIGHT);
|
|
||||||
|
canvas_frame_set(
|
||||||
|
gui->canvas, 0, GUI_STATUS_BAR_Y, x + width + 5, GUI_STATUS_BAR_HEIGHT);
|
||||||
|
canvas_draw_rframe(
|
||||||
|
gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas), 1);
|
||||||
|
canvas_draw_line(gui->canvas, 1, 1, 1, canvas_height(gui->canvas) - 2);
|
||||||
|
canvas_draw_line(
|
||||||
|
gui->canvas,
|
||||||
|
2,
|
||||||
|
canvas_height(gui->canvas) - 2,
|
||||||
|
canvas_width(gui->canvas) - 2,
|
||||||
|
canvas_height(gui->canvas) - 2);
|
||||||
|
|
||||||
|
canvas_frame_set(gui->canvas, x, GUI_STATUS_BAR_Y, width + 5, GUI_STATUS_BAR_HEIGHT);
|
||||||
|
|
||||||
canvas_set_color(gui->canvas, ColorWhite);
|
canvas_set_color(gui->canvas, ColorWhite);
|
||||||
canvas_draw_box(gui->canvas, 1, 1, width + 3, 11);
|
canvas_draw_box(gui->canvas, 2, 1, width + 2, 10);
|
||||||
|
|
||||||
canvas_set_color(gui->canvas, ColorBlack);
|
|
||||||
|
|
||||||
if(x == 0) { // Frame start
|
|
||||||
canvas_draw_box(gui->canvas, 1, 0, 1, 12);
|
|
||||||
canvas_draw_box(gui->canvas, 0, 1, 1, 11);
|
|
||||||
}
|
|
||||||
|
|
||||||
canvas_draw_box(gui->canvas, 1, 11, width + 4, 2);
|
|
||||||
canvas_draw_box(gui->canvas, 1, 0, width + 4, 1);
|
|
||||||
canvas_draw_box(gui->canvas, width + 4, 0, 1, 12);
|
|
||||||
|
|
||||||
canvas_set_color(gui->canvas, ColorWhite);
|
|
||||||
canvas_draw_dot(gui->canvas, width + 4, 0);
|
|
||||||
canvas_draw_dot(gui->canvas, width + 4, 12);
|
|
||||||
|
|
||||||
canvas_set_color(gui->canvas, ColorBlack);
|
canvas_set_color(gui->canvas, ColorBlack);
|
||||||
|
|
||||||
canvas_frame_set(
|
canvas_frame_set(
|
||||||
@ -148,7 +155,7 @@ bool gui_redraw_window(Gui* gui) {
|
|||||||
|
|
||||||
bool gui_redraw_desktop(Gui* gui) {
|
bool gui_redraw_desktop(Gui* gui) {
|
||||||
canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal);
|
canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal);
|
||||||
canvas_frame_set(gui->canvas, GUI_WINDOW_X, GUI_WINDOW_Y, GUI_WINDOW_WIDTH, GUI_WINDOW_HEIGHT);
|
canvas_frame_set(gui->canvas, 0, 0, GUI_DISPLAY_WIDTH, GUI_DISPLAY_HEIGHT);
|
||||||
ViewPort* view_port = gui_view_port_find_enabled(gui->layers[GuiLayerDesktop]);
|
ViewPort* view_port = gui_view_port_find_enabled(gui->layers[GuiLayerDesktop]);
|
||||||
if(view_port) {
|
if(view_port) {
|
||||||
view_port_draw(view_port, gui->canvas);
|
view_port_draw(view_port, gui->canvas);
|
||||||
|
@ -23,7 +23,13 @@
|
|||||||
#define GUI_STATUS_BAR_X 0
|
#define GUI_STATUS_BAR_X 0
|
||||||
#define GUI_STATUS_BAR_Y 0
|
#define GUI_STATUS_BAR_Y 0
|
||||||
#define GUI_STATUS_BAR_WIDTH GUI_DISPLAY_WIDTH
|
#define GUI_STATUS_BAR_WIDTH GUI_DISPLAY_WIDTH
|
||||||
|
/* 0-1 pixels for upper thin frame
|
||||||
|
* 2-9 pixels for icons (battery, sd card, etc)
|
||||||
|
* 10-12 pixels for lower bold line */
|
||||||
#define GUI_STATUS_BAR_HEIGHT 13
|
#define GUI_STATUS_BAR_HEIGHT 13
|
||||||
|
/* icon itself area (battery, sd card, etc) excluding frame.
|
||||||
|
* painted 2 pixels below GUI_STATUS_BAR_X.
|
||||||
|
*/
|
||||||
#define GUI_STATUS_BAR_WORKAREA_HEIGHT 8
|
#define GUI_STATUS_BAR_WORKAREA_HEIGHT 8
|
||||||
|
|
||||||
#define GUI_WINDOW_X 0
|
#define GUI_WINDOW_X 0
|
||||||
|
@ -275,11 +275,14 @@ static void code_input_handle_dpad(CodeInputModel* model, InputKey key) {
|
|||||||
static void code_input_view_draw_callback(Canvas* canvas, void* _model) {
|
static void code_input_view_draw_callback(Canvas* canvas, void* _model) {
|
||||||
CodeInputModel* model = _model;
|
CodeInputModel* model = _model;
|
||||||
uint8_t y_offset = 0;
|
uint8_t y_offset = 0;
|
||||||
if(!strlen(model->header)) y_offset = 5;
|
|
||||||
canvas_clear(canvas);
|
canvas_clear(canvas);
|
||||||
canvas_set_color(canvas, ColorBlack);
|
canvas_set_color(canvas, ColorBlack);
|
||||||
|
|
||||||
canvas_draw_str(canvas, 2, 9, model->header);
|
if(model->header && strlen(model->header)) {
|
||||||
|
canvas_draw_str(canvas, 2, 9, model->header);
|
||||||
|
} else {
|
||||||
|
y_offset = 4;
|
||||||
|
}
|
||||||
|
|
||||||
canvas_set_font(canvas, FontSecondary);
|
canvas_set_font(canvas, FontSecondary);
|
||||||
|
|
||||||
@ -290,7 +293,7 @@ static void code_input_view_draw_callback(Canvas* canvas, void* _model) {
|
|||||||
model->local_buffer[CodeInputFirst],
|
model->local_buffer[CodeInputFirst],
|
||||||
model->input_length[CodeInputFirst],
|
model->input_length[CodeInputFirst],
|
||||||
6,
|
6,
|
||||||
30 - y_offset,
|
30 + y_offset,
|
||||||
true);
|
true);
|
||||||
break;
|
break;
|
||||||
case CodeInputStateUpdate:
|
case CodeInputStateUpdate:
|
||||||
@ -299,14 +302,14 @@ static void code_input_view_draw_callback(Canvas* canvas, void* _model) {
|
|||||||
model->local_buffer[CodeInputFirst],
|
model->local_buffer[CodeInputFirst],
|
||||||
model->input_length[CodeInputFirst],
|
model->input_length[CodeInputFirst],
|
||||||
6,
|
6,
|
||||||
14 - y_offset,
|
14 + y_offset,
|
||||||
!model->current);
|
!model->current);
|
||||||
code_input_draw_sequence(
|
code_input_draw_sequence(
|
||||||
canvas,
|
canvas,
|
||||||
model->local_buffer[CodeInputSecond],
|
model->local_buffer[CodeInputSecond],
|
||||||
model->input_length[CodeInputSecond],
|
model->input_length[CodeInputSecond],
|
||||||
6,
|
6,
|
||||||
44 - y_offset,
|
44 + y_offset,
|
||||||
model->current);
|
model->current);
|
||||||
|
|
||||||
if(model->current) canvas_draw_str(canvas, 2, 39 - y_offset, "Repeat code");
|
if(model->current) canvas_draw_str(canvas, 2, 39 - y_offset, "Repeat code");
|
||||||
|
Loading…
Reference in New Issue
Block a user