[FL-1995] New dolphin animations (part 1) (#835)

* Desktop Animation (part 1): Ugly naked ohmygod architecture
* fix butthurt, fix locked scene
* Change SD icons, fixes
* Fix level update animation
* Fixes, correct butthurt
* Clean up code
* furi_assert(0) -> furi_crash("msg")
* Gui: rename none layer to desktop, update docs.

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Albert Kharisov
2021-11-24 20:21:12 +04:00
committed by GitHub
parent 92c499b41b
commit 9b8a139e2b
235 changed files with 1869 additions and 661 deletions

View File

@@ -134,10 +134,10 @@ void gui_redraw_status_bar(Gui* gui) {
}
}
bool gui_redraw_normal(Gui* gui) {
bool gui_redraw_window(Gui* gui) {
canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal);
canvas_frame_set(gui->canvas, GUI_MAIN_X, GUI_MAIN_Y, GUI_MAIN_WIDTH, GUI_MAIN_HEIGHT);
ViewPort* view_port = gui_view_port_find_enabled(gui->layers[GuiLayerMain]);
canvas_frame_set(gui->canvas, GUI_WINDOW_X, GUI_WINDOW_Y, GUI_WINDOW_WIDTH, GUI_WINDOW_HEIGHT);
ViewPort* view_port = gui_view_port_find_enabled(gui->layers[GuiLayerWindow]);
if(view_port) {
view_port_draw(view_port, gui->canvas);
return true;
@@ -145,10 +145,10 @@ bool gui_redraw_normal(Gui* gui) {
return false;
}
bool gui_redraw_none(Gui* gui) {
bool gui_redraw_desktop(Gui* gui) {
canvas_set_orientation(gui->canvas, CanvasOrientationHorizontal);
canvas_frame_set(gui->canvas, GUI_MAIN_X, GUI_MAIN_Y, GUI_MAIN_WIDTH, GUI_MAIN_HEIGHT);
ViewPort* view_port = gui_view_port_find_enabled(gui->layers[GuiLayerNone]);
canvas_frame_set(gui->canvas, GUI_WINDOW_X, GUI_WINDOW_Y, GUI_WINDOW_WIDTH, GUI_WINDOW_HEIGHT);
ViewPort* view_port = gui_view_port_find_enabled(gui->layers[GuiLayerDesktop]);
if(view_port) {
view_port_draw(view_port, gui->canvas);
return true;
@@ -164,8 +164,8 @@ void gui_redraw(Gui* gui) {
canvas_reset(gui->canvas);
if(!gui_redraw_fs(gui)) {
if(!gui_redraw_normal(gui)) {
gui_redraw_none(gui);
if(!gui_redraw_window(gui)) {
gui_redraw_desktop(gui);
}
gui_redraw_status_bar(gui);
}
@@ -203,8 +203,8 @@ void gui_input(Gui* gui, InputEvent* input_event) {
gui_lock(gui);
ViewPort* view_port = gui_view_port_find_enabled(gui->layers[GuiLayerFullscreen]);
if(!view_port) view_port = gui_view_port_find_enabled(gui->layers[GuiLayerMain]);
if(!view_port) view_port = gui_view_port_find_enabled(gui->layers[GuiLayerNone]);
if(!view_port) view_port = gui_view_port_find_enabled(gui->layers[GuiLayerWindow]);
if(!view_port) view_port = gui_view_port_find_enabled(gui->layers[GuiLayerDesktop]);
if(!(gui->ongoing_input & ~key_bit) && input_event->type == InputTypePress) {
gui->ongoing_input_view_port = view_port;

View File

@@ -14,12 +14,14 @@ extern "C" {
/** Gui layers */
typedef enum {
GuiLayerNone, /**< Special layer for internal use only */
GuiLayerDesktop, /**< Desktop layer for internal use. Like fullscreen but with status bar */
GuiLayerWindow, /**< Window layer, status bar is shown */
GuiLayerStatusBarLeft, /**< Status bar left-side layer, auto-layout */
GuiLayerStatusBarRight, /**< Status bar right-side layer, auto-layout */
GuiLayerMain, /**< Main layer, status bar is shown */
GuiLayerFullscreen, /**< Fullscreen layer */
GuiLayerFullscreen, /**< Fullscreen layer, no status bar */
GuiLayerMAX /**< Don't use or move, special value */
} GuiLayer;

View File

@@ -25,10 +25,10 @@
#define GUI_STATUS_BAR_WIDTH GUI_DISPLAY_WIDTH
#define GUI_STATUS_BAR_HEIGHT 13
#define GUI_MAIN_X 0
#define GUI_MAIN_Y 9
#define GUI_MAIN_WIDTH GUI_DISPLAY_WIDTH
#define GUI_MAIN_HEIGHT (GUI_DISPLAY_HEIGHT - GUI_MAIN_Y)
#define GUI_WINDOW_X 0
#define GUI_WINDOW_Y GUI_STATUS_BAR_HEIGHT
#define GUI_WINDOW_WIDTH GUI_DISPLAY_WIDTH
#define GUI_WINDOW_HEIGHT (GUI_DISPLAY_HEIGHT - GUI_WINDOW_Y)
#define GUI_THREAD_FLAG_DRAW (1 << 0)
#define GUI_THREAD_FLAG_INPUT (1 << 1)

View File

@@ -62,6 +62,7 @@ void icon_animation_start(IconAnimation* instance) {
furi_assert(instance);
if(!instance->animating) {
instance->animating = true;
furi_assert(instance->icon->frame_rate);
furi_check(
xTimerChangePeriod(
instance->timer, (osKernelGetTickFreq() / instance->icon->frame_rate), 0) ==

View File

@@ -199,12 +199,12 @@ void view_dispatcher_attach_to_gui(
furi_assert(view_dispatcher->gui == NULL);
furi_assert(gui);
if(type == ViewDispatcherTypeNone) {
gui_add_view_port(gui, view_dispatcher->view_port, GuiLayerNone);
if(type == ViewDispatcherTypeDesktop) {
gui_add_view_port(gui, view_dispatcher->view_port, GuiLayerDesktop);
} else if(type == ViewDispatcherTypeWindow) {
gui_add_view_port(gui, view_dispatcher->view_port, GuiLayerWindow);
} else if(type == ViewDispatcherTypeFullscreen) {
gui_add_view_port(gui, view_dispatcher->view_port, GuiLayerFullscreen);
} else if(type == ViewDispatcherTypeWindow) {
gui_add_view_port(gui, view_dispatcher->view_port, GuiLayerMain);
} else {
furi_check(NULL);
}

View File

@@ -15,9 +15,9 @@ extern "C" {
/** ViewDispatcher view_port placement */
typedef enum {
ViewDispatcherTypeNone, /**< Special layer for internal use only */
ViewDispatcherTypeWindow, /**< Main view_port layer, status bar is shown */
ViewDispatcherTypeFullscreen /**< Fullscreen view_port layer */
ViewDispatcherTypeDesktop, /**< Desktop layer: fullscreen with status bar on top of it. For internal usage. */
ViewDispatcherTypeWindow, /**< Window layer: with status bar */
ViewDispatcherTypeFullscreen /**< Fullscreen layer: without status bar */
} ViewDispatcherType;
typedef struct ViewDispatcher ViewDispatcher;