[wip] change gui/widget api
This commit is contained in:
parent
f2a38cf174
commit
19ef348c80
@ -22,48 +22,32 @@ struct GUI {
|
|||||||
WidgetArray_t widgets_dialog;
|
WidgetArray_t widgets_dialog;
|
||||||
};
|
};
|
||||||
|
|
||||||
void gui_widget_status_bar_add(GUI* gui, Widget* widget) {
|
void gui_add_widget(GUI* gui, Widget* widget, WidgetLayer layer) {
|
||||||
|
WidgetArray_t* widget_array = NULL;
|
||||||
|
|
||||||
|
switch(layer) {
|
||||||
|
case WidgetLayerStatusBar:
|
||||||
|
widget_array = &gui->widgets_status_bar;
|
||||||
|
break;
|
||||||
|
case WidgetLayerMain:
|
||||||
|
widget_array = &gui->widgets;
|
||||||
|
break;
|
||||||
|
case WidgetLayerFullscreen:
|
||||||
|
widget_array = &gui->widgets_fs;
|
||||||
|
break;
|
||||||
|
case WidgetLayerDialog:
|
||||||
|
widget_array = &gui->widgets_dialog;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
assert(gui);
|
assert(gui);
|
||||||
assert(widget);
|
assert(widget);
|
||||||
|
assert(widget_array);
|
||||||
|
|
||||||
gui_event_lock(gui->event);
|
gui_event_lock(gui->event);
|
||||||
WidgetArray_push_back(gui->widgets_status_bar, widget);
|
WidgetArray_push_back(widget_array, widget);
|
||||||
widget_gui_set(widget, gui);
|
|
||||||
gui_event_unlock(gui->event);
|
|
||||||
|
|
||||||
gui_update(gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gui_widget_add(GUI* gui, Widget* widget) {
|
|
||||||
assert(gui);
|
|
||||||
assert(widget);
|
|
||||||
|
|
||||||
gui_event_lock(gui->event);
|
|
||||||
WidgetArray_push_back(gui->widgets, widget);
|
|
||||||
widget_gui_set(widget, gui);
|
|
||||||
gui_event_unlock(gui->event);
|
|
||||||
|
|
||||||
gui_update(gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gui_widget_fs_add(GUI* gui, Widget* widget) {
|
|
||||||
assert(gui);
|
|
||||||
assert(widget);
|
|
||||||
|
|
||||||
gui_event_lock(gui->event);
|
|
||||||
WidgetArray_push_back(gui->widgets_fs, widget);
|
|
||||||
widget_gui_set(widget, gui);
|
|
||||||
gui_event_unlock(gui->event);
|
|
||||||
|
|
||||||
gui_update(gui);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gui_widget_dialog_add(GUI* gui, Widget* widget) {
|
|
||||||
assert(gui);
|
|
||||||
assert(widget);
|
|
||||||
|
|
||||||
gui_event_lock(gui->event);
|
|
||||||
WidgetArray_push_back(gui->widgets_dialog, widget);
|
|
||||||
widget_gui_set(widget, gui);
|
widget_gui_set(widget, gui);
|
||||||
gui_event_unlock(gui->event);
|
gui_event_unlock(gui->event);
|
||||||
|
|
||||||
@ -148,8 +132,10 @@ GUI* gui_alloc() {
|
|||||||
WidgetArray_init(gui->widgets);
|
WidgetArray_init(gui->widgets);
|
||||||
WidgetArray_init(gui->widgets_fs);
|
WidgetArray_init(gui->widgets_fs);
|
||||||
WidgetArray_init(gui->widgets_dialog);
|
WidgetArray_init(gui->widgets_dialog);
|
||||||
|
|
||||||
// Event dispatcher
|
// Event dispatcher
|
||||||
gui->event = gui_event_alloc();
|
gui->event = gui_event_alloc();
|
||||||
|
|
||||||
// Drawing canvas
|
// Drawing canvas
|
||||||
gui->canvas = canvas_alloc();
|
gui->canvas = canvas_alloc();
|
||||||
|
|
||||||
@ -158,12 +144,20 @@ GUI* gui_alloc() {
|
|||||||
|
|
||||||
void gui_task(void* p) {
|
void gui_task(void* p) {
|
||||||
GUI* gui = gui_alloc();
|
GUI* gui = gui_alloc();
|
||||||
|
|
||||||
|
GuiApi gui_api = {
|
||||||
|
.add_widget = gui_add_widget,
|
||||||
|
.gui = gui,
|
||||||
|
};
|
||||||
|
|
||||||
// Create FURI record
|
// Create FURI record
|
||||||
if(!furi_create_deprecated("gui", gui, sizeof(gui))) {
|
if(!furi_create("gui", &gui_api)) {
|
||||||
printf("[gui_task] cannot create the gui record\n");
|
printf("[gui_task] cannot create the gui record\n");
|
||||||
furiac_exit(NULL);
|
furiac_exit(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
furiac_ready();
|
furiac_ready();
|
||||||
|
|
||||||
// Forever dispatch
|
// Forever dispatch
|
||||||
while(1) {
|
while(1) {
|
||||||
GUIMessage message = gui_event_message_next(gui->event);
|
GUIMessage message = gui_event_message_next(gui->event);
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "widget.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
WidgetLayerStatusBar,
|
||||||
|
WidgetLayerMain,
|
||||||
|
WidgetLayerFullscreen,
|
||||||
|
WidgetLayerDialog
|
||||||
|
} WidgetLayer;
|
||||||
|
|
||||||
typedef struct Widget Widget;
|
typedef struct Widget Widget;
|
||||||
typedef struct GUI GUI;
|
typedef struct GUI GUI;
|
||||||
|
|
||||||
void gui_widget_status_bar_add(GUI* gui, Widget* widget);
|
typedef struct {
|
||||||
|
void (*add_widget)(GUI* gui, Widget* widget, WidgetLayer layer);
|
||||||
void gui_widget_add(GUI* gui, Widget* widget);
|
GUI* gui;
|
||||||
|
} GuiApi;
|
||||||
void gui_widget_fs_add(GUI* gui, Widget* widget);
|
|
||||||
|
|
||||||
void gui_widget_dialog_add(GUI* gui, Widget* widget);
|
|
||||||
|
@ -7,15 +7,6 @@
|
|||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "gui_i.h"
|
#include "gui_i.h"
|
||||||
|
|
||||||
struct Widget {
|
|
||||||
void* gui;
|
|
||||||
bool is_enabled;
|
|
||||||
WidgetDrawCallback draw_callback;
|
|
||||||
void* draw_callback_context;
|
|
||||||
WidgetInputCallback input_callback;
|
|
||||||
void* input_callback_context;
|
|
||||||
};
|
|
||||||
|
|
||||||
Widget* widget_alloc(WidgetDrawCallback callback, void* callback_context) {
|
Widget* widget_alloc(WidgetDrawCallback callback, void* callback_context) {
|
||||||
Widget* widget = furi_alloc(sizeof(Widget));
|
Widget* widget = furi_alloc(sizeof(Widget));
|
||||||
widget->is_enabled = true;
|
widget->is_enabled = true;
|
||||||
|
@ -4,7 +4,15 @@
|
|||||||
|
|
||||||
typedef struct GUI GUI;
|
typedef struct GUI GUI;
|
||||||
typedef struct Canvas Canvas;
|
typedef struct Canvas Canvas;
|
||||||
typedef struct Widget Widget;
|
|
||||||
|
typedef struct {
|
||||||
|
void* gui;
|
||||||
|
bool is_enabled;
|
||||||
|
WidgetDrawCallback draw_callback;
|
||||||
|
void* draw_callback_context;
|
||||||
|
WidgetInputCallback input_callback;
|
||||||
|
void* input_callback_context;
|
||||||
|
} Widget;
|
||||||
|
|
||||||
typedef void (*WidgetDrawCallback)(Canvas* canvas, void* context);
|
typedef void (*WidgetDrawCallback)(Canvas* canvas, void* context);
|
||||||
typedef void (*WidgetInputCallback)(InputEvent* event, void* context);
|
typedef void (*WidgetInputCallback)(InputEvent* event, void* context);
|
||||||
|
Loading…
Reference in New Issue
Block a user