GUI: Icons and IconsAnimation refactoring. Switch assets to new Icon Api (#566)
* GUI: Icons and IconsAnimation refactoring. Switch assets to new Icon API. * Gui: icon and animation draw now do not accept null pointer * Format Sources * Fix no debug build * Furi: stricter checks in memmgr
This commit is contained in:
parent
607e873404
commit
a7283280ef
@ -140,7 +140,7 @@ int32_t app_loader(void* p) {
|
||||
menu,
|
||||
menu_item_alloc_function(
|
||||
FLIPPER_APPS[i].name,
|
||||
assets_icons_get(FLIPPER_APPS[i].icon),
|
||||
icon_animation_alloc(FLIPPER_APPS[i].icon),
|
||||
app_loader_menu_callback,
|
||||
(void*)&FLIPPER_APPS[i]));
|
||||
|
||||
@ -162,7 +162,7 @@ int32_t app_loader(void* p) {
|
||||
with_value_mutex(
|
||||
menu_mutex, (Menu * menu) {
|
||||
MenuItem* menu_plugins =
|
||||
menu_item_alloc_menu("Plugins", assets_icons_get(A_Plugins_14));
|
||||
menu_item_alloc_menu("Plugins", icon_animation_alloc(&A_Plugins_14));
|
||||
|
||||
for(size_t i = 0; i < FLIPPER_PLUGINS_COUNT; i++) {
|
||||
// Add menu item
|
||||
@ -170,7 +170,7 @@ int32_t app_loader(void* p) {
|
||||
menu_plugins,
|
||||
menu_item_alloc_function(
|
||||
FLIPPER_PLUGINS[i].name,
|
||||
assets_icons_get(FLIPPER_PLUGINS[i].icon),
|
||||
icon_animation_alloc(FLIPPER_PLUGINS[i].icon),
|
||||
app_loader_menu_callback,
|
||||
(void*)&FLIPPER_PLUGINS[i]));
|
||||
|
||||
@ -194,7 +194,7 @@ int32_t app_loader(void* p) {
|
||||
with_value_mutex(
|
||||
menu_mutex, (Menu * menu) {
|
||||
MenuItem* menu_debug =
|
||||
menu_item_alloc_menu("Debug tools", assets_icons_get(A_Settings_14));
|
||||
menu_item_alloc_menu("Debug tools", icon_animation_alloc(&A_Settings_14));
|
||||
|
||||
for(size_t i = 0; i < FLIPPER_DEBUG_APPS_COUNT; i++) {
|
||||
// Add menu item
|
||||
@ -202,7 +202,7 @@ int32_t app_loader(void* p) {
|
||||
menu_debug,
|
||||
menu_item_alloc_function(
|
||||
FLIPPER_DEBUG_APPS[i].name,
|
||||
assets_icons_get(FLIPPER_DEBUG_APPS[i].icon),
|
||||
icon_animation_alloc(FLIPPER_DEBUG_APPS[i].icon),
|
||||
app_loader_menu_callback,
|
||||
(void*)&FLIPPER_DEBUG_APPS[i]));
|
||||
|
||||
@ -226,7 +226,7 @@ int32_t app_loader(void* p) {
|
||||
with_value_mutex(
|
||||
menu_mutex, (Menu * menu) {
|
||||
MenuItem* menu_debug =
|
||||
menu_item_alloc_menu("Settings", assets_icons_get(A_Settings_14));
|
||||
menu_item_alloc_menu("Settings", icon_animation_alloc(&A_Settings_14));
|
||||
|
||||
for(size_t i = 0; i < FLIPPER_SETTINGS_APPS_COUNT; i++) {
|
||||
// Add menu item
|
||||
@ -234,7 +234,7 @@ int32_t app_loader(void* p) {
|
||||
menu_debug,
|
||||
menu_item_alloc_function(
|
||||
FLIPPER_SETTINGS_APPS[i].name,
|
||||
assets_icons_get(FLIPPER_SETTINGS_APPS[i].icon),
|
||||
icon_animation_alloc(FLIPPER_SETTINGS_APPS[i].icon),
|
||||
app_loader_menu_callback,
|
||||
(void*)&FLIPPER_SETTINGS_APPS[i]));
|
||||
}
|
||||
|
@ -53,112 +53,115 @@ int32_t notification_app_settings(void* p);
|
||||
|
||||
const FlipperApplication FLIPPER_SERVICES[] = {
|
||||
#ifdef SRV_CLI
|
||||
{.app = cli_task, .name = "cli_task", .stack_size = 4096, .icon = A_Plugins_14},
|
||||
{.app = cli_task, .name = "cli_task", .stack_size = 4096, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_EXAMPLE_BLINK
|
||||
{.app = application_blink, .name = "blink", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = application_blink, .name = "blink", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_INPUT
|
||||
{.app = input_task, .name = "input_task", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = input_task, .name = "input_task", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_EXAMPLE_INPUT_DUMP
|
||||
{.app = application_input_dump, .name = "input dump", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = application_input_dump,
|
||||
.name = "input dump",
|
||||
.stack_size = 1024,
|
||||
.icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_GUI
|
||||
// TODO: fix stack size when sd api will be in separate thread
|
||||
{.app = gui_task, .name = "gui_task", .stack_size = 8192, .icon = A_Plugins_14},
|
||||
{.app = gui_task, .name = "gui_task", .stack_size = 8192, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_MENU
|
||||
{.app = menu_task, .name = "menu_task", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = app_loader, .name = "app_loader", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = menu_task, .name = "menu_task", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
{.app = app_loader, .name = "app_loader", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_SD_FILESYSTEM
|
||||
{.app = sd_filesystem, .name = "sd_filesystem", .stack_size = 4096, .icon = A_Plugins_14},
|
||||
{.app = sd_filesystem, .name = "sd_filesystem", .stack_size = 4096, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_INTERNAL_STORAGE
|
||||
{.app = internal_storage_task,
|
||||
.name = "internal_storage",
|
||||
.stack_size = 2048,
|
||||
.icon = A_Plugins_14},
|
||||
.icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_DOLPHIN
|
||||
{.app = dolphin_task, .name = "dolphin_task", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = dolphin_task, .name = "dolphin_task", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_POWER
|
||||
{.app = power_task, .name = "power_task", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = power_task, .name = "power_task", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_BT
|
||||
{.app = bt_task, .name = "bt_task", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = bt_task, .name = "bt_task", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_LF_RFID
|
||||
// TODO: fix stack size when sd api will be in separate thread
|
||||
{.app = lfrfid_app, .name = "125 kHz RFID", .stack_size = 4096, .icon = A_Plugins_14},
|
||||
{.app = lfrfid_app, .name = "125 kHz RFID", .stack_size = 4096, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_IRDA
|
||||
{.app = irda, .name = "irda", .stack_size = 1024 * 3, .icon = A_Plugins_14},
|
||||
{.app = irda, .name = "irda", .stack_size = 1024 * 3, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_EXAMPLE_QRCODE
|
||||
{.app = u8g2_qrcode, .name = "u8g2_qrcode", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = u8g2_qrcode, .name = "u8g2_qrcode", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_EXAMPLE_DISPLAY
|
||||
{.app = u8g2_example, .name = "u8g2_example", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = u8g2_example, .name = "u8g2_example", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_SPEAKER_DEMO
|
||||
{.app = coreglitch_demo_0,
|
||||
.name = "coreglitch_demo_0",
|
||||
.stack_size = 1024,
|
||||
.icon = A_Plugins_14},
|
||||
.icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_SD_TEST
|
||||
{.app = sd_card_test, .name = "sd_card_test", .stack_size = 4096, .icon = A_Plugins_14},
|
||||
{.app = sd_card_test, .name = "sd_card_test", .stack_size = 4096, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_MUSIC_PLAYER
|
||||
{.app = music_player, .name = "music player", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = music_player, .name = "music player", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_IBUTTON
|
||||
{.app = app_ibutton, .name = "ibutton", .stack_size = 4096, .icon = A_Plugins_14},
|
||||
{.app = app_ibutton, .name = "ibutton", .stack_size = 4096, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_GPIO_DEMO
|
||||
{.app = app_gpio_test, .name = "gpio test", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = app_gpio_test, .name = "gpio test", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_SDNFC
|
||||
{.app = sdnfc, .name = "sdnfc", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = sdnfc, .name = "sdnfc", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_GUI_TEST
|
||||
{.app = gui_test, .name = "gui_test", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = gui_test, .name = "gui_test", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_KEYPAD_TEST
|
||||
{.app = keypad_test, .name = "keypad_test", .icon = A_Plugins_14},
|
||||
{.app = keypad_test, .name = "keypad_test", .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_ACCESSOR
|
||||
{.app = app_accessor, .name = "accessor", .stack_size = 4096, .icon = A_Plugins_14},
|
||||
{.app = app_accessor, .name = "accessor", .stack_size = 4096, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef SRV_NOTIFICATION
|
||||
{.app = notification_app, .name = "notification", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = notification_app, .name = "notification", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
};
|
||||
@ -169,33 +172,33 @@ const size_t FLIPPER_SERVICES_COUNT = sizeof(FLIPPER_SERVICES) / sizeof(FlipperA
|
||||
const FlipperApplication FLIPPER_APPS[] = {
|
||||
|
||||
#ifdef APP_IBUTTON
|
||||
{.app = app_ibutton, .name = "iButton", .stack_size = 4096, .icon = A_iButton_14},
|
||||
{.app = app_ibutton, .name = "iButton", .stack_size = 4096, .icon = &A_iButton_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_NFC
|
||||
{.app = nfc_task, .name = "NFC", .stack_size = 4096, .icon = A_NFC_14},
|
||||
{.app = nfc_task, .name = "NFC", .stack_size = 4096, .icon = &A_NFC_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_SUBGHZ
|
||||
// TODO: decrease stack after SD API refactoring
|
||||
{.app = subghz_app, .name = "Sub-1 GHz", .stack_size = 4096, .icon = A_Sub1ghz_14},
|
||||
{.app = subghz_app, .name = "Sub-1 GHz", .stack_size = 4096, .icon = &A_Sub1ghz_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_LF_RFID
|
||||
// TODO: fix stack size when sd api will be in separate thread
|
||||
{.app = lfrfid_app, .name = "125 kHz RFID", .stack_size = 4096, .icon = A_125khz_14},
|
||||
{.app = lfrfid_app, .name = "125 kHz RFID", .stack_size = 4096, .icon = &A_125khz_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_IRDA
|
||||
{.app = irda, .name = "Infrared", .stack_size = 1024 * 3, .icon = A_Infrared_14},
|
||||
{.app = irda, .name = "Infrared", .stack_size = 1024 * 3, .icon = &A_Infrared_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_GPIO_DEMO
|
||||
{.app = app_gpio_test, .name = "GPIO", .stack_size = 1024, .icon = A_GPIO_14},
|
||||
{.app = app_gpio_test, .name = "GPIO", .stack_size = 1024, .icon = &A_GPIO_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_ARCHIVE
|
||||
{.app = app_archive, .name = "Archive", .stack_size = 4096, .icon = A_FileManager_14},
|
||||
{.app = app_archive, .name = "Archive", .stack_size = 4096, .icon = &A_FileManager_14},
|
||||
#endif
|
||||
|
||||
};
|
||||
@ -229,14 +232,14 @@ const size_t FLIPPER_ON_SYSTEM_START_COUNT =
|
||||
const FlipperApplication FLIPPER_PLUGINS[] = {
|
||||
|
||||
#ifdef APP_MUSIC_PLAYER
|
||||
{.app = music_player, .name = "music player", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = music_player, .name = "music player", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_SPEAKER_DEMO
|
||||
{.app = coreglitch_demo_0,
|
||||
.name = "coreglitch_demo_0",
|
||||
.stack_size = 1024,
|
||||
.icon = A_Plugins_14},
|
||||
.icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
};
|
||||
@ -246,58 +249,61 @@ const size_t FLIPPER_PLUGINS_COUNT = sizeof(FLIPPER_PLUGINS) / sizeof(FlipperApp
|
||||
// Plugin menu
|
||||
const FlipperApplication FLIPPER_DEBUG_APPS[] = {
|
||||
#ifdef APP_EXAMPLE_BLINK
|
||||
{.app = application_blink, .name = "blink", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = application_blink, .name = "blink", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_EXAMPLE_INPUT_DUMP
|
||||
{.app = application_input_dump, .name = "input dump", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = application_input_dump,
|
||||
.name = "input dump",
|
||||
.stack_size = 1024,
|
||||
.icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_SD_TEST
|
||||
{.app = sd_card_test, .name = "sd_card_test", .stack_size = 4096, .icon = A_Plugins_14},
|
||||
{.app = sd_card_test, .name = "sd_card_test", .stack_size = 4096, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_VIBRO_DEMO
|
||||
{.app = application_vibro, .name = "vibro", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = application_vibro, .name = "vibro", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_SDNFC
|
||||
{.app = sdnfc, .name = "sdnfc", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = sdnfc, .name = "sdnfc", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_GUI_TEST
|
||||
{.app = gui_test, .name = "gui_test", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = gui_test, .name = "gui_test", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_KEYPAD_TEST
|
||||
{.app = keypad_test, .name = "keypad_test", .icon = A_Plugins_14},
|
||||
{.app = keypad_test, .name = "keypad_test", .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_ACCESSOR
|
||||
{.app = app_accessor, .name = "accessor", .stack_size = 4096, .icon = A_Plugins_14},
|
||||
{.app = app_accessor, .name = "accessor", .stack_size = 4096, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_UNIT_TESTS
|
||||
{.app = flipper_test_app, .name = "Unit Tests", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = flipper_test_app, .name = "Unit Tests", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_IRDA_MONITOR
|
||||
{.app = irda_monitor_app, .name = "Irda Monitor", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = irda_monitor_app, .name = "Irda Monitor", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_VERTICAL_SCREEN
|
||||
{.app = application_vertical_screen,
|
||||
.name = "Vertical Screen",
|
||||
.stack_size = 1024,
|
||||
.icon = A_Plugins_14},
|
||||
.icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_SCENED
|
||||
{.app = scened_app, .name = "Templated Scene", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = scened_app, .name = "Templated Scene", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
#endif
|
||||
|
||||
#ifdef APP_LF_RFID
|
||||
{.app = lfrfid_debug_app, .name = "LF-RFID Debug", .stack_size = 1024, .icon = A_125khz_14},
|
||||
{.app = lfrfid_debug_app, .name = "LF-RFID Debug", .stack_size = 1024, .icon = &A_125khz_14},
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -305,16 +311,16 @@ const size_t FLIPPER_DEBUG_APPS_COUNT = sizeof(FLIPPER_DEBUG_APPS) / sizeof(Flip
|
||||
|
||||
#ifdef APP_ARCHIVE
|
||||
const FlipperApplication FLIPPER_ARCHIVE =
|
||||
{.app = app_archive, .name = "Archive", .stack_size = 4096, .icon = A_FileManager_14};
|
||||
{.app = app_archive, .name = "Archive", .stack_size = 4096, .icon = &A_FileManager_14};
|
||||
#endif
|
||||
|
||||
#ifdef SRV_DOLPHIN
|
||||
const FlipperApplication FLIPPER_SCENE =
|
||||
{.app = scene_app, .name = "Scenes", .stack_size = 1024, .icon = A_Games_14};
|
||||
{.app = scene_app, .name = "Scenes", .stack_size = 1024, .icon = &A_Games_14};
|
||||
|
||||
const FlipperApplication FLIPPER_SCENE_APPS[] = {
|
||||
{.app = passport, .name = "Passport", .stack_size = 1024, .icon = A_Games_14},
|
||||
{.app = music_player, .name = "Music player", .stack_size = 1024, .icon = A_Plugins_14},
|
||||
{.app = passport, .name = "Passport", .stack_size = 1024, .icon = &A_Games_14},
|
||||
{.app = music_player, .name = "Music player", .stack_size = 1024, .icon = &A_Plugins_14},
|
||||
};
|
||||
|
||||
const size_t FLIPPER_SCENE_APPS_COUNT = sizeof(FLIPPER_SCENE_APPS) / sizeof(FlipperApplication);
|
||||
@ -327,7 +333,7 @@ const FlipperApplication FLIPPER_SETTINGS_APPS[] = {
|
||||
{.app = notification_app_settings,
|
||||
.name = "Notification",
|
||||
.stack_size = 1024,
|
||||
.icon = A_Plugins_14},
|
||||
.icon = &A_Plugins_14},
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -7,7 +7,7 @@ typedef struct {
|
||||
const FuriThreadCallback app;
|
||||
const char* name;
|
||||
const size_t stack_size;
|
||||
const IconName icon;
|
||||
const Icon* icon;
|
||||
} FlipperApplication;
|
||||
|
||||
typedef void (*FlipperOnStartHook)(void);
|
||||
|
@ -9,14 +9,14 @@ static const char* ArchiveTabNames[] = {
|
||||
[ArchiveTabIrda] = "Infrared",
|
||||
[ArchiveTabBrowser] = "Browser"};
|
||||
|
||||
static const IconName ArchiveItemIcons[] = {
|
||||
[ArchiveFileTypeIButton] = I_ibutt_10px,
|
||||
[ArchiveFileTypeNFC] = I_Nfc_10px,
|
||||
[ArchiveFileTypeSubOne] = I_sub1_10px,
|
||||
[ArchiveFileTypeLFRFID] = I_125_10px,
|
||||
[ArchiveFileTypeIrda] = I_ir_10px,
|
||||
[ArchiveFileTypeFolder] = I_dir_10px,
|
||||
[ArchiveFileTypeUnknown] = I_unknown_10px,
|
||||
static const Icon* ArchiveItemIcons[] = {
|
||||
[ArchiveFileTypeIButton] = &I_ibutt_10px,
|
||||
[ArchiveFileTypeNFC] = &I_Nfc_10px,
|
||||
[ArchiveFileTypeSubOne] = &I_sub1_10px,
|
||||
[ArchiveFileTypeLFRFID] = &I_125_10px,
|
||||
[ArchiveFileTypeIrda] = &I_ir_10px,
|
||||
[ArchiveFileTypeFolder] = &I_dir_10px,
|
||||
[ArchiveFileTypeUnknown] = &I_unknown_10px,
|
||||
};
|
||||
|
||||
static void render_item_menu(Canvas* canvas, ArchiveViewModel* model) {
|
||||
@ -47,7 +47,7 @@ static void render_item_menu(Canvas* canvas, ArchiveViewModel* model) {
|
||||
string_clear(menu[i]);
|
||||
}
|
||||
|
||||
canvas_draw_icon_name(canvas, 74, 20 + model->menu_idx * 11, I_ButtonRight_4x7);
|
||||
canvas_draw_icon(canvas, 74, 20 + model->menu_idx * 11, &I_ButtonRight_4x7);
|
||||
}
|
||||
|
||||
void archive_trim_file_ext(char* name) {
|
||||
@ -105,7 +105,7 @@ static void draw_list(Canvas* canvas, ArchiveViewModel* model) {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
}
|
||||
|
||||
canvas_draw_icon_name(canvas, 2, 16 + i * FRAME_HEIGHT, ArchiveItemIcons[file->type]);
|
||||
canvas_draw_icon(canvas, 2, 16 + i * FRAME_HEIGHT, ArchiveItemIcons[file->type]);
|
||||
canvas_draw_str(canvas, 15, 24 + i * FRAME_HEIGHT, string_get_cstr(str_buff));
|
||||
string_clean(str_buff);
|
||||
}
|
||||
@ -126,7 +126,7 @@ static void archive_render_status_bar(Canvas* canvas, ArchiveViewModel* model) {
|
||||
|
||||
const char* tab_name = ArchiveTabNames[model->tab_idx];
|
||||
|
||||
canvas_draw_icon_name(canvas, 0, 0, I_Background_128x11);
|
||||
canvas_draw_icon(canvas, 0, 0, &I_Background_128x11);
|
||||
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
canvas_draw_box(canvas, 0, 0, 50, 13);
|
||||
@ -143,10 +143,10 @@ static void archive_render_status_bar(Canvas* canvas, ArchiveViewModel* model) {
|
||||
canvas_draw_line(canvas, 108, 12, 126, 12);
|
||||
|
||||
if(model->tab_idx > 0) {
|
||||
canvas_draw_icon_name(canvas, 112, 2, I_ButtonLeft_4x7);
|
||||
canvas_draw_icon(canvas, 112, 2, &I_ButtonLeft_4x7);
|
||||
}
|
||||
if(model->tab_idx < SIZEOF_ARRAY(ArchiveTabNames) - 1) {
|
||||
canvas_draw_icon_name(canvas, 120, 2, I_ButtonRight_4x7);
|
||||
canvas_draw_icon(canvas, 120, 2, &I_ButtonRight_4x7);
|
||||
}
|
||||
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
|
@ -45,7 +45,7 @@ Bt* bt_alloc() {
|
||||
view_port_enabled_set(bt->statusbar_view_port, false);
|
||||
gui_add_view_port(bt->gui, bt->statusbar_view_port, GuiLayerStatusBarLeft);
|
||||
|
||||
bt->menu_icon = assets_icons_get(A_Bluetooth_14);
|
||||
bt->menu_icon = icon_animation_alloc(&A_Bluetooth_14);
|
||||
bt->menu_item = menu_item_alloc_menu("Bluetooth", bt->menu_icon);
|
||||
menu_item_subitem_add(
|
||||
bt->menu_item, menu_item_alloc_function("Carrier test", NULL, bt_menu_test_carrier, bt));
|
||||
@ -104,7 +104,7 @@ Bt* bt_alloc() {
|
||||
}
|
||||
|
||||
void bt_draw_statusbar_callback(Canvas* canvas, void* context) {
|
||||
canvas_draw_icon_name(canvas, 0, 0, I_Bluetooth_5x8);
|
||||
canvas_draw_icon(canvas, 0, 0, &I_Bluetooth_5x8);
|
||||
}
|
||||
|
||||
void bt_menu_test_carrier(void* context) {
|
||||
|
@ -27,7 +27,7 @@ struct Bt {
|
||||
// Status bar
|
||||
ViewPort* statusbar_view_port;
|
||||
// Menu
|
||||
Icon* menu_icon;
|
||||
IconAnimation* menu_icon;
|
||||
MenuItem* menu_item;
|
||||
View* view_test_carrier;
|
||||
View* view_test_packet_tx;
|
||||
|
@ -2,6 +2,8 @@
|
||||
#include <stdlib.h>
|
||||
#include "applications.h"
|
||||
|
||||
const Icon* idle_scenes[] = {&A_Wink_128x64, &A_WatchingTV_128x64};
|
||||
|
||||
static void dolphin_switch_to_app(Dolphin* dolphin, const FlipperApplication* flipper_app) {
|
||||
furi_assert(dolphin);
|
||||
furi_assert(flipper_app);
|
||||
@ -15,11 +17,12 @@ static void dolphin_switch_to_app(Dolphin* dolphin, const FlipperApplication* fl
|
||||
}
|
||||
|
||||
// temporary main screen animation managment
|
||||
void dolphin_scene_handler_set_scene(Dolphin* dolphin, IconName icon) {
|
||||
void dolphin_scene_handler_set_scene(Dolphin* dolphin, const Icon* icon_data) {
|
||||
with_view_model(
|
||||
dolphin->idle_view_main, (DolphinViewMainModel * model) {
|
||||
model->animation = assets_icons_get(icon);
|
||||
icon_start_animation(model->animation);
|
||||
if(model->animation) icon_animation_free(model->animation);
|
||||
model->animation = icon_animation_alloc(icon_data);
|
||||
icon_animation_start(model->animation);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
@ -27,10 +30,11 @@ void dolphin_scene_handler_set_scene(Dolphin* dolphin, IconName icon) {
|
||||
void dolphin_scene_handler_switch_scene(Dolphin* dolphin) {
|
||||
with_view_model(
|
||||
dolphin->idle_view_main, (DolphinViewMainModel * model) {
|
||||
if(icon_is_last_frame(model->animation)) {
|
||||
model->animation = assets_icons_get(idle_scenes[model->scene_num]);
|
||||
icon_start_animation(model->animation);
|
||||
model->scene_num = random() % sizeof(idle_scenes);
|
||||
if(icon_animation_is_last_frame(model->animation)) {
|
||||
if(model->animation) icon_animation_free(model->animation);
|
||||
model->animation = icon_animation_alloc(idle_scenes[model->scene_num]);
|
||||
icon_animation_start(model->animation);
|
||||
model->scene_num = random() % COUNT_OF(idle_scenes);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
@ -183,7 +187,7 @@ static void lock_menu_callback(void* context, uint8_t index) {
|
||||
static void lock_icon_callback(Canvas* canvas, void* context) {
|
||||
furi_assert(context);
|
||||
Dolphin* dolphin = context;
|
||||
canvas_draw_icon(canvas, 0, 0, dolphin->lock_icon);
|
||||
canvas_draw_icon_animation(canvas, 0, 0, dolphin->lock_icon);
|
||||
}
|
||||
|
||||
bool dolphin_view_lockmenu_input(InputEvent* event, void* context) {
|
||||
@ -206,7 +210,8 @@ bool dolphin_view_lockmenu_input(InputEvent* event, void* context) {
|
||||
view_dispatcher_switch_to_view(dolphin->idle_view_dispatcher, DolphinViewIdleMain);
|
||||
|
||||
if(random() % 100 > 50)
|
||||
dolphin_scene_handler_set_scene(dolphin, idle_scenes[random() % sizeof(idle_scenes)]);
|
||||
dolphin_scene_handler_set_scene(
|
||||
dolphin, idle_scenes[random() % COUNT_OF(idle_scenes)]);
|
||||
}
|
||||
|
||||
view_commit_model(dolphin->view_lockmenu, true);
|
||||
@ -331,14 +336,14 @@ Dolphin* dolphin_alloc() {
|
||||
dolphin->idle_view_dispatcher, DolphinViewHwMismatch, dolphin->view_hw_mismatch);
|
||||
|
||||
// Lock icon
|
||||
dolphin->lock_icon = assets_icons_get(I_Lock_8x8);
|
||||
dolphin->lock_icon = icon_animation_alloc(&I_Lock_8x8);
|
||||
dolphin->lock_viewport = view_port_alloc();
|
||||
view_port_set_width(dolphin->lock_viewport, icon_get_width(dolphin->lock_icon));
|
||||
view_port_set_width(dolphin->lock_viewport, icon_animation_get_width(dolphin->lock_icon));
|
||||
view_port_draw_callback_set(dolphin->lock_viewport, lock_icon_callback, dolphin);
|
||||
view_port_enabled_set(dolphin->lock_viewport, false);
|
||||
|
||||
// Main screen animation
|
||||
dolphin_scene_handler_set_scene(dolphin, idle_scenes[random() % sizeof(idle_scenes)]);
|
||||
dolphin_scene_handler_set_scene(dolphin, idle_scenes[random() % COUNT_OF(idle_scenes)]);
|
||||
|
||||
view_dispatcher_attach_to_gui(
|
||||
dolphin->idle_view_dispatcher, dolphin->gui, ViewDispatcherTypeWindow);
|
||||
@ -352,7 +357,7 @@ void dolphin_free(Dolphin* dolphin) {
|
||||
|
||||
gui_remove_view_port(dolphin->gui, dolphin->lock_viewport);
|
||||
view_port_free(dolphin->lock_viewport);
|
||||
icon_free(dolphin->lock_icon);
|
||||
icon_animation_free(dolphin->lock_icon);
|
||||
|
||||
osTimerDelete(dolphin->timeout_timer);
|
||||
|
||||
|
@ -51,7 +51,7 @@ struct Dolphin {
|
||||
View* view_hw_mismatch;
|
||||
View* view_lockmenu;
|
||||
ViewPort* lock_viewport;
|
||||
Icon* lock_icon;
|
||||
IconAnimation* lock_icon;
|
||||
|
||||
bool locked;
|
||||
uint8_t lock_count;
|
||||
@ -59,9 +59,6 @@ struct Dolphin {
|
||||
osTimerId_t timeout_timer;
|
||||
};
|
||||
|
||||
// Temporary
|
||||
const IconName idle_scenes[] = {A_Wink_128x64, A_WatchingTV_128x64};
|
||||
|
||||
Dolphin* dolphin_alloc();
|
||||
|
||||
void dolphin_free(Dolphin* dolphin);
|
||||
|
@ -17,19 +17,19 @@ void dolphin_view_first_start_draw(Canvas* canvas, void* model) {
|
||||
uint8_t height = canvas_height(canvas);
|
||||
const char* my_name = api_hal_version_get_name_ptr();
|
||||
if(m->page == 0) {
|
||||
canvas_draw_icon_name(canvas, 0, height - 48, I_DolphinFirstStart0_70x53);
|
||||
canvas_draw_icon(canvas, 0, height - 48, &I_DolphinFirstStart0_70x53);
|
||||
elements_multiline_text_framed(canvas, 75, 20, "Hey m8,\npress > to\ncontinue");
|
||||
} else if(m->page == 1) {
|
||||
canvas_draw_icon_name(canvas, 0, height - 48, I_DolphinFirstStart1_59x53);
|
||||
canvas_draw_icon(canvas, 0, height - 48, &I_DolphinFirstStart1_59x53);
|
||||
elements_multiline_text_framed(canvas, 64, 20, "First Of All,\n... >");
|
||||
} else if(m->page == 2) {
|
||||
canvas_draw_icon_name(canvas, 0, height - 48, I_DolphinFirstStart2_59x51);
|
||||
canvas_draw_icon(canvas, 0, height - 48, &I_DolphinFirstStart2_59x51);
|
||||
elements_multiline_text_framed(canvas, 64, 20, "Thank you\nfor your\nsupport! >");
|
||||
} else if(m->page == 3) {
|
||||
canvas_draw_icon_name(canvas, width - 57, height - 48, I_DolphinFirstStart3_57x48);
|
||||
canvas_draw_icon(canvas, width - 57, height - 48, &I_DolphinFirstStart3_57x48);
|
||||
elements_multiline_text_framed(canvas, 0, 20, "Kickstarter\ncampaign\nwas INSANE! >");
|
||||
} else if(m->page == 4) {
|
||||
canvas_draw_icon_name(canvas, width - 67, height - 50, I_DolphinFirstStart4_67x53);
|
||||
canvas_draw_icon(canvas, width - 67, height - 50, &I_DolphinFirstStart4_67x53);
|
||||
elements_multiline_text_framed(canvas, 0, 17, "Now\nallow me\nto introduce\nmyself >");
|
||||
} else if(m->page == 5) {
|
||||
char buf[64];
|
||||
@ -40,18 +40,18 @@ void dolphin_view_first_start_draw(Canvas* canvas, void* model) {
|
||||
"I am",
|
||||
my_name ? my_name : "Unknown",
|
||||
",\ncyberdolphin\nliving in your\npocket >");
|
||||
canvas_draw_icon_name(canvas, 0, height - 48, I_DolphinFirstStart5_45x53);
|
||||
canvas_draw_icon(canvas, 0, height - 48, &I_DolphinFirstStart5_45x53);
|
||||
elements_multiline_text_framed(canvas, 60, 17, buf);
|
||||
} else if(m->page == 6) {
|
||||
canvas_draw_icon_name(canvas, 0, height - 48, I_DolphinFirstStart6_58x54);
|
||||
canvas_draw_icon(canvas, 0, height - 48, &I_DolphinFirstStart6_58x54);
|
||||
elements_multiline_text_framed(
|
||||
canvas, 63, 17, "I can grow\nsmart'n'cool\nif you use me\noften >");
|
||||
} else if(m->page == 7) {
|
||||
canvas_draw_icon_name(canvas, width - 61, height - 48, I_DolphinFirstStart7_61x51);
|
||||
canvas_draw_icon(canvas, width - 61, height - 48, &I_DolphinFirstStart7_61x51);
|
||||
elements_multiline_text_framed(
|
||||
canvas, 0, 17, "As long as\nyou read, write\nand emulate >");
|
||||
} else if(m->page == 8) {
|
||||
canvas_draw_icon_name(canvas, width - 56, height - 48, I_DolphinFirstStart8_56x51);
|
||||
canvas_draw_icon(canvas, width - 56, height - 48, &I_DolphinFirstStart8_56x51);
|
||||
elements_multiline_text_framed(
|
||||
canvas, 0, 17, "You can check\nmy level and\nmood in the\nPassport menu");
|
||||
}
|
||||
@ -61,13 +61,13 @@ void dolphin_view_idle_main_draw(Canvas* canvas, void* model) {
|
||||
canvas_clear(canvas);
|
||||
DolphinViewMainModel* m = model;
|
||||
if(m->animation) {
|
||||
canvas_draw_icon(canvas, 0, -3, m->animation);
|
||||
canvas_draw_icon_animation(canvas, 0, -3, m->animation);
|
||||
}
|
||||
|
||||
if(m->hint_timeout > 0) {
|
||||
m->hint_timeout--;
|
||||
if(m->locked) {
|
||||
canvas_draw_icon_name(canvas, 13, 5, I_LockPopup_100x49);
|
||||
canvas_draw_icon(canvas, 13, 5, &I_LockPopup_100x49);
|
||||
elements_multiline_text(canvas, 65, 20, "To unlock\npress:");
|
||||
} else {
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
@ -80,8 +80,8 @@ void dolphin_view_lockmenu_draw(Canvas* canvas, void* model) {
|
||||
DolphinViewLockMenuModel* m = model;
|
||||
canvas_clear(canvas);
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
canvas_draw_icon_name(canvas, m->door_left_x, 0, I_DoorLeft_70x55);
|
||||
canvas_draw_icon_name(canvas, m->door_right_x, 0, I_DoorRight_70x55);
|
||||
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_set_font(canvas, FontSecondary);
|
||||
|
||||
if(m->locked) {
|
||||
|
@ -45,7 +45,7 @@ typedef struct {
|
||||
} DolphinViewLockMenuModel;
|
||||
|
||||
typedef struct {
|
||||
Icon* animation;
|
||||
IconAnimation* animation;
|
||||
uint8_t scene_num;
|
||||
uint8_t hint_timeout;
|
||||
bool locked;
|
||||
|
@ -23,19 +23,19 @@ typedef struct {
|
||||
// Moods, corresponding to butthurt level. (temp, unclear about max level)
|
||||
static const char* mood_strings[MOODS_TOTAL] = {[0] = "Happy", [1] = "Ok", [2] = "Bad"};
|
||||
|
||||
static const IconName portrait_happy[BUTTHURT_MAX] = {
|
||||
I_passport_happy1_43x45,
|
||||
I_passport_happy2_43x45,
|
||||
I_passport_happy3_43x45};
|
||||
static const IconName portrait_ok[BUTTHURT_MAX] = {
|
||||
I_passport_okay1_43x45,
|
||||
I_passport_okay2_43x45,
|
||||
I_passport_okay3_43x45};
|
||||
static const IconName portrait_bad[BUTTHURT_MAX] = {
|
||||
I_passport_bad1_43x45,
|
||||
I_passport_bad2_43x45,
|
||||
I_passport_bad3_43x45};
|
||||
static const IconName* portraits[MOODS_TOTAL] = {portrait_happy, portrait_ok, portrait_bad};
|
||||
static const Icon* portrait_happy[BUTTHURT_MAX] = {
|
||||
&I_passport_happy1_43x45,
|
||||
&I_passport_happy2_43x45,
|
||||
&I_passport_happy3_43x45};
|
||||
static const Icon* portrait_ok[BUTTHURT_MAX] = {
|
||||
&I_passport_okay1_43x45,
|
||||
&I_passport_okay2_43x45,
|
||||
&I_passport_okay3_43x45};
|
||||
static const Icon* portrait_bad[BUTTHURT_MAX] = {
|
||||
&I_passport_bad1_43x45,
|
||||
&I_passport_bad2_43x45,
|
||||
&I_passport_bad3_43x45};
|
||||
static const Icon** portraits[MOODS_TOTAL] = {portrait_happy, portrait_ok, portrait_bad};
|
||||
|
||||
static void input_callback(InputEvent* input_event, void* ctx) {
|
||||
osMessageQueueId_t event_queue = ctx;
|
||||
@ -61,8 +61,8 @@ static void render_callback(Canvas* canvas, void* ctx) {
|
||||
canvas_clear(canvas);
|
||||
|
||||
// multipass
|
||||
canvas_draw_icon_name(canvas, 0, 0, I_PassportLeft_6x47);
|
||||
canvas_draw_icon_name(canvas, 0, 47, I_PassportBottom_128x17);
|
||||
canvas_draw_icon(canvas, 0, 0, &I_PassportLeft_6x47);
|
||||
canvas_draw_icon(canvas, 0, 47, &I_PassportBottom_128x17);
|
||||
canvas_draw_line(canvas, 6, 0, 125, 0);
|
||||
canvas_draw_line(canvas, 127, 2, 127, 47);
|
||||
canvas_draw_dot(canvas, 126, 1);
|
||||
@ -75,7 +75,7 @@ static void render_callback(Canvas* canvas, void* ctx) {
|
||||
canvas_draw_line(canvas, 53, 5, 55, 7);
|
||||
|
||||
// portrait
|
||||
canvas_draw_icon_name(canvas, 10, 9, portraits[butthurt][portrait_level]);
|
||||
canvas_draw_icon(canvas, 10, 9, portraits[butthurt][portrait_level]);
|
||||
canvas_draw_line(canvas, 59, 18, 124, 18);
|
||||
canvas_draw_line(canvas, 59, 31, 124, 31);
|
||||
canvas_draw_line(canvas, 59, 44, 124, 44);
|
||||
|
@ -7,7 +7,7 @@ const Item TV = {
|
||||
.timeout = 10,
|
||||
.x = 160,
|
||||
.y = 34,
|
||||
.icon = I_TV_20x24,
|
||||
.icon = &I_TV_20x24,
|
||||
.action_name = "Use",
|
||||
.draw = draw_tv,
|
||||
.callback = smash_tv};
|
||||
@ -17,7 +17,7 @@ const Item Painting = {
|
||||
.timeout = 20,
|
||||
.x = 160,
|
||||
.y = 10,
|
||||
.icon = I_Home_painting_17x20,
|
||||
.icon = &I_Home_painting_17x20,
|
||||
.action_name = "Inspect",
|
||||
.draw = NULL,
|
||||
.callback = inspect_painting};
|
||||
@ -27,7 +27,7 @@ const Item Sofa = {
|
||||
.timeout = 100,
|
||||
.x = 250,
|
||||
.y = 34,
|
||||
.icon = I_Sofa_40x13,
|
||||
.icon = &I_Sofa_40x13,
|
||||
.action_name = "Sit",
|
||||
.draw = NULL,
|
||||
.callback = sofa_sit};
|
||||
@ -37,7 +37,7 @@ const Item PC = {
|
||||
.timeout = 100,
|
||||
.x = 400,
|
||||
.y = 10,
|
||||
.icon = I_PC_22x29,
|
||||
.icon = &I_PC_22x29,
|
||||
.action_name = "Use",
|
||||
.draw = NULL,
|
||||
.callback = pc_callback};
|
||||
@ -111,8 +111,8 @@ void smash_tv(Canvas* canvas, void* state) {
|
||||
SceneState* s = state;
|
||||
s->player_flipped = true;
|
||||
canvas_set_bitmap_mode(canvas, true);
|
||||
canvas_draw_icon_name(
|
||||
canvas, ((TV.x - 5) - s->player_global.x) * PARALLAX(TV.layer), TV.y - 2, I_FX_Bang_32x6);
|
||||
canvas_draw_icon(
|
||||
canvas, ((TV.x - 5) - s->player_global.x) * PARALLAX(TV.layer), TV.y - 2, &I_FX_Bang_32x6);
|
||||
canvas_set_bitmap_mode(canvas, false);
|
||||
if(s->action_timeout < TV.timeout - 2) {
|
||||
elements_multiline_text_framed(canvas, 80, 24, "Bang!");
|
||||
@ -124,8 +124,8 @@ void sofa_sit(Canvas* canvas, void* state) {
|
||||
SceneState* s = state;
|
||||
// temp fix pos
|
||||
s->player_global.x = 154;
|
||||
s->dolphin_gfx = A_FX_Sitting_40x27;
|
||||
s->dolphin_gfx_b = I_FX_SittingB_40x27;
|
||||
s->dolphin_gfx = &A_FX_Sitting_40x27;
|
||||
s->dolphin_gfx_b = &I_FX_SittingB_40x27;
|
||||
}
|
||||
|
||||
void inspect_painting(Canvas* canvas, void* state) {
|
||||
|
@ -66,7 +66,7 @@ typedef struct {
|
||||
uint16_t timeout;
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
IconName icon;
|
||||
const Icon* icon;
|
||||
char action_name[16];
|
||||
void (*draw)(Canvas* canvas, void* model);
|
||||
void (*callback)(Canvas* canvas, void* model);
|
||||
@ -79,8 +79,8 @@ typedef struct {
|
||||
Vec2 player_v;
|
||||
Vec2 screen;
|
||||
|
||||
IconName dolphin_gfx;
|
||||
IconName dolphin_gfx_b; // temp
|
||||
const Icon* dolphin_gfx;
|
||||
const Icon* dolphin_gfx_b; // temp
|
||||
|
||||
bool player_flipped;
|
||||
bool use_pending;
|
||||
|
@ -104,37 +104,37 @@ void dolphin_scene_render_dolphin(SceneState* state, Canvas* canvas) {
|
||||
furi_assert(canvas);
|
||||
|
||||
if(state->scene_zoom == SCENE_ZOOM) {
|
||||
state->dolphin_gfx = I_DolphinExcited_64x63;
|
||||
state->dolphin_gfx = &I_DolphinExcited_64x63;
|
||||
} else if(state->action == SLEEP && state->player_global.x == 154) { // 2do - sofa x pos getter
|
||||
state->dolphin_gfx = A_FX_Sitting_40x27;
|
||||
state->dolphin_gfx_b = I_FX_SittingB_40x27;
|
||||
state->dolphin_gfx = &A_FX_Sitting_40x27;
|
||||
state->dolphin_gfx_b = &I_FX_SittingB_40x27;
|
||||
} else if(state->action != INTERACT) {
|
||||
if(state->player_v.x < 0 || state->player_flipped) {
|
||||
if(state->player_anim == 0) {
|
||||
state->dolphin_gfx = I_WalkL1_32x32;
|
||||
state->dolphin_gfx_b = I_WalkLB1_32x32;
|
||||
state->dolphin_gfx = &I_WalkL1_32x32;
|
||||
state->dolphin_gfx_b = &I_WalkLB1_32x32;
|
||||
|
||||
} else {
|
||||
state->dolphin_gfx = I_WalkL2_32x32;
|
||||
state->dolphin_gfx_b = I_WalkLB2_32x32;
|
||||
state->dolphin_gfx = &I_WalkL2_32x32;
|
||||
state->dolphin_gfx_b = &I_WalkLB2_32x32;
|
||||
}
|
||||
} else if(state->player_v.x > 0 || !state->player_flipped) {
|
||||
if(state->player_anim == 0) {
|
||||
state->dolphin_gfx = I_WalkR1_32x32;
|
||||
state->dolphin_gfx_b = I_WalkRB1_32x32;
|
||||
state->dolphin_gfx = &I_WalkR1_32x32;
|
||||
state->dolphin_gfx_b = &I_WalkRB1_32x32;
|
||||
|
||||
} else {
|
||||
state->dolphin_gfx = I_WalkR2_32x32;
|
||||
state->dolphin_gfx_b = I_WalkRB2_32x32;
|
||||
state->dolphin_gfx = &I_WalkR2_32x32;
|
||||
state->dolphin_gfx_b = &I_WalkRB2_32x32;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
canvas_set_bitmap_mode(canvas, true);
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
canvas_draw_icon_name(canvas, state->player.x, state->player.y, state->dolphin_gfx_b);
|
||||
canvas_draw_icon(canvas, state->player.x, state->player.y, state->dolphin_gfx_b);
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
canvas_draw_icon_name(canvas, state->player.x, state->player.y, state->dolphin_gfx);
|
||||
canvas_draw_icon(canvas, state->player.x, state->player.y, state->dolphin_gfx);
|
||||
canvas_set_bitmap_mode(canvas, false);
|
||||
}
|
||||
|
||||
@ -158,7 +158,7 @@ void dolphin_scene_render(SceneState* state, Canvas* canvas, uint32_t t) {
|
||||
if(current_scene[i]->draw) current_scene[i]->draw(canvas, state);
|
||||
|
||||
if(l == current_scene[i]->layer) {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
item_pos * PARALLAX(l),
|
||||
current_scene[i]->y,
|
||||
|
@ -170,14 +170,14 @@ int32_t gui_test(void* param) {
|
||||
dialog_ex_set_header(gui_tester->dialog_ex, "Dallas", 95, 12, AlignCenter, AlignCenter);
|
||||
dialog_ex_set_text(
|
||||
gui_tester->dialog_ex, "F6 E5 D4\nC3 B2 A1", 95, 32, AlignCenter, AlignCenter);
|
||||
dialog_ex_set_icon(gui_tester->dialog_ex, 0, 1, I_DolphinExcited_64x63);
|
||||
dialog_ex_set_icon(gui_tester->dialog_ex, 0, 1, &I_DolphinExcited_64x63);
|
||||
dialog_ex_set_left_button_text(gui_tester->dialog_ex, "More");
|
||||
dialog_ex_set_right_button_text(gui_tester->dialog_ex, "Save");
|
||||
|
||||
// Popup
|
||||
popup_set_callback(gui_tester->popup, popup_callback);
|
||||
popup_set_context(gui_tester->popup, gui_tester);
|
||||
popup_set_icon(gui_tester->popup, 0, 2, I_DolphinMafia_115x62);
|
||||
popup_set_icon(gui_tester->popup, 0, 2, &I_DolphinMafia_115x62);
|
||||
popup_set_text(gui_tester->popup, "Deleted", 83, 19, AlignLeft, AlignBottom);
|
||||
popup_set_timeout(gui_tester->popup, 5000);
|
||||
popup_enable_timeout(gui_tester->popup);
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "canvas_i.h"
|
||||
#include "icon_i.h"
|
||||
#include "icon_animation_i.h"
|
||||
|
||||
#include <furi.h>
|
||||
#include <api-hal.h>
|
||||
@ -175,23 +176,35 @@ uint16_t canvas_string_width(Canvas* canvas, const char* str) {
|
||||
return u8g2_GetStrWidth(&canvas->fb, str);
|
||||
}
|
||||
|
||||
void canvas_draw_icon(Canvas* canvas, uint8_t x, uint8_t y, Icon* icon) {
|
||||
void canvas_draw_icon_animation(
|
||||
Canvas* canvas,
|
||||
uint8_t x,
|
||||
uint8_t y,
|
||||
IconAnimation* icon_animation) {
|
||||
furi_assert(canvas);
|
||||
if(!icon) return;
|
||||
furi_assert(icon_animation);
|
||||
|
||||
x += canvas->offset_x;
|
||||
y += canvas->offset_y;
|
||||
u8g2_DrawXBM(
|
||||
&canvas->fb,
|
||||
x,
|
||||
y,
|
||||
icon_animation_get_width(icon_animation),
|
||||
icon_animation_get_height(icon_animation),
|
||||
icon_animation_get_data(icon_animation));
|
||||
}
|
||||
|
||||
void canvas_draw_icon(Canvas* canvas, uint8_t x, uint8_t y, const Icon* icon) {
|
||||
furi_assert(canvas);
|
||||
furi_assert(icon);
|
||||
|
||||
x += canvas->offset_x;
|
||||
y += canvas->offset_y;
|
||||
u8g2_DrawXBM(
|
||||
&canvas->fb, x, y, icon_get_width(icon), icon_get_height(icon), icon_get_data(icon));
|
||||
}
|
||||
|
||||
void canvas_draw_icon_name(Canvas* canvas, uint8_t x, uint8_t y, IconName name) {
|
||||
furi_assert(canvas);
|
||||
const IconData* data = assets_icons_get_data(name);
|
||||
x += canvas->offset_x;
|
||||
y += canvas->offset_y;
|
||||
u8g2_DrawXBM(&canvas->fb, x, y, data->width, data->height, data->frames[0]);
|
||||
}
|
||||
|
||||
void canvas_draw_dot(Canvas* canvas, uint8_t x, uint8_t y) {
|
||||
furi_assert(canvas);
|
||||
x += canvas->offset_x;
|
||||
|
@ -1,8 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <gui/icon.h>
|
||||
#include <assets_icons_i.h>
|
||||
#include <gui/icon_animation.h>
|
||||
#include <assets_icons.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -91,15 +91,25 @@ void canvas_draw_str_aligned(
|
||||
*/
|
||||
uint16_t canvas_string_width(Canvas* canvas, const char* str);
|
||||
|
||||
/*
|
||||
* Draw stateful icon at position defined by x,y.
|
||||
/** Draw animation at position defined by x,y.
|
||||
* @param canvas - canvas instance
|
||||
* @param x - x coordinate
|
||||
* @param y - y coordinate
|
||||
* @param icon_animation - data pointer to IconAnimation
|
||||
*/
|
||||
void canvas_draw_icon(Canvas* canvas, uint8_t x, uint8_t y, Icon* icon);
|
||||
void canvas_draw_icon_animation(
|
||||
Canvas* canvas,
|
||||
uint8_t x,
|
||||
uint8_t y,
|
||||
IconAnimation* icon_animation);
|
||||
|
||||
/*
|
||||
* Draw stateless icon at position defined by x,y.
|
||||
/** Draw icon at position defined by x,y.
|
||||
* @param canvas - canvas instance
|
||||
* @param x - x coordinate
|
||||
* @param y - y coordinate
|
||||
* @param icon - data pointer to Icon
|
||||
*/
|
||||
void canvas_draw_icon_name(Canvas* canvas, uint8_t x, uint8_t y, IconName name);
|
||||
void canvas_draw_icon(Canvas* canvas, uint8_t x, uint8_t y, const Icon* icon);
|
||||
|
||||
/*
|
||||
* Draw xbm icon of width, height at position defined by x,y.
|
||||
|
@ -1,10 +1,13 @@
|
||||
#include "elements.h"
|
||||
#include "gui/canvas.h"
|
||||
#include <assets_icons.h>
|
||||
|
||||
#include <gui/icon_i.h>
|
||||
#include <gui/icon_animation_i.h>
|
||||
|
||||
#include <m-string.h>
|
||||
#include <furi.h>
|
||||
#include "canvas_i.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
@ -106,7 +109,7 @@ void elements_button_left(Canvas* canvas, const char* str) {
|
||||
const uint8_t vertical_offset = 3;
|
||||
const uint8_t horizontal_offset = 3;
|
||||
const uint8_t string_width = canvas_string_width(canvas, str);
|
||||
const IconData* icon = assets_icons_get_data(I_ButtonLeft_4x7);
|
||||
const Icon* icon = &I_ButtonLeft_4x7;
|
||||
const uint8_t icon_offset = 3;
|
||||
const uint8_t icon_width_with_offset = icon->width + icon_offset;
|
||||
const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
|
||||
@ -120,8 +123,8 @@ void elements_button_left(Canvas* canvas, const char* str) {
|
||||
canvas_draw_line(canvas, x + button_width + 2, y, x + button_width + 2, y - button_height + 2);
|
||||
|
||||
canvas_invert_color(canvas);
|
||||
canvas_draw_icon_name(
|
||||
canvas, x + horizontal_offset, y - button_height + vertical_offset, I_ButtonLeft_4x7);
|
||||
canvas_draw_icon(
|
||||
canvas, x + horizontal_offset, y - button_height + vertical_offset, &I_ButtonLeft_4x7);
|
||||
canvas_draw_str(
|
||||
canvas, x + horizontal_offset + icon_width_with_offset, y - vertical_offset, str);
|
||||
canvas_invert_color(canvas);
|
||||
@ -132,7 +135,7 @@ void elements_button_right(Canvas* canvas, const char* str) {
|
||||
const uint8_t vertical_offset = 3;
|
||||
const uint8_t horizontal_offset = 3;
|
||||
const uint8_t string_width = canvas_string_width(canvas, str);
|
||||
const IconData* icon = assets_icons_get_data(I_ButtonRight_4x7);
|
||||
const Icon* icon = &I_ButtonRight_4x7;
|
||||
const uint8_t icon_offset = 3;
|
||||
const uint8_t icon_width_with_offset = icon->width + icon_offset;
|
||||
const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
|
||||
@ -147,11 +150,11 @@ void elements_button_right(Canvas* canvas, const char* str) {
|
||||
|
||||
canvas_invert_color(canvas);
|
||||
canvas_draw_str(canvas, x - button_width + horizontal_offset, y - vertical_offset, str);
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
x - horizontal_offset - icon->width,
|
||||
y - button_height + vertical_offset,
|
||||
I_ButtonRight_4x7);
|
||||
&I_ButtonRight_4x7);
|
||||
canvas_invert_color(canvas);
|
||||
}
|
||||
|
||||
@ -160,7 +163,7 @@ void elements_button_center(Canvas* canvas, const char* str) {
|
||||
const uint8_t vertical_offset = 3;
|
||||
const uint8_t horizontal_offset = 1;
|
||||
const uint8_t string_width = canvas_string_width(canvas, str);
|
||||
const IconData* icon = assets_icons_get_data(I_ButtonCenter_7x7);
|
||||
const Icon* icon = &I_ButtonCenter_7x7;
|
||||
const uint8_t icon_offset = 3;
|
||||
const uint8_t icon_width_with_offset = icon->width + icon_offset;
|
||||
const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
|
||||
@ -179,8 +182,8 @@ void elements_button_center(Canvas* canvas, const char* str) {
|
||||
canvas_draw_line(canvas, x + button_width + 2, y, x + button_width + 2, y - button_height + 2);
|
||||
|
||||
canvas_invert_color(canvas);
|
||||
canvas_draw_icon_name(
|
||||
canvas, x + horizontal_offset, y - button_height + vertical_offset, I_ButtonCenter_7x7);
|
||||
canvas_draw_icon(
|
||||
canvas, x + horizontal_offset, y - button_height + vertical_offset, &I_ButtonCenter_7x7);
|
||||
canvas_draw_str(
|
||||
canvas, x + horizontal_offset + icon_width_with_offset, y - vertical_offset, str);
|
||||
canvas_invert_color(canvas);
|
||||
|
@ -85,7 +85,7 @@ void gui_redraw_status_bar(Gui* gui) {
|
||||
canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal);
|
||||
canvas_frame_set(
|
||||
gui->canvas, GUI_STATUS_BAR_X, GUI_STATUS_BAR_Y, GUI_DISPLAY_WIDTH, GUI_STATUS_BAR_HEIGHT);
|
||||
canvas_draw_icon_name(gui->canvas, 0, 0, I_Background_128x11);
|
||||
canvas_draw_icon(gui->canvas, 0, 0, &I_Background_128x11);
|
||||
|
||||
// Right side
|
||||
x = GUI_DISPLAY_WIDTH;
|
||||
|
@ -1,75 +1,13 @@
|
||||
#include "icon_i.h"
|
||||
|
||||
#include <furi.h>
|
||||
|
||||
Icon* icon_alloc(const IconData* data) {
|
||||
Icon* icon = furi_alloc(sizeof(Icon));
|
||||
icon->data = data;
|
||||
return icon;
|
||||
uint8_t icon_get_width(const Icon* instance) {
|
||||
return instance->width;
|
||||
}
|
||||
|
||||
void icon_free(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
free(icon);
|
||||
uint8_t icon_get_height(const Icon* instance) {
|
||||
return instance->height;
|
||||
}
|
||||
|
||||
const uint8_t* icon_get_data(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
if(icon->tick) {
|
||||
uint32_t now = osKernelGetTickCount();
|
||||
if(now < icon->tick) {
|
||||
icon->tick = now;
|
||||
icon_next_frame(icon);
|
||||
} else if(now - icon->tick > osKernelGetTickFreq() / icon->data->frame_rate) {
|
||||
icon->tick = now;
|
||||
icon_next_frame(icon);
|
||||
}
|
||||
}
|
||||
return icon->data->frames[icon->frame];
|
||||
}
|
||||
|
||||
void icon_next_frame(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
icon->frame = (icon->frame + 1) % icon->data->frame_count;
|
||||
}
|
||||
|
||||
uint8_t icon_get_width(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
return icon->data->width;
|
||||
}
|
||||
|
||||
uint8_t icon_get_height(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
return icon->data->height;
|
||||
}
|
||||
|
||||
bool icon_is_animated(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
return icon->data->frame_count > 1;
|
||||
}
|
||||
|
||||
bool icon_is_animating(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
return icon->tick > 0;
|
||||
}
|
||||
|
||||
void icon_start_animation(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
icon->tick = osKernelGetTickCount();
|
||||
}
|
||||
|
||||
void icon_stop_animation(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
icon->tick = 0;
|
||||
icon->frame = 0;
|
||||
}
|
||||
|
||||
uint8_t icon_get_current_frame(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
return icon->frame;
|
||||
}
|
||||
|
||||
bool icon_is_last_frame(Icon* icon) {
|
||||
furi_assert(icon);
|
||||
return icon->data->frame_count - icon->frame <= 1;
|
||||
const uint8_t* icon_get_data(const Icon* instance) {
|
||||
return instance->frames[0];
|
||||
}
|
@ -1,65 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct IconData IconData;
|
||||
typedef struct Icon Icon;
|
||||
|
||||
/*
|
||||
* Allocate icon instance with const icon data.
|
||||
* always returns Icon or stops system if not enough memory
|
||||
*/
|
||||
Icon* icon_alloc(const IconData* data);
|
||||
uint8_t icon_get_width(const Icon* instance);
|
||||
|
||||
/*
|
||||
* Release icon instance
|
||||
*/
|
||||
void icon_free(Icon* icon);
|
||||
uint8_t icon_get_height(const Icon* instance);
|
||||
|
||||
/*
|
||||
* Get icon width
|
||||
*/
|
||||
uint8_t icon_get_width(Icon* icon);
|
||||
|
||||
/*
|
||||
* Get icon height
|
||||
*/
|
||||
uint8_t icon_get_height(Icon* icon);
|
||||
|
||||
/*
|
||||
* Check if icon is animated
|
||||
*/
|
||||
bool icon_is_animated(Icon* icon);
|
||||
|
||||
/*
|
||||
* Check if icon animation is active
|
||||
*/
|
||||
bool icon_is_animating(Icon* icon);
|
||||
|
||||
/*
|
||||
* Start icon animation
|
||||
*/
|
||||
void icon_start_animation(Icon* icon);
|
||||
|
||||
/*
|
||||
* Stop icon animation
|
||||
*/
|
||||
void icon_stop_animation(Icon* icon);
|
||||
|
||||
/*
|
||||
* Get current frame
|
||||
*/
|
||||
uint8_t icon_get_current_frame(Icon* icon);
|
||||
|
||||
/*
|
||||
* Returns true if current frame is a last one
|
||||
*/
|
||||
bool icon_is_last_frame(Icon* icon);
|
||||
const uint8_t* icon_get_data(const Icon* instance);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
77
applications/gui/icon_animation.c
Normal file
77
applications/gui/icon_animation.c
Normal file
@ -0,0 +1,77 @@
|
||||
#include "icon_animation_i.h"
|
||||
#include "icon_i.h"
|
||||
|
||||
#include <furi.h>
|
||||
|
||||
IconAnimation* icon_animation_alloc(const Icon* icon) {
|
||||
furi_assert(icon);
|
||||
IconAnimation* instance = furi_alloc(sizeof(IconAnimation));
|
||||
instance->icon = icon;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void icon_animation_free(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
free(instance);
|
||||
}
|
||||
|
||||
const uint8_t* icon_animation_get_data(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
if(instance->tick) {
|
||||
uint32_t now = osKernelGetTickCount();
|
||||
if(now < instance->tick) {
|
||||
instance->tick = now;
|
||||
icon_animation_next_frame(instance);
|
||||
} else if(now - instance->tick > osKernelGetTickFreq() / instance->icon->frame_rate) {
|
||||
instance->tick = now;
|
||||
icon_animation_next_frame(instance);
|
||||
}
|
||||
}
|
||||
return instance->icon->frames[instance->frame];
|
||||
}
|
||||
|
||||
void icon_animation_next_frame(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
instance->frame = (instance->frame + 1) % instance->icon->frame_count;
|
||||
}
|
||||
|
||||
uint8_t icon_animation_get_width(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
return instance->icon->width;
|
||||
}
|
||||
|
||||
uint8_t icon_animation_get_height(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
return instance->icon->height;
|
||||
}
|
||||
|
||||
bool icon_animation_is_animated(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
return instance->icon->frame_count > 1;
|
||||
}
|
||||
|
||||
bool icon_animation_is_animating(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
return instance->tick > 0;
|
||||
}
|
||||
|
||||
void icon_animation_start(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
instance->tick = osKernelGetTickCount();
|
||||
}
|
||||
|
||||
void icon_animation_stop(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
instance->tick = 0;
|
||||
instance->frame = 0;
|
||||
}
|
||||
|
||||
uint8_t icon_animation_get_current_frame(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
return instance->frame;
|
||||
}
|
||||
|
||||
bool icon_animation_is_last_frame(IconAnimation* instance) {
|
||||
furi_assert(instance);
|
||||
return instance->icon->frame_count - instance->frame <= 1;
|
||||
}
|
67
applications/gui/icon_animation.h
Normal file
67
applications/gui/icon_animation.h
Normal file
@ -0,0 +1,67 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <assets_icons.h>
|
||||
|
||||
typedef struct IconAnimation IconAnimation;
|
||||
|
||||
/*
|
||||
* Allocate icon animation instance with const icon data.
|
||||
* always returns Icon or stops system if not enough memory
|
||||
*/
|
||||
IconAnimation* icon_animation_alloc(const Icon* icon);
|
||||
|
||||
/*
|
||||
* Release icon animation instance
|
||||
*/
|
||||
void icon_animation_free(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Get icon animation width
|
||||
*/
|
||||
uint8_t icon_animation_get_width(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Get icon animation height
|
||||
*/
|
||||
uint8_t icon_animation_get_height(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Check if icon is animated
|
||||
*/
|
||||
bool icon_animation_is_animated(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Check if icon animation is active
|
||||
*/
|
||||
bool icon_animation_is_animating(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Start icon animation
|
||||
*/
|
||||
void icon_animation_start(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Stop icon animation
|
||||
*/
|
||||
void icon_animation_stop(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Get current frame
|
||||
*/
|
||||
uint8_t icon_animation_get_current_frame(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Returns true if current frame is a last one
|
||||
*/
|
||||
bool icon_animation_is_last_frame(IconAnimation* instance);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
21
applications/gui/icon_animation_i.h
Normal file
21
applications/gui/icon_animation_i.h
Normal file
@ -0,0 +1,21 @@
|
||||
#pragma once
|
||||
|
||||
#include "icon_animation.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
struct IconAnimation {
|
||||
const Icon* icon;
|
||||
uint8_t frame;
|
||||
uint32_t tick;
|
||||
};
|
||||
|
||||
/*
|
||||
* Get pointer to current frame data
|
||||
*/
|
||||
const uint8_t* icon_animation_get_data(IconAnimation* instance);
|
||||
|
||||
/*
|
||||
* Advance to next frame
|
||||
*/
|
||||
void icon_animation_next_frame(IconAnimation* instance);
|
@ -1,29 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "icon.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
struct IconData {
|
||||
struct Icon {
|
||||
const uint8_t width;
|
||||
const uint8_t height;
|
||||
const uint8_t frame_count;
|
||||
const uint8_t frame_rate;
|
||||
const uint8_t** frames;
|
||||
};
|
||||
|
||||
struct Icon {
|
||||
const IconData* data;
|
||||
uint8_t frame;
|
||||
uint32_t tick;
|
||||
};
|
||||
|
||||
/*
|
||||
* Get pointer to current frame data
|
||||
*/
|
||||
const uint8_t* icon_get_data(Icon* icon);
|
||||
|
||||
/*
|
||||
* Advance to next frame
|
||||
*/
|
||||
void icon_next_frame(Icon* icon);
|
||||
|
@ -101,11 +101,11 @@ static void button_menu_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
ButtonMenuItemArray_it_t it;
|
||||
|
||||
if(active_screen > 0) {
|
||||
canvas_draw_icon_name(canvas, 28, 1, I_IrdaArrowUp_4x8);
|
||||
canvas_draw_icon(canvas, 28, 1, &I_IrdaArrowUp_4x8);
|
||||
}
|
||||
|
||||
if(max_screen > active_screen) {
|
||||
canvas_draw_icon_name(canvas, 28, 123, I_IrdaArrowDown_4x8);
|
||||
canvas_draw_icon(canvas, 28, 123, &I_IrdaArrowDown_4x8);
|
||||
}
|
||||
|
||||
canvas_draw_str_aligned(canvas, 32, 10, AlignCenter, AlignCenter, model->header);
|
||||
|
@ -22,8 +22,8 @@ LIST_DEF(LabelList, LabelElement, M_POD_OPLIST)
|
||||
typedef struct {
|
||||
uint16_t x;
|
||||
uint16_t y;
|
||||
IconName name;
|
||||
IconName name_selected;
|
||||
const Icon* name;
|
||||
const Icon* name_selected;
|
||||
} IconElement;
|
||||
|
||||
typedef struct ButtonItem {
|
||||
@ -158,8 +158,8 @@ void button_panel_add_item(
|
||||
uint16_t matrix_place_y,
|
||||
uint16_t x,
|
||||
uint16_t y,
|
||||
IconName icon_name,
|
||||
IconName icon_name_selected,
|
||||
const Icon* icon_name,
|
||||
const Icon* icon_name_selected,
|
||||
ButtonItemCallback callback,
|
||||
void* callback_context) {
|
||||
furi_assert(button_panel);
|
||||
@ -199,11 +199,11 @@ static void button_panel_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
for(size_t x = 0; x < model->reserve_x; ++x) {
|
||||
for(size_t y = 0; y < model->reserve_y; ++y) {
|
||||
ButtonItem* button_item = *button_panel_get_item(model, x, y);
|
||||
IconName icon_name = button_item->icon.name;
|
||||
const Icon* icon_name = button_item->icon.name;
|
||||
if((model->selected_item_x == x) && (model->selected_item_y == y)) {
|
||||
icon_name = button_item->icon.name_selected;
|
||||
}
|
||||
canvas_draw_icon_name(canvas, button_item->icon.x, button_item->icon.y, icon_name);
|
||||
canvas_draw_icon(canvas, button_item->icon.x, button_item->icon.y, icon_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,8 +70,8 @@ void button_panel_add_item(
|
||||
uint16_t matrix_place_y,
|
||||
uint16_t x,
|
||||
uint16_t y,
|
||||
IconName icon_name,
|
||||
IconName icon_name_selected,
|
||||
const Icon* icon_name,
|
||||
const Icon* icon_name_selected,
|
||||
ButtonItemCallback callback,
|
||||
void* callback_context);
|
||||
|
||||
|
@ -155,8 +155,8 @@ static void byte_input_draw_input(Canvas* canvas, ByteInputModel* model) {
|
||||
|
||||
elements_slightly_rounded_frame(canvas, 6, 14, 116, 15);
|
||||
|
||||
canvas_draw_icon_name(canvas, 2, 19, I_ButtonLeftSmall_3x5);
|
||||
canvas_draw_icon_name(canvas, 123, 19, I_ButtonRightSmall_3x5);
|
||||
canvas_draw_icon(canvas, 2, 19, &I_ButtonLeftSmall_3x5);
|
||||
canvas_draw_icon(canvas, 123, 19, &I_ButtonRightSmall_3x5);
|
||||
|
||||
for(uint8_t i = model->first_visible_byte;
|
||||
i < model->first_visible_byte + MIN(model->bytes_count, max_drawable_bytes);
|
||||
@ -222,11 +222,11 @@ static void byte_input_draw_input(Canvas* canvas, ByteInputModel* model) {
|
||||
}
|
||||
|
||||
if(model->bytes_count - model->first_visible_byte > max_drawable_bytes) {
|
||||
canvas_draw_icon_name(canvas, 123, 21, I_ButtonRightSmall_3x5);
|
||||
canvas_draw_icon(canvas, 123, 21, &I_ButtonRightSmall_3x5);
|
||||
}
|
||||
|
||||
if(model->first_visible_byte > 0) {
|
||||
canvas_draw_icon_name(canvas, 1, 21, I_ButtonLeftSmall_3x5);
|
||||
canvas_draw_icon(canvas, 1, 21, &I_ButtonLeftSmall_3x5);
|
||||
}
|
||||
}
|
||||
|
||||
@ -244,8 +244,8 @@ static void byte_input_draw_input_selected(Canvas* canvas, ByteInputModel* model
|
||||
canvas_invert_color(canvas);
|
||||
|
||||
elements_slightly_rounded_frame(canvas, 6, 14, 115, 15);
|
||||
canvas_draw_icon_name(canvas, 2, 19, I_ButtonLeftSmall_3x5);
|
||||
canvas_draw_icon_name(canvas, 122, 19, I_ButtonRightSmall_3x5);
|
||||
canvas_draw_icon(canvas, 2, 19, &I_ButtonLeftSmall_3x5);
|
||||
canvas_draw_icon(canvas, 122, 19, &I_ButtonRightSmall_3x5);
|
||||
|
||||
for(uint8_t i = model->first_visible_byte;
|
||||
i < model->first_visible_byte + MIN(model->bytes_count, max_drawable_bytes);
|
||||
@ -281,11 +281,11 @@ static void byte_input_draw_input_selected(Canvas* canvas, ByteInputModel* model
|
||||
}
|
||||
|
||||
if(model->bytes_count - model->first_visible_byte > max_drawable_bytes) {
|
||||
canvas_draw_icon_name(canvas, 123, 21, I_ButtonRightSmall_3x5);
|
||||
canvas_draw_icon(canvas, 123, 21, &I_ButtonRightSmall_3x5);
|
||||
}
|
||||
|
||||
if(model->first_visible_byte > 0) {
|
||||
canvas_draw_icon_name(canvas, 1, 21, I_ButtonLeftSmall_3x5);
|
||||
canvas_draw_icon(canvas, 1, 21, &I_ButtonLeftSmall_3x5);
|
||||
}
|
||||
|
||||
canvas_invert_color(canvas);
|
||||
@ -542,32 +542,32 @@ static void byte_input_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
if(keys[column].value == enter_symbol) {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
if(model->selected_row == row && model->selected_column == column) {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
keyboard_origin_x + keys[column].x,
|
||||
keyboard_origin_y + keys[column].y,
|
||||
I_KeySaveSelected_24x11);
|
||||
&I_KeySaveSelected_24x11);
|
||||
} else {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
keyboard_origin_x + keys[column].x,
|
||||
keyboard_origin_y + keys[column].y,
|
||||
I_KeySave_24x11);
|
||||
&I_KeySave_24x11);
|
||||
}
|
||||
} else if(keys[column].value == backspace_symbol) {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
if(model->selected_row == row && model->selected_column == column) {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
keyboard_origin_x + keys[column].x,
|
||||
keyboard_origin_y + keys[column].y,
|
||||
I_KeyBackspaceSelected_16x9);
|
||||
&I_KeyBackspaceSelected_16x9);
|
||||
} else {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
keyboard_origin_x + keys[column].x,
|
||||
keyboard_origin_y + keys[column].y,
|
||||
I_KeyBackspace_16x9);
|
||||
&I_KeyBackspace_16x9);
|
||||
}
|
||||
} else {
|
||||
if(model->selected_row == row && model->selected_column == column) {
|
||||
|
@ -19,7 +19,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
int8_t x;
|
||||
int8_t y;
|
||||
IconName name;
|
||||
const Icon* icon;
|
||||
} IconElement;
|
||||
|
||||
typedef struct {
|
||||
@ -39,8 +39,8 @@ static void dialog_ex_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
canvas_clear(canvas);
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
|
||||
if(model->icon.name != I_Empty_1x1) {
|
||||
canvas_draw_icon_name(canvas, model->icon.x, model->icon.y, model->icon.name);
|
||||
if(model->icon.icon != NULL) {
|
||||
canvas_draw_icon(canvas, model->icon.x, model->icon.y, model->icon.icon);
|
||||
}
|
||||
|
||||
// Draw header
|
||||
@ -136,7 +136,7 @@ DialogEx* dialog_ex_alloc() {
|
||||
|
||||
model->icon.x = 0;
|
||||
model->icon.y = 0;
|
||||
model->icon.name = I_Empty_1x1;
|
||||
model->icon.icon = NULL;
|
||||
|
||||
model->left_text = NULL;
|
||||
model->center_text = NULL;
|
||||
@ -206,13 +206,13 @@ void dialog_ex_set_text(
|
||||
});
|
||||
}
|
||||
|
||||
void dialog_ex_set_icon(DialogEx* dialog_ex, uint8_t x, uint8_t y, IconName name) {
|
||||
void dialog_ex_set_icon(DialogEx* dialog_ex, uint8_t x, uint8_t y, const Icon* icon) {
|
||||
furi_assert(dialog_ex);
|
||||
with_view_model(
|
||||
dialog_ex->view, (DialogExModel * model) {
|
||||
model->icon.x = x;
|
||||
model->icon.y = y;
|
||||
model->icon.name = name;
|
||||
model->icon.icon = icon;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ void dialog_ex_set_text(
|
||||
* @param x, y - icon position
|
||||
* @param name - icon to be shown
|
||||
*/
|
||||
void dialog_ex_set_icon(DialogEx* dialog_ex, uint8_t x, uint8_t y, IconName name);
|
||||
void dialog_ex_set_icon(DialogEx* dialog_ex, uint8_t x, uint8_t y, const Icon* icon);
|
||||
|
||||
/* Set left button text
|
||||
* If text is null, left button will not be rendered and processed
|
||||
|
@ -23,7 +23,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
uint8_t x;
|
||||
uint8_t y;
|
||||
IconName name;
|
||||
const Icon* icon;
|
||||
} IconElement;
|
||||
|
||||
typedef struct {
|
||||
@ -39,8 +39,8 @@ static void popup_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
canvas_clear(canvas);
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
|
||||
if(model->icon.name != I_Empty_1x1) {
|
||||
canvas_draw_icon_name(canvas, model->icon.x, model->icon.y, model->icon.name);
|
||||
if(model->icon.icon != NULL) {
|
||||
canvas_draw_icon(canvas, model->icon.x, model->icon.y, model->icon.icon);
|
||||
}
|
||||
|
||||
// Draw header
|
||||
@ -138,7 +138,7 @@ Popup* popup_alloc() {
|
||||
|
||||
model->icon.x = 0;
|
||||
model->icon.y = 0;
|
||||
model->icon.name = I_Empty_1x1;
|
||||
model->icon.icon = NULL;
|
||||
return true;
|
||||
});
|
||||
return popup;
|
||||
@ -204,13 +204,13 @@ void popup_set_text(
|
||||
});
|
||||
}
|
||||
|
||||
void popup_set_icon(Popup* popup, uint8_t x, uint8_t y, IconName name) {
|
||||
void popup_set_icon(Popup* popup, uint8_t x, uint8_t y, const Icon* icon) {
|
||||
furi_assert(popup);
|
||||
with_view_model(
|
||||
popup->view, (PopupModel * model) {
|
||||
model->icon.x = x;
|
||||
model->icon.y = y;
|
||||
model->icon.name = name;
|
||||
model->icon.icon = icon;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ void popup_set_text(
|
||||
* @param x, y - icon position
|
||||
* @param name - icon to be shown
|
||||
*/
|
||||
void popup_set_icon(Popup* popup, uint8_t x, uint8_t y, IconName name);
|
||||
void popup_set_icon(Popup* popup, uint8_t x, uint8_t y, const Icon* icon);
|
||||
|
||||
/* Set popup timeout
|
||||
* @param popup - Popup instance
|
||||
|
@ -173,32 +173,32 @@ static void text_input_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
if(keys[column].text == ENTER_KEY) {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
if(model->selected_row == row && model->selected_column == column) {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
keyboard_origin_x + keys[column].x,
|
||||
keyboard_origin_y + keys[column].y,
|
||||
I_KeySaveSelected_24x11);
|
||||
&I_KeySaveSelected_24x11);
|
||||
} else {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
keyboard_origin_x + keys[column].x,
|
||||
keyboard_origin_y + keys[column].y,
|
||||
I_KeySave_24x11);
|
||||
&I_KeySave_24x11);
|
||||
}
|
||||
} else if(keys[column].text == BACKSPACE_KEY) {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
if(model->selected_row == row && model->selected_column == column) {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
keyboard_origin_x + keys[column].x,
|
||||
keyboard_origin_y + keys[column].y,
|
||||
I_KeyBackspaceSelected_16x9);
|
||||
&I_KeyBackspaceSelected_16x9);
|
||||
} else {
|
||||
canvas_draw_icon_name(
|
||||
canvas_draw_icon(
|
||||
canvas,
|
||||
keyboard_origin_x + keys[column].x,
|
||||
keyboard_origin_y + keys[column].y,
|
||||
I_KeyBackspace_16x9);
|
||||
&I_KeyBackspace_16x9);
|
||||
}
|
||||
} else {
|
||||
if(model->selected_row == row && model->selected_column == column) {
|
||||
|
@ -26,7 +26,7 @@ void view_dispatcher_free(ViewDispatcher* view_dispatcher) {
|
||||
while(!ViewDict_end_p(it)) {
|
||||
ViewDict_itref_t* ref = ViewDict_ref(it);
|
||||
// Crash if view wasn't freed
|
||||
furi_assert(ref->value);
|
||||
furi_check(ref->value);
|
||||
ViewDict_next(it);
|
||||
}
|
||||
ViewDict_clear(view_dispatcher->views);
|
||||
|
@ -10,7 +10,7 @@ void iButtonSceneDeleteSuccess::on_enter(iButtonApp* app) {
|
||||
Popup* popup = view_manager->get_popup();
|
||||
auto callback = cbc::obtain_connector(this, &iButtonSceneDeleteSuccess::popup_callback);
|
||||
|
||||
popup_set_icon(popup, 0, 2, I_DolphinMafia_115x62);
|
||||
popup_set_icon(popup, 0, 2, &I_DolphinMafia_115x62);
|
||||
popup_set_text(popup, "Deleted", 83, 19, AlignLeft, AlignBottom);
|
||||
|
||||
popup_set_callback(popup, callback);
|
||||
@ -36,7 +36,7 @@ void iButtonSceneDeleteSuccess::on_exit(iButtonApp* app) {
|
||||
Popup* popup = app->get_view_manager()->get_popup();
|
||||
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
|
||||
popup_disable_timeout(popup);
|
||||
popup_set_context(popup, NULL);
|
||||
|
@ -61,7 +61,7 @@ void iButtonSceneEmulate::on_enter(iButtonApp* app) {
|
||||
break;
|
||||
}
|
||||
|
||||
popup_set_icon(popup, 2, 10, I_iButtonKey_49x44);
|
||||
popup_set_icon(popup, 2, 10, &I_iButtonKey_49x44);
|
||||
|
||||
view_manager->switch_to(iButtonAppViewManager::Type::iButtonAppViewPopup);
|
||||
app->get_key_worker()->start_emulate(app->get_key());
|
||||
@ -89,5 +89,5 @@ void iButtonSceneEmulate::on_exit(iButtonApp* app) {
|
||||
|
||||
popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
}
|
@ -37,7 +37,7 @@ void iButtonSceneReadSuccess::on_enter(iButtonApp* app) {
|
||||
dialog_ex_set_text(dialog_ex, app->get_text_store(), 95, 30, AlignCenter, AlignCenter);
|
||||
dialog_ex_set_left_button_text(dialog_ex, "Retry");
|
||||
dialog_ex_set_right_button_text(dialog_ex, "More");
|
||||
dialog_ex_set_icon(dialog_ex, 0, 1, I_DolphinExcited_64x63);
|
||||
dialog_ex_set_icon(dialog_ex, 0, 1, &I_DolphinExcited_64x63);
|
||||
dialog_ex_set_result_callback(dialog_ex, callback);
|
||||
dialog_ex_set_context(dialog_ex, app);
|
||||
|
||||
@ -74,7 +74,7 @@ void iButtonSceneReadSuccess::on_exit(iButtonApp* app) {
|
||||
dialog_ex_set_right_button_text(dialog_ex, NULL);
|
||||
dialog_ex_set_result_callback(dialog_ex, NULL);
|
||||
dialog_ex_set_context(dialog_ex, NULL);
|
||||
dialog_ex_set_icon(dialog_ex, 0, 0, I_Empty_1x1);
|
||||
dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
|
||||
|
||||
app->notify_green_off();
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ void iButtonSceneRead::on_enter(iButtonApp* app) {
|
||||
|
||||
popup_set_header(popup, "iButton", 95, 26, AlignCenter, AlignBottom);
|
||||
popup_set_text(popup, "waiting\nfor key ...", 95, 30, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 5, I_DolphinWait_61x59);
|
||||
popup_set_icon(popup, 0, 5, &I_DolphinWait_61x59);
|
||||
|
||||
view_manager->switch_to(iButtonAppViewManager::Type::iButtonAppViewPopup);
|
||||
app->get_key()->set_name("");
|
||||
@ -49,5 +49,5 @@ void iButtonSceneRead::on_exit(iButtonApp* app) {
|
||||
|
||||
popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
}
|
@ -10,7 +10,7 @@ void iButtonSceneSaveSuccess::on_enter(iButtonApp* app) {
|
||||
Popup* popup = view_manager->get_popup();
|
||||
auto callback = cbc::obtain_connector(this, &iButtonSceneSaveSuccess::popup_callback);
|
||||
|
||||
popup_set_icon(popup, 32, 5, I_DolphinNice_96x59);
|
||||
popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59);
|
||||
popup_set_text(popup, "Saved!", 13, 22, AlignLeft, AlignBottom);
|
||||
|
||||
popup_set_callback(popup, callback);
|
||||
@ -39,7 +39,7 @@ void iButtonSceneSaveSuccess::on_exit(iButtonApp* app) {
|
||||
Popup* popup = app->get_view_manager()->get_popup();
|
||||
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
|
||||
popup_disable_timeout(popup);
|
||||
popup_set_context(popup, NULL);
|
||||
|
@ -10,7 +10,7 @@ void iButtonSceneWriteSuccess::on_enter(iButtonApp* app) {
|
||||
Popup* popup = view_manager->get_popup();
|
||||
auto callback = cbc::obtain_connector(this, &iButtonSceneWriteSuccess::popup_callback);
|
||||
|
||||
popup_set_icon(popup, 0, 12, I_iButtonDolphinVerySuccess_108x52);
|
||||
popup_set_icon(popup, 0, 12, &I_iButtonDolphinVerySuccess_108x52);
|
||||
popup_set_text(popup, "Successfully written!", 44, 14, AlignLeft, AlignBottom);
|
||||
|
||||
popup_set_callback(popup, callback);
|
||||
@ -40,7 +40,7 @@ void iButtonSceneWriteSuccess::on_exit(iButtonApp* app) {
|
||||
Popup* popup = app->get_view_manager()->get_popup();
|
||||
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
|
||||
popup_disable_timeout(popup);
|
||||
popup_set_context(popup, NULL);
|
||||
|
@ -56,7 +56,7 @@ void iButtonSceneWrite::on_enter(iButtonApp* app) {
|
||||
break;
|
||||
}
|
||||
|
||||
popup_set_icon(popup, 2, 10, I_iButtonKey_49x44);
|
||||
popup_set_icon(popup, 2, 10, &I_iButtonKey_49x44);
|
||||
|
||||
view_manager->switch_to(iButtonAppViewManager::Type::iButtonAppViewPopup);
|
||||
|
||||
@ -92,7 +92,7 @@ void iButtonSceneWrite::on_exit(iButtonApp* app) {
|
||||
|
||||
popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
|
||||
app->get_key_worker()->stop_write();
|
||||
}
|
@ -285,8 +285,7 @@ void irda_rx_callback(void* ctx, bool level, uint32_t duration) {
|
||||
|
||||
if(message) {
|
||||
event.value.rx = *message;
|
||||
osStatus_t result = osMessageQueuePut(isr_context->event_queue, &event, 0, 0);
|
||||
furi_assert(osOK == result);
|
||||
furi_check(osMessageQueuePut(isr_context->event_queue, &event, 0, 0) == osOK);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@ void IrdaAppSceneEditDeleteDone::on_enter(IrdaApp* app) {
|
||||
IrdaAppViewManager* view_manager = app->get_view_manager();
|
||||
Popup* popup = view_manager->get_popup();
|
||||
|
||||
popup_set_icon(popup, 0, 2, I_DolphinMafia_115x62);
|
||||
popup_set_icon(popup, 0, 2, &I_DolphinMafia_115x62);
|
||||
popup_set_text(popup, "Deleted", 83, 19, AlignLeft, AlignBottom);
|
||||
|
||||
popup_set_callback(popup, IrdaApp::popup_callback);
|
||||
|
@ -41,7 +41,7 @@ void IrdaAppSceneEditDelete::on_enter(IrdaApp* app) {
|
||||
}
|
||||
|
||||
dialog_ex_set_text(dialog_ex, app->get_text_store(0), 64, 32, AlignCenter, AlignCenter);
|
||||
dialog_ex_set_icon(dialog_ex, 0, 0, I_Empty_1x1);
|
||||
dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
|
||||
dialog_ex_set_left_button_text(dialog_ex, "Back");
|
||||
dialog_ex_set_right_button_text(dialog_ex, "Delete");
|
||||
dialog_ex_set_result_callback(dialog_ex, dialog_result_callback);
|
||||
|
@ -4,7 +4,7 @@ void IrdaAppSceneEditRenameDone::on_enter(IrdaApp* app) {
|
||||
IrdaAppViewManager* view_manager = app->get_view_manager();
|
||||
Popup* popup = view_manager->get_popup();
|
||||
|
||||
popup_set_icon(popup, 32, 5, I_DolphinNice_96x59);
|
||||
popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59);
|
||||
|
||||
popup_set_text(popup, "Saved!", 13, 22, AlignLeft, AlignTop);
|
||||
|
||||
|
@ -5,7 +5,7 @@ void IrdaAppSceneLearnDoneAfter::on_enter(IrdaApp* app) {
|
||||
auto view_manager = app->get_view_manager();
|
||||
auto popup = view_manager->get_popup();
|
||||
|
||||
popup_set_icon(popup, 0, 30, I_IrdaSendShort_128x34);
|
||||
popup_set_icon(popup, 0, 30, &I_IrdaSendShort_128x34);
|
||||
popup_set_text(
|
||||
popup, "Get ready!\nPoint flipper at target.", 64, 16, AlignCenter, AlignCenter);
|
||||
|
||||
|
@ -4,7 +4,7 @@ void IrdaAppSceneLearnDone::on_enter(IrdaApp* app) {
|
||||
IrdaAppViewManager* view_manager = app->get_view_manager();
|
||||
Popup* popup = view_manager->get_popup();
|
||||
|
||||
popup_set_icon(popup, 32, 5, I_DolphinNice_96x59);
|
||||
popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59);
|
||||
|
||||
if(app->get_learn_new_remote()) {
|
||||
popup_set_text(popup, "New remote\ncreated!", 5, 7, AlignLeft, AlignTop);
|
||||
|
@ -33,7 +33,7 @@ void IrdaAppSceneLearnSuccess::on_enter(IrdaApp* app) {
|
||||
dialog_ex_set_left_button_text(dialog_ex, "Retry");
|
||||
dialog_ex_set_right_button_text(dialog_ex, "Save");
|
||||
dialog_ex_set_center_button_text(dialog_ex, "Send");
|
||||
dialog_ex_set_icon(dialog_ex, 0, 1, I_DolphinExcited_64x63);
|
||||
dialog_ex_set_icon(dialog_ex, 0, 1, &I_DolphinExcited_64x63);
|
||||
dialog_ex_set_result_callback(dialog_ex, dialog_result_callback);
|
||||
dialog_ex_set_context(dialog_ex, app);
|
||||
|
||||
|
@ -9,7 +9,7 @@ void IrdaAppSceneLearn::on_enter(IrdaApp* app) {
|
||||
|
||||
auto popup = view_manager->get_popup();
|
||||
|
||||
popup_set_icon(popup, 0, 32, I_IrdaLearnShort_128x31);
|
||||
popup_set_icon(popup, 0, 32, &I_IrdaLearnShort_128x31);
|
||||
popup_set_text(
|
||||
popup, "Point the remote at IR port\nand push the button", 5, 10, AlignLeft, AlignCenter);
|
||||
popup_set_callback(popup, NULL);
|
||||
|
@ -8,11 +8,29 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) {
|
||||
|
||||
int i = 0;
|
||||
button_panel_add_item(
|
||||
button_panel, i, 0, 0, 3, 19, I_Power_25x27, I_Power_hvr_25x27, irda_app_item_callback, app);
|
||||
button_panel,
|
||||
i,
|
||||
0,
|
||||
0,
|
||||
3,
|
||||
19,
|
||||
&I_Power_25x27,
|
||||
&I_Power_hvr_25x27,
|
||||
irda_app_item_callback,
|
||||
app);
|
||||
brute_force.add_record(i, "POWER");
|
||||
++i;
|
||||
button_panel_add_item(
|
||||
button_panel, i, 1, 0, 36, 19, I_Mute_25x27, I_Mute_hvr_25x27, irda_app_item_callback, app);
|
||||
button_panel,
|
||||
i,
|
||||
1,
|
||||
0,
|
||||
36,
|
||||
19,
|
||||
&I_Mute_25x27,
|
||||
&I_Mute_hvr_25x27,
|
||||
irda_app_item_callback,
|
||||
app);
|
||||
brute_force.add_record(i, "MUTE");
|
||||
++i;
|
||||
button_panel_add_item(
|
||||
@ -22,14 +40,14 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) {
|
||||
1,
|
||||
3,
|
||||
66,
|
||||
I_Vol_up_25x27,
|
||||
I_Vol_up_hvr_25x27,
|
||||
&I_Vol_up_25x27,
|
||||
&I_Vol_up_hvr_25x27,
|
||||
irda_app_item_callback,
|
||||
app);
|
||||
brute_force.add_record(i, "VOL+");
|
||||
++i;
|
||||
button_panel_add_item(
|
||||
button_panel, i, 1, 1, 36, 66, I_Up_25x27, I_Up_hvr_25x27, irda_app_item_callback, app);
|
||||
button_panel, i, 1, 1, 36, 66, &I_Up_25x27, &I_Up_hvr_25x27, irda_app_item_callback, app);
|
||||
brute_force.add_record(i, "CH+");
|
||||
++i;
|
||||
button_panel_add_item(
|
||||
@ -39,14 +57,23 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) {
|
||||
2,
|
||||
3,
|
||||
98,
|
||||
I_Vol_down_25x27,
|
||||
I_Vol_down_hvr_25x27,
|
||||
&I_Vol_down_25x27,
|
||||
&I_Vol_down_hvr_25x27,
|
||||
irda_app_item_callback,
|
||||
app);
|
||||
brute_force.add_record(i, "VOL-");
|
||||
++i;
|
||||
button_panel_add_item(
|
||||
button_panel, i, 1, 2, 36, 98, I_Down_25x27, I_Down_hvr_25x27, irda_app_item_callback, app);
|
||||
button_panel,
|
||||
i,
|
||||
1,
|
||||
2,
|
||||
36,
|
||||
98,
|
||||
&I_Down_25x27,
|
||||
&I_Down_hvr_25x27,
|
||||
irda_app_item_callback,
|
||||
app);
|
||||
brute_force.add_record(i, "CH-");
|
||||
|
||||
button_panel_add_label(button_panel, 6, 11, FontPrimary, "TV remote");
|
||||
|
@ -54,7 +54,7 @@ void popup_brut_draw_callback(Canvas* canvas, void* context) {
|
||||
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
canvas_draw_str(canvas, x + 15, y + 12, "Sending ...");
|
||||
canvas_draw_icon_name(canvas, x + 11, y_max - 14, I_Back_15x10);
|
||||
canvas_draw_icon(canvas, x + 11, y_max - 14, &I_Back_15x10);
|
||||
|
||||
uint8_t percent_value = 100 * popup_brut->progress / popup_brut->progress_max;
|
||||
snprintf(
|
||||
|
@ -3,7 +3,7 @@
|
||||
void LfRfidAppSceneDeleteSuccess::on_enter(LfRfidApp* app, bool need_restore) {
|
||||
auto popup = app->view_controller.get<PopupVM>();
|
||||
|
||||
popup->set_icon(0, 2, I_DolphinMafia_115x62);
|
||||
popup->set_icon(0, 2, &I_DolphinMafia_115x62);
|
||||
popup->set_text("Deleted", 83, 19, AlignLeft, AlignBottom);
|
||||
popup->set_context(app);
|
||||
popup->set_callback(LfRfidAppSceneDeleteSuccess::timeout_callback);
|
||||
|
@ -17,7 +17,7 @@ void LfRfidAppSceneEmulate::on_enter(LfRfidApp* app, bool need_restore) {
|
||||
} else {
|
||||
popup->set_text(string_get_cstr(data_string), 89, 43, AlignCenter, AlignTop);
|
||||
}
|
||||
popup->set_icon(0, 3, I_RFIDDolphinSend_97x61);
|
||||
popup->set_icon(0, 3, &I_RFIDDolphinSend_97x61);
|
||||
|
||||
app->view_controller.switch_to<PopupVM>();
|
||||
app->worker.start_emulate();
|
||||
|
@ -19,7 +19,7 @@ void LfRfidAppSceneReadSuccess::on_enter(LfRfidApp* app, bool need_restore) {
|
||||
button->set_callback(app, LfRfidAppSceneReadSuccess::more_callback);
|
||||
|
||||
auto icon = container->add<IconElement>();
|
||||
icon->set_icon(3, 12, I_RFIDBigChip_37x36);
|
||||
icon->set_icon(3, 12, &I_RFIDBigChip_37x36);
|
||||
|
||||
auto header = container->add<StringElement>();
|
||||
header->set_text(app->worker.key.get_type_text(), 89, 3, AlignCenter);
|
||||
|
@ -4,7 +4,7 @@ void LfRfidAppSceneRead::on_enter(LfRfidApp* app, bool need_restore) {
|
||||
auto popup = app->view_controller.get<PopupVM>();
|
||||
|
||||
popup->set_header("Reading\nLF RFID", 89, 34, AlignCenter, AlignTop);
|
||||
popup->set_icon(0, 3, I_RFIDDolphinReceive_97x61);
|
||||
popup->set_icon(0, 3, &I_RFIDDolphinReceive_97x61);
|
||||
|
||||
app->view_controller.switch_to<PopupVM>();
|
||||
app->worker.start_read();
|
||||
|
@ -3,7 +3,7 @@
|
||||
void LfRfidAppSceneSaveSuccess::on_enter(LfRfidApp* app, bool need_restore) {
|
||||
auto popup = app->view_controller.get<PopupVM>();
|
||||
|
||||
popup->set_icon(32, 5, I_DolphinNice_96x59);
|
||||
popup->set_icon(32, 5, &I_DolphinNice_96x59);
|
||||
popup->set_text("Saved!", 13, 22, AlignLeft, AlignBottom);
|
||||
popup->set_context(app);
|
||||
popup->set_callback(LfRfidAppSceneSaveSuccess::timeout_callback);
|
||||
|
@ -3,7 +3,7 @@
|
||||
void LfRfidAppSceneWriteSuccess::on_enter(LfRfidApp* app, bool need_restore) {
|
||||
auto popup = app->view_controller.get<PopupVM>();
|
||||
popup->set_header("Successfully\nwritten!", 94, 3, AlignCenter, AlignTop);
|
||||
popup->set_icon(0, 6, I_RFIDDolphinSuccess_108x57);
|
||||
popup->set_icon(0, 6, &I_RFIDDolphinSuccess_108x57);
|
||||
popup->set_context(app);
|
||||
popup->set_callback(LfRfidAppSceneWriteSuccess::timeout_callback);
|
||||
popup->set_timeout(1500);
|
||||
|
@ -18,7 +18,7 @@ void LfRfidAppSceneWrite::on_enter(LfRfidApp* app, bool need_restore) {
|
||||
} else {
|
||||
popup->set_text(string_get_cstr(data_string), 89, 43, AlignCenter, AlignTop);
|
||||
}
|
||||
popup->set_icon(0, 3, I_RFIDDolphinSend_97x61);
|
||||
popup->set_icon(0, 3, &I_RFIDDolphinSend_97x61);
|
||||
|
||||
app->view_controller.switch_to<PopupVM>();
|
||||
app->worker.start_write();
|
||||
@ -41,7 +41,7 @@ bool LfRfidAppSceneWrite::on_event(LfRfidApp* app, LfRfidApp::Event* event) {
|
||||
case RfidWorker::WriteResult::NotWritable:
|
||||
if(!card_not_supported) {
|
||||
auto popup = app->view_controller.get<PopupVM>();
|
||||
popup->set_icon(0, 0, I_Empty_1x1);
|
||||
popup->set_icon(0, 0, NULL);
|
||||
popup->set_header("Still trying to write", 64, 7, AlignCenter, AlignTop);
|
||||
popup->set_text(
|
||||
"This card may be protected\nor does not support this\ntype of writing",
|
||||
|
@ -7,8 +7,8 @@ IconElement::~IconElement() {
|
||||
}
|
||||
|
||||
void IconElement::draw(Canvas* canvas) {
|
||||
if(name != I_Empty_1x1) {
|
||||
canvas_draw_icon_name(canvas, x, y, name);
|
||||
if(icon != NULL) {
|
||||
canvas_draw_icon(canvas, x, y, icon);
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,9 +16,9 @@ bool IconElement::input(InputEvent* event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void IconElement::set_icon(uint8_t _x, uint8_t _y, IconName _name) {
|
||||
void IconElement::set_icon(uint8_t _x, uint8_t _y, const Icon* _icon) {
|
||||
lock_model();
|
||||
name = _name;
|
||||
icon = _icon;
|
||||
x = _x;
|
||||
y = _y;
|
||||
unlock_model(true);
|
||||
|
@ -8,10 +8,10 @@ public:
|
||||
void draw(Canvas* canvas) final;
|
||||
bool input(InputEvent* event) final;
|
||||
|
||||
void set_icon(uint8_t x = 0, uint8_t y = 0, IconName name = I_Empty_1x1);
|
||||
void set_icon(uint8_t x = 0, uint8_t y = 0, const Icon* icon = NULL);
|
||||
|
||||
private:
|
||||
IconName name = I_Empty_1x1;
|
||||
const Icon* icon = NULL;
|
||||
uint8_t x = 0;
|
||||
uint8_t y = 0;
|
||||
};
|
||||
|
@ -16,7 +16,7 @@ struct Menu {
|
||||
// GUI
|
||||
Gui* gui;
|
||||
ViewPort* view_port;
|
||||
Icon* icon;
|
||||
IconAnimation* icon;
|
||||
|
||||
// State
|
||||
MenuItem* root;
|
||||
@ -79,19 +79,19 @@ void menu_draw_primary(Menu* menu, Canvas* canvas) {
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
shift_position = (0 + position + items_count - 1) % (MenuItemArray_size(*items));
|
||||
item = *MenuItemArray_get(*items, shift_position);
|
||||
canvas_draw_icon(canvas, 4, 3, menu_item_get_icon(item));
|
||||
canvas_draw_icon_animation(canvas, 4, 3, menu_item_get_icon(item));
|
||||
canvas_draw_str(canvas, 22, 14, menu_item_get_label(item));
|
||||
// Second line main
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
shift_position = (1 + position + items_count - 1) % (MenuItemArray_size(*items));
|
||||
item = *MenuItemArray_get(*items, shift_position);
|
||||
canvas_draw_icon(canvas, 4, 25, menu_item_get_icon(item));
|
||||
canvas_draw_icon_animation(canvas, 4, 25, menu_item_get_icon(item));
|
||||
canvas_draw_str(canvas, 22, 36, menu_item_get_label(item));
|
||||
// Third line
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
shift_position = (2 + position + items_count - 1) % (MenuItemArray_size(*items));
|
||||
item = *MenuItemArray_get(*items, shift_position);
|
||||
canvas_draw_icon(canvas, 4, 47, menu_item_get_icon(item));
|
||||
canvas_draw_icon_animation(canvas, 4, 47, menu_item_get_icon(item));
|
||||
canvas_draw_str(canvas, 22, 58, menu_item_get_label(item));
|
||||
// Frame and scrollbar
|
||||
// elements_frame(canvas, 0, 0, 128 - 5, 21);
|
||||
@ -163,17 +163,17 @@ void menu_view_port_callback(Canvas* canvas, void* context) {
|
||||
release_mutex((ValueMutex*)context, menu);
|
||||
}
|
||||
|
||||
void menu_set_icon(Menu* menu, Icon* icon) {
|
||||
void menu_set_icon(Menu* menu, IconAnimation* icon) {
|
||||
furi_assert(menu);
|
||||
|
||||
if(menu->icon) {
|
||||
icon_stop_animation(menu->icon);
|
||||
icon_animation_stop(menu->icon);
|
||||
}
|
||||
|
||||
menu->icon = icon;
|
||||
|
||||
if(menu->icon) {
|
||||
icon_start_animation(menu->icon);
|
||||
icon_animation_start(menu->icon);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ struct MenuItem {
|
||||
MenuItemType type;
|
||||
|
||||
const char* label;
|
||||
Icon* icon;
|
||||
IconAnimation* icon;
|
||||
|
||||
size_t position;
|
||||
size_t window_position;
|
||||
@ -24,7 +24,7 @@ MenuItem* menu_item_alloc() {
|
||||
return menu_item;
|
||||
}
|
||||
|
||||
MenuItem* menu_item_alloc_menu(const char* label, Icon* icon) {
|
||||
MenuItem* menu_item_alloc_menu(const char* label, IconAnimation* icon) {
|
||||
MenuItem* menu_item = menu_item_alloc();
|
||||
|
||||
menu_item->type = MenuItemTypeMenu;
|
||||
@ -40,7 +40,7 @@ MenuItem* menu_item_alloc_menu(const char* label, Icon* icon) {
|
||||
|
||||
MenuItem* menu_item_alloc_function(
|
||||
const char* label,
|
||||
Icon* icon,
|
||||
IconAnimation* icon,
|
||||
MenuItemCallback callback,
|
||||
void* context) {
|
||||
MenuItem* menu_item = menu_item_alloc();
|
||||
@ -112,12 +112,12 @@ const char* menu_item_get_label(MenuItem* menu_item) {
|
||||
return menu_item->label;
|
||||
}
|
||||
|
||||
void menu_item_set_icon(MenuItem* menu_item, Icon* icon) {
|
||||
void menu_item_set_icon(MenuItem* menu_item, IconAnimation* icon) {
|
||||
furi_assert(menu_item);
|
||||
menu_item->icon = icon;
|
||||
}
|
||||
|
||||
Icon* menu_item_get_icon(MenuItem* menu_item) {
|
||||
IconAnimation* menu_item_get_icon(MenuItem* menu_item) {
|
||||
furi_assert(menu_item);
|
||||
return menu_item->icon;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <m-array.h>
|
||||
#include <gui/icon.h>
|
||||
#include <gui/icon_animation.h>
|
||||
|
||||
typedef enum {
|
||||
MenuItemTypeMenu = 0x00,
|
||||
@ -14,11 +14,11 @@ typedef void (*MenuItemCallback)(void* context);
|
||||
|
||||
ARRAY_DEF(MenuItemArray, MenuItem*, M_PTR_OPLIST);
|
||||
|
||||
MenuItem* menu_item_alloc_menu(const char* label, Icon* icon);
|
||||
MenuItem* menu_item_alloc_menu(const char* label, IconAnimation* icon);
|
||||
|
||||
MenuItem* menu_item_alloc_function(
|
||||
const char* label,
|
||||
Icon* icon,
|
||||
IconAnimation* icon,
|
||||
MenuItemCallback callback,
|
||||
void* context);
|
||||
|
||||
@ -39,8 +39,8 @@ size_t menu_item_get_window_position(MenuItem* menu_item);
|
||||
void menu_item_set_label(MenuItem* menu_item, const char* label);
|
||||
const char* menu_item_get_label(MenuItem* menu_item);
|
||||
|
||||
void menu_item_set_icon(MenuItem* menu_item, Icon* icon);
|
||||
Icon* menu_item_get_icon(MenuItem* menu_item);
|
||||
void menu_item_set_icon(MenuItem* menu_item, IconAnimation* icon);
|
||||
IconAnimation* menu_item_get_icon(MenuItem* menu_item);
|
||||
|
||||
MenuItemArray_t* menu_item_get_subitems(MenuItem* menu_item);
|
||||
|
||||
|
@ -29,7 +29,7 @@ const void nfc_scene_emulate_uid_on_enter(void* context) {
|
||||
data->uid[6]);
|
||||
}
|
||||
|
||||
popup_set_icon(popup, 0, 3, I_RFIDDolphinSend_97x61);
|
||||
popup_set_icon(popup, 0, 3, &I_RFIDDolphinSend_97x61);
|
||||
popup_set_header(popup, "Emulating UID", 56, 31, AlignLeft, AlignTop);
|
||||
popup_set_text(popup, nfc->text_store, 56, 43, AlignLeft, AlignTop);
|
||||
|
||||
@ -55,7 +55,7 @@ const void nfc_scene_emulate_uid_on_exit(void* context) {
|
||||
Popup* popup = nfc->popup;
|
||||
popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
}
|
||||
|
||||
AppScene* nfc_scene_emulate_uid_alloc() {
|
||||
|
@ -18,7 +18,7 @@ const void nfc_scene_read_card_on_enter(void* context) {
|
||||
// Setup view
|
||||
Popup* popup = nfc->popup;
|
||||
popup_set_header(popup, "Detecting\nNFC card", 70, 34, AlignLeft, AlignTop);
|
||||
popup_set_icon(popup, 0, 3, I_RFIDDolphinReceive_97x61);
|
||||
popup_set_icon(popup, 0, 3, &I_RFIDDolphinReceive_97x61);
|
||||
|
||||
// Start worker
|
||||
nfc_worker_start(
|
||||
@ -53,7 +53,7 @@ const void nfc_scene_read_card_on_exit(void* context) {
|
||||
Popup* popup = nfc->popup;
|
||||
popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
}
|
||||
|
||||
AppScene* nfc_scene_read_card_alloc() {
|
||||
|
@ -28,7 +28,7 @@ const void nfc_scene_read_card_success_on_enter(void* context) {
|
||||
dialog_ex_set_left_button_text(dialog_ex, "Retry");
|
||||
dialog_ex_set_right_button_text(dialog_ex, "More");
|
||||
dialog_ex_set_header(dialog_ex, nfc_get_dev_type(data->device), 36, 8, AlignLeft, AlignCenter);
|
||||
dialog_ex_set_icon(dialog_ex, 8, 13, I_Medium_chip_22x21);
|
||||
dialog_ex_set_icon(dialog_ex, 8, 13, &I_Medium_chip_22x21);
|
||||
// Display UID
|
||||
if(data->uid_len == 4) {
|
||||
nfc_set_text_store(
|
||||
@ -90,7 +90,7 @@ const void nfc_scene_read_card_success_on_exit(void* context) {
|
||||
DialogEx* dialog_ex = nfc->dialog_ex;
|
||||
dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
|
||||
dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
dialog_ex_set_icon(dialog_ex, 0, 0, I_Empty_1x1);
|
||||
dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
|
||||
dialog_ex_set_left_button_text(dialog_ex, NULL);
|
||||
dialog_ex_set_right_button_text(dialog_ex, NULL);
|
||||
dialog_ex_set_result_callback(dialog_ex, NULL);
|
||||
|
@ -17,7 +17,7 @@ const void nfc_scene_save_success_on_enter(void* context) {
|
||||
|
||||
// Setup view
|
||||
Popup* popup = nfc->popup;
|
||||
popup_set_icon(popup, 32, 5, I_DolphinNice_96x59);
|
||||
popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59);
|
||||
popup_set_header(popup, "Saved!", 13, 22, AlignLeft, AlignBottom);
|
||||
popup_set_timeout(popup, 1500);
|
||||
popup_set_context(popup, nfc);
|
||||
@ -44,7 +44,7 @@ const void nfc_scene_save_success_on_exit(void* context) {
|
||||
Popup* popup = nfc->popup;
|
||||
popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
|
||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
||||
popup_set_icon(popup, 0, 0, I_Empty_1x1);
|
||||
popup_set_icon(popup, 0, 0, NULL);
|
||||
popup_set_callback(popup, NULL);
|
||||
popup_set_context(popup, NULL);
|
||||
popup_set_timeout(popup, 0);
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <menu/menu_item.h>
|
||||
|
||||
#include <gui/gui.h>
|
||||
#include <gui/icon_animation.h>
|
||||
#include <gui/view_port.h>
|
||||
#include <gui/view.h>
|
||||
#include <gui/view_dispatcher.h>
|
||||
@ -32,7 +33,6 @@ struct Power {
|
||||
View* off_view;
|
||||
View* disconnect_view;
|
||||
|
||||
Icon* battery_icon;
|
||||
ViewPort* battery_view_port;
|
||||
|
||||
Dialog* dialog;
|
||||
@ -47,7 +47,7 @@ struct Power {
|
||||
void power_draw_battery_callback(Canvas* canvas, void* context) {
|
||||
furi_assert(context);
|
||||
Power* power = context;
|
||||
canvas_draw_icon(canvas, 0, 0, power->battery_icon);
|
||||
canvas_draw_icon(canvas, 0, 0, &I_Battery_26x8);
|
||||
with_view_model(
|
||||
power->info_view, (PowerInfoModel * model) {
|
||||
canvas_draw_box(canvas, 2, 2, (float)model->charge / 100 * 20, 4);
|
||||
@ -108,7 +108,7 @@ Power* power_alloc() {
|
||||
power->cli = furi_record_open("cli");
|
||||
power_cli_init(power->cli, power);
|
||||
|
||||
power->menu = menu_item_alloc_menu("Power", assets_icons_get(A_Power_14));
|
||||
power->menu = menu_item_alloc_menu("Power", icon_animation_alloc(&A_Power_14));
|
||||
menu_item_subitem_add(
|
||||
power->menu, menu_item_alloc_function("Off", NULL, power_menu_off_callback, power));
|
||||
menu_item_subitem_add(
|
||||
@ -143,10 +143,9 @@ Power* power_alloc() {
|
||||
view_dispatcher_add_view(
|
||||
power->view_dispatcher, PowerViewDialog, dialog_get_view(power->dialog));
|
||||
|
||||
power->battery_icon = assets_icons_get(I_Battery_26x8);
|
||||
power->battery_view_port = view_port_alloc();
|
||||
|
||||
view_port_set_width(power->battery_view_port, icon_get_width(power->battery_icon));
|
||||
view_port_set_width(power->battery_view_port, icon_get_width(&I_Battery_26x8));
|
||||
view_port_draw_callback_set(power->battery_view_port, power_draw_battery_callback, power);
|
||||
return power;
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
#include "power_views.h"
|
||||
#include <gui/elements.h>
|
||||
|
||||
static void draw_stat(Canvas* canvas, int x, int y, IconName icon, char* val) {
|
||||
static void draw_stat(Canvas* canvas, int x, int y, const Icon* icon, char* val) {
|
||||
canvas_draw_frame(canvas, x - 7, y + 7, 30, 13);
|
||||
canvas_draw_icon_name(canvas, x, y, icon);
|
||||
canvas_draw_icon(canvas, x, y, icon);
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
canvas_draw_box(canvas, x - 4, y + 16, 24, 6);
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
@ -18,15 +18,15 @@ static void draw_battery(Canvas* canvas, PowerInfoModel* data, int x, int y) {
|
||||
int32_t drain_current = -data->current_gauge * 1000;
|
||||
uint32_t charge_current = data->current_gauge * 1000;
|
||||
// battery
|
||||
canvas_draw_icon_name(canvas, x, y, I_BatteryBody_52x28);
|
||||
canvas_draw_icon(canvas, x, y, &I_BatteryBody_52x28);
|
||||
if(charge_current > 0) {
|
||||
canvas_draw_icon_name(canvas, x + 16, y + 7, I_FaceCharging_29x14);
|
||||
canvas_draw_icon(canvas, x + 16, y + 7, &I_FaceCharging_29x14);
|
||||
} else if(drain_current > 100) {
|
||||
canvas_draw_icon_name(canvas, x + 16, y + 7, I_FaceConfused_29x14);
|
||||
canvas_draw_icon(canvas, x + 16, y + 7, &I_FaceConfused_29x14);
|
||||
} else if(data->charge < 10) {
|
||||
canvas_draw_icon_name(canvas, x + 16, y + 7, I_FaceNopower_29x14);
|
||||
canvas_draw_icon(canvas, x + 16, y + 7, &I_FaceNopower_29x14);
|
||||
} else {
|
||||
canvas_draw_icon_name(canvas, x + 16, y + 7, I_FaceNormal_29x14);
|
||||
canvas_draw_icon(canvas, x + 16, y + 7, &I_FaceNormal_29x14);
|
||||
}
|
||||
|
||||
//bubble
|
||||
@ -99,10 +99,10 @@ void power_info_draw_callback(Canvas* canvas, void* context) {
|
||||
(uint32_t)(data->voltage_gauge * 10) % 10);
|
||||
snprintf(health, sizeof(health), "%d%s", data->health, "%");
|
||||
|
||||
draw_stat(canvas, 8, 42, I_Battery_16x16, batt_level);
|
||||
draw_stat(canvas, 40, 42, I_Temperature_16x16, temperature);
|
||||
draw_stat(canvas, 72, 42, I_Voltage_16x16, voltage);
|
||||
draw_stat(canvas, 104, 42, I_Health_16x16, health);
|
||||
draw_stat(canvas, 8, 42, &I_Battery_16x16, batt_level);
|
||||
draw_stat(canvas, 40, 42, &I_Temperature_16x16, temperature);
|
||||
draw_stat(canvas, 72, 42, &I_Voltage_16x16, voltage);
|
||||
draw_stat(canvas, 104, 42, &I_Health_16x16, health);
|
||||
}
|
||||
|
||||
void power_off_draw_callback(Canvas* canvas, void* context) {
|
||||
|
@ -118,8 +118,8 @@ SdApp* sd_app_alloc() {
|
||||
|
||||
// init icon view_port
|
||||
sd_app->icon.view_port = view_port_alloc();
|
||||
sd_app->icon.mounted = assets_icons_get(I_SDcardMounted_11x8);
|
||||
sd_app->icon.fail = assets_icons_get(I_SDcardFail_11x8);
|
||||
sd_app->icon.mounted = &I_SDcardMounted_11x8;
|
||||
sd_app->icon.fail = &I_SDcardFail_11x8;
|
||||
view_port_set_width(sd_app->icon.view_port, icon_get_width(sd_app->icon.mounted));
|
||||
view_port_draw_callback_set(sd_app->icon.view_port, sd_icon_draw_callback, sd_app);
|
||||
view_port_enabled_set(sd_app->icon.view_port, false);
|
||||
@ -657,7 +657,7 @@ int32_t sd_filesystem(void* p) {
|
||||
// init menu
|
||||
// TODO menu icon
|
||||
MenuItem* menu_item;
|
||||
menu_item = menu_item_alloc_menu("SD Card", assets_icons_get(I_SDcardMounted_11x8));
|
||||
menu_item = menu_item_alloc_menu("SD Card", icon_animation_alloc(&I_SDcardMounted_11x8));
|
||||
|
||||
menu_item_subitem_add(
|
||||
menu_item, menu_item_alloc_function("Info", NULL, app_sd_info_callback, sd_app));
|
||||
@ -921,11 +921,11 @@ int32_t sd_filesystem(void* p) {
|
||||
y_1_line,
|
||||
AlignCenter,
|
||||
AlignCenter);
|
||||
dialog_ex_set_icon(dialog, 5, 6, I_SDQuestion_35x43);
|
||||
dialog_ex_set_icon(dialog, 5, 6, &I_SDQuestion_35x43);
|
||||
} else {
|
||||
dialog_ex_set_text(
|
||||
dialog, "SD card\nerror", 88, y_1_line, AlignCenter, AlignCenter);
|
||||
dialog_ex_set_icon(dialog, 5, 10, I_SDError_43x35);
|
||||
dialog_ex_set_icon(dialog, 5, 10, &I_SDError_43x35);
|
||||
}
|
||||
sd_app->sd_app_state = SdAppStateCheckError;
|
||||
view_holder_start(sd_app->view_holder);
|
||||
@ -938,7 +938,7 @@ int32_t sd_filesystem(void* p) {
|
||||
dialog_ex_set_left_button_text(dialog, "Back");
|
||||
dialog_ex_set_text(
|
||||
dialog, event.payload.error_text, 88, y_1_line, AlignCenter, AlignCenter);
|
||||
dialog_ex_set_icon(dialog, 5, 6, I_SDQuestion_35x43);
|
||||
dialog_ex_set_icon(dialog, 5, 6, &I_SDQuestion_35x43);
|
||||
sd_app->sd_app_state = SdAppStateShowError;
|
||||
view_holder_start(sd_app->view_holder);
|
||||
}
|
||||
|
@ -65,8 +65,8 @@ typedef struct {
|
||||
/* application data */
|
||||
typedef struct {
|
||||
ViewPort* view_port;
|
||||
Icon* mounted;
|
||||
Icon* fail;
|
||||
const Icon* mounted;
|
||||
const Icon* fail;
|
||||
} SdFsIcon;
|
||||
|
||||
typedef struct {
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,152 +1,146 @@
|
||||
#pragma once
|
||||
|
||||
#include <gui/icon.h>
|
||||
|
||||
typedef enum {
|
||||
A_FX_Sitting_40x27,
|
||||
A_MDIB_32x32,
|
||||
A_MDI_32x32,
|
||||
A_MDWLB_32x32,
|
||||
A_MDWL_32x32,
|
||||
A_MDWRB_32x32,
|
||||
A_MDWR_32x32,
|
||||
A_WatchingTV_128x64,
|
||||
A_Wink_128x64,
|
||||
I_125_10px,
|
||||
I_ble_10px,
|
||||
I_dir_10px,
|
||||
I_ibutt_10px,
|
||||
I_ir_10px,
|
||||
I_Nfc_10px,
|
||||
I_sub1_10px,
|
||||
I_unknown_10px,
|
||||
I_ButtonCenter_7x7,
|
||||
I_ButtonLeftSmall_3x5,
|
||||
I_ButtonLeft_4x7,
|
||||
I_ButtonRightSmall_3x5,
|
||||
I_ButtonRight_4x7,
|
||||
I_Empty_1x1,
|
||||
I_BigBurger_24x24,
|
||||
I_BigGames_24x24,
|
||||
I_BigProfile_24x24,
|
||||
I_DolphinFirstStart0_70x53,
|
||||
I_DolphinFirstStart1_59x53,
|
||||
I_DolphinFirstStart2_59x51,
|
||||
I_DolphinFirstStart3_57x48,
|
||||
I_DolphinFirstStart4_67x53,
|
||||
I_DolphinFirstStart5_45x53,
|
||||
I_DolphinFirstStart6_58x54,
|
||||
I_DolphinFirstStart7_61x51,
|
||||
I_DolphinFirstStart8_56x51,
|
||||
I_DolphinOkay_41x43,
|
||||
I_Flipper_young_80x60,
|
||||
I_FX_Bang_32x6,
|
||||
I_FX_SittingB_40x27,
|
||||
I_DolphinExcited_64x63,
|
||||
I_DolphinMafia_115x62,
|
||||
I_DolphinNice_96x59,
|
||||
I_DolphinWait_61x59,
|
||||
I_iButtonDolphinSuccess_109x60,
|
||||
I_iButtonDolphinVerySuccess_108x52,
|
||||
I_iButtonKey_49x44,
|
||||
I_DoorLeft_70x55,
|
||||
I_DoorLeft_8x56,
|
||||
I_DoorLocked_10x56,
|
||||
I_DoorRight_70x55,
|
||||
I_DoorRight_8x56,
|
||||
I_LockPopup_100x49,
|
||||
I_PassportBottom_128x17,
|
||||
I_PassportLeft_6x47,
|
||||
I_Back_15x10,
|
||||
I_Down_25x27,
|
||||
I_Down_hvr_25x27,
|
||||
I_Fill_marker_7x7,
|
||||
I_IrdaArrowDown_4x8,
|
||||
I_IrdaArrowUp_4x8,
|
||||
I_IrdaLearnShort_128x31,
|
||||
I_IrdaLearn_128x64,
|
||||
I_IrdaSendShort_128x34,
|
||||
I_IrdaSend_128x64,
|
||||
I_Mute_25x27,
|
||||
I_Mute_hvr_25x27,
|
||||
I_Power_25x27,
|
||||
I_Power_hvr_25x27,
|
||||
I_Up_25x27,
|
||||
I_Up_hvr_25x27,
|
||||
I_Vol_down_25x27,
|
||||
I_Vol_down_hvr_25x27,
|
||||
I_Vol_up_25x27,
|
||||
I_Vol_up_hvr_25x27,
|
||||
I_KeyBackspaceSelected_16x9,
|
||||
I_KeyBackspace_16x9,
|
||||
I_KeySaveSelected_24x11,
|
||||
I_KeySave_24x11,
|
||||
A_125khz_14,
|
||||
A_Bluetooth_14,
|
||||
A_FileManager_14,
|
||||
A_Games_14,
|
||||
A_GPIO_14,
|
||||
A_iButton_14,
|
||||
A_Infrared_14,
|
||||
A_NFC_14,
|
||||
A_Passport_14,
|
||||
A_Plugins_14,
|
||||
A_Power_14,
|
||||
A_Settings_14,
|
||||
A_Sub1ghz_14,
|
||||
A_Tamagotchi_14,
|
||||
A_U2F_14,
|
||||
I_EMV_Chip_14x11,
|
||||
I_Medium_chip_22x21,
|
||||
I_passport_bad1_43x45,
|
||||
I_passport_bad2_43x45,
|
||||
I_passport_bad3_43x45,
|
||||
I_passport_happy1_43x45,
|
||||
I_passport_happy2_43x45,
|
||||
I_passport_happy3_43x45,
|
||||
I_passport_okay1_43x45,
|
||||
I_passport_okay2_43x45,
|
||||
I_passport_okay3_43x45,
|
||||
I_BatteryBody_52x28,
|
||||
I_Battery_16x16,
|
||||
I_FaceCharging_29x14,
|
||||
I_FaceConfused_29x14,
|
||||
I_FaceNopower_29x14,
|
||||
I_FaceNormal_29x14,
|
||||
I_Health_16x16,
|
||||
I_Temperature_16x16,
|
||||
I_Voltage_16x16,
|
||||
I_RFIDBigChip_37x36,
|
||||
I_RFIDDolphinReceive_97x61,
|
||||
I_RFIDDolphinSend_97x61,
|
||||
I_RFIDDolphinSuccess_108x57,
|
||||
I_Home_painting_17x20,
|
||||
I_PC_22x29,
|
||||
I_Sofa_40x13,
|
||||
I_TV_20x20,
|
||||
I_TV_20x24,
|
||||
I_WalkL1_32x32,
|
||||
I_WalkL2_32x32,
|
||||
I_WalkLB1_32x32,
|
||||
I_WalkLB2_32x32,
|
||||
I_WalkR1_32x32,
|
||||
I_WalkR2_32x32,
|
||||
I_WalkRB1_32x32,
|
||||
I_WalkRB2_32x32,
|
||||
I_SDError_43x35,
|
||||
I_SDQuestion_35x43,
|
||||
I_Background_128x11,
|
||||
I_Background_128x8,
|
||||
I_BadUsb_9x8,
|
||||
I_Battery_19x8,
|
||||
I_Battery_26x8,
|
||||
I_Bluetooth_5x8,
|
||||
I_Lock_8x8,
|
||||
I_PlaceholderL_11x13,
|
||||
I_PlaceholderR_30x13,
|
||||
I_SDcardFail_11x8,
|
||||
I_SDcardMounted_11x8,
|
||||
I_USBConnected_15x8,
|
||||
} IconName;
|
||||
|
||||
Icon * assets_icons_get(IconName name);
|
||||
extern const Icon A_FX_Sitting_40x27;
|
||||
extern const Icon A_MDIB_32x32;
|
||||
extern const Icon A_MDI_32x32;
|
||||
extern const Icon A_MDWLB_32x32;
|
||||
extern const Icon A_MDWL_32x32;
|
||||
extern const Icon A_MDWRB_32x32;
|
||||
extern const Icon A_MDWR_32x32;
|
||||
extern const Icon A_WatchingTV_128x64;
|
||||
extern const Icon A_Wink_128x64;
|
||||
extern const Icon I_dir_10px;
|
||||
extern const Icon I_Nfc_10px;
|
||||
extern const Icon I_sub1_10px;
|
||||
extern const Icon I_ir_10px;
|
||||
extern const Icon I_ibutt_10px;
|
||||
extern const Icon I_unknown_10px;
|
||||
extern const Icon I_ble_10px;
|
||||
extern const Icon I_125_10px;
|
||||
extern const Icon I_ButtonRightSmall_3x5;
|
||||
extern const Icon I_ButtonLeft_4x7;
|
||||
extern const Icon I_ButtonLeftSmall_3x5;
|
||||
extern const Icon I_ButtonRight_4x7;
|
||||
extern const Icon I_ButtonCenter_7x7;
|
||||
extern const Icon I_FX_SittingB_40x27;
|
||||
extern const Icon I_BigGames_24x24;
|
||||
extern const Icon I_BigProfile_24x24;
|
||||
extern const Icon I_DolphinOkay_41x43;
|
||||
extern const Icon I_DolphinFirstStart5_45x53;
|
||||
extern const Icon I_DolphinFirstStart4_67x53;
|
||||
extern const Icon I_DolphinFirstStart2_59x51;
|
||||
extern const Icon I_DolphinFirstStart0_70x53;
|
||||
extern const Icon I_DolphinFirstStart6_58x54;
|
||||
extern const Icon I_DolphinFirstStart1_59x53;
|
||||
extern const Icon I_DolphinFirstStart8_56x51;
|
||||
extern const Icon I_DolphinFirstStart7_61x51;
|
||||
extern const Icon I_Flipper_young_80x60;
|
||||
extern const Icon I_BigBurger_24x24;
|
||||
extern const Icon I_FX_Bang_32x6;
|
||||
extern const Icon I_DolphinFirstStart3_57x48;
|
||||
extern const Icon I_PassportBottom_128x17;
|
||||
extern const Icon I_DoorLeft_8x56;
|
||||
extern const Icon I_DoorLocked_10x56;
|
||||
extern const Icon I_DoorRight_8x56;
|
||||
extern const Icon I_DoorLeft_70x55;
|
||||
extern const Icon I_PassportLeft_6x47;
|
||||
extern const Icon I_DoorRight_70x55;
|
||||
extern const Icon I_LockPopup_100x49;
|
||||
extern const Icon I_Mute_25x27;
|
||||
extern const Icon I_IrdaArrowUp_4x8;
|
||||
extern const Icon I_Up_hvr_25x27;
|
||||
extern const Icon I_Mute_hvr_25x27;
|
||||
extern const Icon I_Vol_down_25x27;
|
||||
extern const Icon I_Down_25x27;
|
||||
extern const Icon I_Power_hvr_25x27;
|
||||
extern const Icon I_IrdaLearnShort_128x31;
|
||||
extern const Icon I_IrdaArrowDown_4x8;
|
||||
extern const Icon I_Vol_down_hvr_25x27;
|
||||
extern const Icon I_IrdaLearn_128x64;
|
||||
extern const Icon I_Down_hvr_25x27;
|
||||
extern const Icon I_Fill_marker_7x7;
|
||||
extern const Icon I_Power_25x27;
|
||||
extern const Icon I_Vol_up_25x27;
|
||||
extern const Icon I_Up_25x27;
|
||||
extern const Icon I_Back_15x10;
|
||||
extern const Icon I_IrdaSend_128x64;
|
||||
extern const Icon I_IrdaSendShort_128x34;
|
||||
extern const Icon I_Vol_up_hvr_25x27;
|
||||
extern const Icon I_KeySave_24x11;
|
||||
extern const Icon I_KeyBackspaceSelected_16x9;
|
||||
extern const Icon I_KeySaveSelected_24x11;
|
||||
extern const Icon I_KeyBackspace_16x9;
|
||||
extern const Icon A_125khz_14;
|
||||
extern const Icon A_Bluetooth_14;
|
||||
extern const Icon A_FileManager_14;
|
||||
extern const Icon A_GPIO_14;
|
||||
extern const Icon A_Games_14;
|
||||
extern const Icon A_Infrared_14;
|
||||
extern const Icon A_NFC_14;
|
||||
extern const Icon A_Passport_14;
|
||||
extern const Icon A_Plugins_14;
|
||||
extern const Icon A_Power_14;
|
||||
extern const Icon A_Settings_14;
|
||||
extern const Icon A_Sub1ghz_14;
|
||||
extern const Icon A_Tamagotchi_14;
|
||||
extern const Icon A_U2F_14;
|
||||
extern const Icon A_iButton_14;
|
||||
extern const Icon I_Medium_chip_22x21;
|
||||
extern const Icon I_EMV_Chip_14x11;
|
||||
extern const Icon I_passport_happy1_43x45;
|
||||
extern const Icon I_passport_bad3_43x45;
|
||||
extern const Icon I_passport_okay2_43x45;
|
||||
extern const Icon I_passport_bad2_43x45;
|
||||
extern const Icon I_passport_okay3_43x45;
|
||||
extern const Icon I_passport_bad1_43x45;
|
||||
extern const Icon I_passport_happy3_43x45;
|
||||
extern const Icon I_passport_happy2_43x45;
|
||||
extern const Icon I_passport_okay1_43x45;
|
||||
extern const Icon I_Health_16x16;
|
||||
extern const Icon I_FaceCharging_29x14;
|
||||
extern const Icon I_BatteryBody_52x28;
|
||||
extern const Icon I_Voltage_16x16;
|
||||
extern const Icon I_Temperature_16x16;
|
||||
extern const Icon I_FaceNopower_29x14;
|
||||
extern const Icon I_FaceNormal_29x14;
|
||||
extern const Icon I_Battery_16x16;
|
||||
extern const Icon I_FaceConfused_29x14;
|
||||
extern const Icon I_RFIDDolphinSuccess_108x57;
|
||||
extern const Icon I_RFIDBigChip_37x36;
|
||||
extern const Icon I_RFIDDolphinSend_97x61;
|
||||
extern const Icon I_RFIDDolphinReceive_97x61;
|
||||
extern const Icon I_SDQuestion_35x43;
|
||||
extern const Icon I_SDError_43x35;
|
||||
extern const Icon I_WalkR2_32x32;
|
||||
extern const Icon I_WalkL2_32x32;
|
||||
extern const Icon I_WalkRB1_32x32;
|
||||
extern const Icon I_Home_painting_17x20;
|
||||
extern const Icon I_WalkLB2_32x32;
|
||||
extern const Icon I_Sofa_40x13;
|
||||
extern const Icon I_WalkLB1_32x32;
|
||||
extern const Icon I_PC_22x29;
|
||||
extern const Icon I_WalkL1_32x32;
|
||||
extern const Icon I_TV_20x20;
|
||||
extern const Icon I_WalkR1_32x32;
|
||||
extern const Icon I_WalkRB2_32x32;
|
||||
extern const Icon I_TV_20x24;
|
||||
extern const Icon I_BadUsb_9x8;
|
||||
extern const Icon I_PlaceholderR_30x13;
|
||||
extern const Icon I_Background_128x8;
|
||||
extern const Icon I_Lock_8x8;
|
||||
extern const Icon I_Battery_26x8;
|
||||
extern const Icon I_PlaceholderL_11x13;
|
||||
extern const Icon I_Battery_19x8;
|
||||
extern const Icon I_SDcardMounted_11x8;
|
||||
extern const Icon I_SDcardFail_11x8;
|
||||
extern const Icon I_USBConnected_15x8;
|
||||
extern const Icon I_Bluetooth_5x8;
|
||||
extern const Icon I_Background_128x11;
|
||||
extern const Icon I_DolphinMafia_115x62;
|
||||
extern const Icon I_DolphinExcited_64x63;
|
||||
extern const Icon I_iButtonDolphinSuccess_109x60;
|
||||
extern const Icon I_iButtonDolphinVerySuccess_108x52;
|
||||
extern const Icon I_iButtonKey_49x44;
|
||||
extern const Icon I_DolphinNice_96x59;
|
||||
extern const Icon I_DolphinWait_61x59;
|
||||
|
@ -1,5 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <assets_icons.h>
|
||||
|
||||
const IconData * assets_icons_get_data(IconName name);
|
Binary file not shown.
Before Width: | Height: | Size: 1.6 KiB |
@ -137,8 +137,7 @@ void memmgr_heap_enable_thread_trace(osThreadId_t thread_id) {
|
||||
vTaskSuspendAll();
|
||||
{
|
||||
memmgr_heap_thread_trace_depth++;
|
||||
furi_assert(
|
||||
MemmgrHeapThreadDict_get(memmgr_heap_thread_dict, (uint32_t)thread_id) == NULL);
|
||||
furi_check(MemmgrHeapThreadDict_get(memmgr_heap_thread_dict, (uint32_t)thread_id) == NULL);
|
||||
MemmgrHeapAllocDict_t alloc_dict;
|
||||
MemmgrHeapAllocDict_init(alloc_dict);
|
||||
MemmgrHeapThreadDict_set_at(memmgr_heap_thread_dict, (uint32_t)thread_id, alloc_dict);
|
||||
@ -152,8 +151,7 @@ void memmgr_heap_disable_thread_trace(osThreadId_t thread_id) {
|
||||
vTaskSuspendAll();
|
||||
{
|
||||
memmgr_heap_thread_trace_depth++;
|
||||
furi_assert(
|
||||
MemmgrHeapThreadDict_get(memmgr_heap_thread_dict, (uint32_t)thread_id) != NULL);
|
||||
furi_check(MemmgrHeapThreadDict_get(memmgr_heap_thread_dict, (uint32_t)thread_id) != NULL);
|
||||
MemmgrHeapThreadDict_erase(memmgr_heap_thread_dict, (uint32_t)thread_id);
|
||||
memmgr_heap_thread_trace_depth--;
|
||||
}
|
||||
@ -167,6 +165,7 @@ size_t memmgr_heap_get_thread_memory(osThreadId_t thread_id) {
|
||||
memmgr_heap_thread_trace_depth++;
|
||||
MemmgrHeapAllocDict_t* alloc_dict =
|
||||
MemmgrHeapThreadDict_get(memmgr_heap_thread_dict, (uint32_t)thread_id);
|
||||
furi_check(alloc_dict);
|
||||
MemmgrHeapAllocDict_it_t alloc_dict_it;
|
||||
for(MemmgrHeapAllocDict_it(alloc_dict_it, *alloc_dict);
|
||||
!MemmgrHeapAllocDict_end_p(alloc_dict_it);
|
||||
|
@ -17,7 +17,7 @@ void DialogExVM::clean() {
|
||||
set_context(NULL);
|
||||
set_header(NULL, 0, 0, AlignLeft, AlignBottom);
|
||||
set_text(NULL, 0, 0, AlignLeft, AlignBottom);
|
||||
set_icon(0, 0, I_Empty_1x1);
|
||||
set_icon(0, 0, NULL);
|
||||
set_left_button_text(NULL);
|
||||
set_center_button_text(NULL);
|
||||
set_right_button_text(NULL);
|
||||
@ -44,8 +44,8 @@ void DialogExVM::set_text(const char* text, uint8_t x, uint8_t y, Align horizont
|
||||
dialog_ex_set_text(dialog_ex, text, x, y, horizontal, vertical);
|
||||
}
|
||||
|
||||
void DialogExVM::set_icon(uint8_t x, uint8_t y, IconName name) {
|
||||
dialog_ex_set_icon(dialog_ex, x, y, name);
|
||||
void DialogExVM::set_icon(uint8_t x, uint8_t y, const Icon* icon) {
|
||||
dialog_ex_set_icon(dialog_ex, x, y, icon);
|
||||
}
|
||||
|
||||
void DialogExVM::set_left_button_text(const char* text) {
|
||||
|
@ -45,7 +45,7 @@ public:
|
||||
* @param x, y - icon position
|
||||
* @param name - icon to be shown
|
||||
*/
|
||||
void set_icon(uint8_t x, uint8_t y, IconName name);
|
||||
void set_icon(uint8_t x, uint8_t y, const Icon* icon);
|
||||
|
||||
/**
|
||||
* Set left button text
|
||||
|
@ -16,7 +16,7 @@ void PopupVM::clean() {
|
||||
set_context(NULL);
|
||||
set_header(NULL, 0, 0, AlignLeft, AlignBottom);
|
||||
set_text(NULL, 0, 0, AlignLeft, AlignBottom);
|
||||
set_icon(0, 0, I_Empty_1x1);
|
||||
set_icon(0, 0, NULL);
|
||||
disable_timeout();
|
||||
set_timeout(1000);
|
||||
}
|
||||
@ -37,8 +37,8 @@ void PopupVM::set_text(const char* text, uint8_t x, uint8_t y, Align horizontal,
|
||||
popup_set_text(popup, text, x, y, horizontal, vertical);
|
||||
}
|
||||
|
||||
void PopupVM::set_icon(int8_t x, int8_t y, IconName name) {
|
||||
popup_set_icon(popup, x, y, name);
|
||||
void PopupVM::set_icon(int8_t x, int8_t y, const Icon* icon) {
|
||||
popup_set_icon(popup, x, y, icon);
|
||||
}
|
||||
|
||||
void PopupVM::set_timeout(uint32_t timeout_in_ms) {
|
||||
|
@ -45,7 +45,7 @@ public:
|
||||
* @param x, y - icon position
|
||||
* @param name - icon to be shown
|
||||
*/
|
||||
void set_icon(int8_t x, int8_t y, IconName name);
|
||||
void set_icon(int8_t x, int8_t y, const Icon* icon);
|
||||
|
||||
/**
|
||||
* Set popup timeout
|
||||
|
@ -10,42 +10,19 @@ import sys
|
||||
ICONS_SUPPORTED_FORMATS = ["png"]
|
||||
|
||||
ICONS_TEMPLATE_H_HEADER = """#pragma once
|
||||
|
||||
#include <gui/icon.h>
|
||||
|
||||
typedef enum {
|
||||
"""
|
||||
ICONS_TEMPLATE_H_ICON_NAME = "\t{name},\n"
|
||||
ICONS_TEMPLATE_H_FOOTER = """} IconName;
|
||||
ICONS_TEMPLATE_H_ICON_NAME = "extern const Icon {name};\n"
|
||||
|
||||
Icon * assets_icons_get(IconName name);
|
||||
"""
|
||||
ICONS_TEMPLATE_C_HEADER = """#include \"assets_icons.h\"
|
||||
|
||||
ICONS_TEMPLATE_H_I = """#pragma once
|
||||
|
||||
#include <assets_icons.h>
|
||||
|
||||
const IconData * assets_icons_get_data(IconName name);
|
||||
"""
|
||||
|
||||
ICONS_TEMPLATE_C_HEADER = """#include \"assets_icons_i.h\"
|
||||
#include <gui/icon_i.h>
|
||||
|
||||
"""
|
||||
ICONS_TEMPLATE_C_FRAME = "const uint8_t {name}[] = {data};\n"
|
||||
ICONS_TEMPLATE_C_DATA = "const uint8_t *{name}[] = {data};\n"
|
||||
ICONS_TEMPLATE_C_ICONS_ARRAY_START = "const IconData icons[] = {\n"
|
||||
ICONS_TEMPLATE_C_ICONS_ITEM = "\t{{ .width={width}, .height={height}, .frame_count={frame_count}, .frame_rate={frame_rate}, .frames=_{name} }},\n"
|
||||
ICONS_TEMPLATE_C_ICONS_ARRAY_END = "};"
|
||||
ICONS_TEMPLATE_C_FOOTER = """
|
||||
const IconData * assets_icons_get_data(IconName name) {
|
||||
return &icons[name];
|
||||
}
|
||||
|
||||
Icon * assets_icons_get(IconName name) {
|
||||
return icon_alloc(assets_icons_get_data(name));
|
||||
}
|
||||
"""
|
||||
ICONS_TEMPLATE_C_ICONS = "const Icon {name} = {{.width={width},.height={height},.frame_count={frame_count},.frame_rate={frame_rate},.frames=_{name}}};\n"
|
||||
|
||||
|
||||
class Main:
|
||||
@ -90,6 +67,7 @@ class Main:
|
||||
# Traverse icons tree, append image data to source file
|
||||
for dirpath, dirnames, filenames in os.walk(self.args.source_directory):
|
||||
self.logger.debug(f"Processing directory {dirpath}")
|
||||
dirnames.sort()
|
||||
if not filenames:
|
||||
continue
|
||||
if "frame_rate" in filenames:
|
||||
@ -153,10 +131,9 @@ class Main:
|
||||
icons.append((icon_name, width, height, 0, 1))
|
||||
# Create array of images:
|
||||
self.logger.debug(f"Finalizing source file")
|
||||
icons_c.write(ICONS_TEMPLATE_C_ICONS_ARRAY_START)
|
||||
for name, width, height, frame_rate, frame_count in icons:
|
||||
icons_c.write(
|
||||
ICONS_TEMPLATE_C_ICONS_ITEM.format(
|
||||
ICONS_TEMPLATE_C_ICONS.format(
|
||||
name=name,
|
||||
width=width,
|
||||
height=height,
|
||||
@ -164,8 +141,6 @@ class Main:
|
||||
frame_count=frame_count,
|
||||
)
|
||||
)
|
||||
icons_c.write(ICONS_TEMPLATE_C_ICONS_ARRAY_END)
|
||||
icons_c.write(ICONS_TEMPLATE_C_FOOTER)
|
||||
icons_c.write("\n")
|
||||
# Create Public Header
|
||||
self.logger.debug(f"Creating header")
|
||||
@ -173,12 +148,6 @@ class Main:
|
||||
icons_h.write(ICONS_TEMPLATE_H_HEADER)
|
||||
for name, width, height, frame_rate, frame_count in icons:
|
||||
icons_h.write(ICONS_TEMPLATE_H_ICON_NAME.format(name=name))
|
||||
icons_h.write(ICONS_TEMPLATE_H_FOOTER)
|
||||
# Create Private Header
|
||||
icons_h_i = open(
|
||||
os.path.join(self.args.output_directory, "assets_icons_i.h"), "w"
|
||||
)
|
||||
icons_h_i.write(ICONS_TEMPLATE_H_I)
|
||||
self.logger.debug(f"Done")
|
||||
|
||||
def icon2header(self, file):
|
||||
|
Loading…
Reference in New Issue
Block a user