Aleksandr Kutuzov 5 лет назад
Родитель
Сommit
f0800e579f

+ 16 - 21
applications/gui/gui.c

@@ -15,6 +15,7 @@
 ARRAY_DEF(WidgetArray, Widget*, M_PTR_OPLIST);
 
 struct Gui {
+    GuiApi api;
     GuiEvent* event;
     CanvasApi* canvas_api;
     WidgetArray_t widgets_status_bar;
@@ -25,39 +26,37 @@ struct Gui {
 
 void gui_add_widget(GuiApi* gui_api, Widget* widget, WidgetLayer layer) {
     assert(gui_api);
-    assert(gui_api->gui);
+    assert(widget);
+    Gui* gui = (Gui*)gui_api;
 
     // TODO add mutex on widget array
-
     WidgetArray_t* widget_array = NULL;
 
     switch(layer) {
     case WidgetLayerStatusBar:
-        widget_array = &gui_api->gui->widgets_status_bar;
+        widget_array = &gui->widgets_status_bar;
         break;
     case WidgetLayerMain:
-        widget_array = &gui_api->gui->widgets;
+        widget_array = &gui->widgets;
         break;
     case WidgetLayerFullscreen:
-        widget_array = &gui_api->gui->widgets_fs;
+        widget_array = &gui->widgets_fs;
         break;
     case WidgetLayerDialog:
-        widget_array = &gui_api->gui->widgets_dialog;
+        widget_array = &gui->widgets_dialog;
         break;
-
     default:
         break;
     }
 
-    assert(widget);
     assert(widget_array);
 
-    gui_event_lock(gui_api->gui->event);
-    WidgetArray_push_back((struct WidgetArray_s*)widget_array, widget);
-    widget_gui_set(widget, gui_api->gui);
-    gui_event_unlock(gui_api->gui->event);
+    gui_event_lock(gui->event);
+    WidgetArray_push_back(*widget_array, widget);
+    widget_gui_set(widget, gui);
+    gui_event_unlock(gui->event);
 
-    gui_update(gui_api->gui);
+    gui_update(gui);
 }
 
 void gui_update(Gui* gui) {
@@ -133,6 +132,7 @@ void gui_input(Gui* gui, InputEvent* input_event) {
 
 Gui* gui_alloc() {
     Gui* gui = furi_alloc(sizeof(Gui));
+
     // Initialize widget arrays
     WidgetArray_init(gui->widgets_status_bar);
     WidgetArray_init(gui->widgets);
@@ -143,22 +143,17 @@ Gui* gui_alloc() {
     gui->event = gui_event_alloc();
 
     // Drawing canvas api
-
     gui->canvas_api = canvas_api_init();
 
+    gui->api.add_widget = gui_add_widget;
+
     return gui;
 }
 
 void gui_task(void* p) {
     Gui* gui = gui_alloc();
-
-    GuiApi gui_api = {
-        .add_widget = gui_add_widget,
-        .gui = gui,
-    };
-
     // Create FURI record
-    if(!furi_create("gui", &gui_api)) {
+    if(!furi_create("gui", gui)) {
         printf("[gui_task] cannot create the gui record\n");
         furiac_exit(NULL);
     }

+ 2 - 6
applications/gui/gui.h

@@ -11,12 +11,8 @@ typedef enum {
 } WidgetLayer;
 
 typedef struct Widget Widget;
-typedef struct Gui Gui;
 
-struct _GuiApi;
-typedef struct _GuiApi GuiApi;
-
-struct _GuiApi {
+typedef struct GuiApi GuiApi;
+struct GuiApi {
     void (*add_widget)(GuiApi* gui_api, Widget* widget, WidgetLayer layer);
-    Gui* gui;
 };

+ 2 - 0
applications/gui/gui_i.h

@@ -1,3 +1,5 @@
 #pragma once
 
+typedef struct Gui Gui;
+
 void gui_update(Gui* gui);

+ 1 - 1
applications/gui/widget.c

@@ -10,7 +10,7 @@
 // TODO add mutex to widget ops
 
 struct Widget {
-    void* gui;
+    Gui* gui;
     bool is_enabled;
     WidgetDrawCallback draw_callback;
     void* draw_callback_context;

+ 1 - 1
applications/gui/widget_i.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include "gui.h"
+#include "gui_i.h"
 
 void widget_gui_set(Widget* widget, Gui* gui);