Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorあく <alleteam@gmail.com>2021-07-07 11:57:49 +0300
committerGitHub <noreply@github.com>2021-07-07 11:57:49 +0300
commita7283280eff93f22c8fc1b65573ae0a6447e94bf (patch)
tree89501b407baf96f3070de9e893ab1be467201d16 /applications/dolphin
parent607e873404d746c692c38482f03c54ed3edce26c (diff)
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
Diffstat (limited to 'applications/dolphin')
-rw-r--r--applications/dolphin/dolphin.c31
-rw-r--r--applications/dolphin/dolphin_i.h5
-rw-r--r--applications/dolphin/dolphin_views.c26
-rw-r--r--applications/dolphin/dolphin_views.h2
-rw-r--r--applications/dolphin/passport/passport.c32
-rw-r--r--applications/dolphin/scenes/assets/items.c16
-rw-r--r--applications/dolphin/scenes/scene.h6
-rw-r--r--applications/dolphin/scenes/scene_gfx.c28
8 files changed, 74 insertions, 72 deletions
diff --git a/applications/dolphin/dolphin.c b/applications/dolphin/dolphin.c
index 2d221601..de2ee320 100644
--- a/applications/dolphin/dolphin.c
+++ b/applications/dolphin/dolphin.c
@@ -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);
diff --git a/applications/dolphin/dolphin_i.h b/applications/dolphin/dolphin_i.h
index 2e700363..ccddf802 100644
--- a/applications/dolphin/dolphin_i.h
+++ b/applications/dolphin/dolphin_i.h
@@ -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);
diff --git a/applications/dolphin/dolphin_views.c b/applications/dolphin/dolphin_views.c
index 44022e6c..387a9f8e 100644
--- a/applications/dolphin/dolphin_views.c
+++ b/applications/dolphin/dolphin_views.c
@@ -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) {
diff --git a/applications/dolphin/dolphin_views.h b/applications/dolphin/dolphin_views.h
index da162063..8987d829 100644
--- a/applications/dolphin/dolphin_views.h
+++ b/applications/dolphin/dolphin_views.h
@@ -45,7 +45,7 @@ typedef struct {
} DolphinViewLockMenuModel;
typedef struct {
- Icon* animation;
+ IconAnimation* animation;
uint8_t scene_num;
uint8_t hint_timeout;
bool locked;
diff --git a/applications/dolphin/passport/passport.c b/applications/dolphin/passport/passport.c
index c5803bee..53b97ba0 100644
--- a/applications/dolphin/passport/passport.c
+++ b/applications/dolphin/passport/passport.c
@@ -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);
diff --git a/applications/dolphin/scenes/assets/items.c b/applications/dolphin/scenes/assets/items.c
index 4426d3a3..b23e0b1d 100644
--- a/applications/dolphin/scenes/assets/items.c
+++ b/applications/dolphin/scenes/assets/items.c
@@ -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) {
diff --git a/applications/dolphin/scenes/scene.h b/applications/dolphin/scenes/scene.h
index a1b4c1d4..a803eeed 100644
--- a/applications/dolphin/scenes/scene.h
+++ b/applications/dolphin/scenes/scene.h
@@ -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;
diff --git a/applications/dolphin/scenes/scene_gfx.c b/applications/dolphin/scenes/scene_gfx.c
index f07c2efd..0d279345 100644
--- a/applications/dolphin/scenes/scene_gfx.c
+++ b/applications/dolphin/scenes/scene_gfx.c
@@ -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,