[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:
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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)
|
||||
|
@@ -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) ==
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user