Code Cleanup & Basic Input System
This commit is contained in:
parent
7563a8c587
commit
9836198e38
3 changed files with 44 additions and 30 deletions
|
@ -11,24 +11,14 @@ int32_t flippypass_app(void* p) {
|
||||||
uiManager* ui = ui_create();
|
uiManager* ui = ui_create();
|
||||||
|
|
||||||
// Drawwing the UI
|
// Drawwing the UI
|
||||||
InputEvent event;
|
|
||||||
while(ui->running) {
|
while(ui->running) {
|
||||||
// Getting the input event
|
// Do we want to quit?
|
||||||
FuriStatus status = furi_message_queue_get(ui->event_queue, &event, 100);
|
if (ui->input == Back) {
|
||||||
furi_mutex_acquire(ui->mutex, FuriWaitForever);
|
ui->running = false;
|
||||||
|
|
||||||
if (status == FuriStatusOk) {
|
|
||||||
if (event.key == InputKeyBack) {
|
|
||||||
ui->running = false;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
FURI_LOG_D(TAG, "Event Timeout");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Updating canvas
|
// Updating canvas
|
||||||
view_port_update(ui->canvas);
|
view_port_update(ui->canvas);
|
||||||
furi_mutex_release(ui->mutex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
|
|
43
project/ui.c
43
project/ui.c
|
@ -16,23 +16,42 @@ uiManager* ui_create() {
|
||||||
// Creating a canvas
|
// Creating a canvas
|
||||||
result->canvas = view_port_alloc();
|
result->canvas = view_port_alloc();
|
||||||
view_port_draw_callback_set(result->canvas, ui_draw, result);
|
view_port_draw_callback_set(result->canvas, ui_draw, result);
|
||||||
|
view_port_input_callback_set(result->canvas, ui_input, result);
|
||||||
gui_add_view_port(result->gui, result->canvas, GuiLayerFullscreen);
|
gui_add_view_port(result->gui, result->canvas, GuiLayerFullscreen);
|
||||||
|
|
||||||
// Creating mutex
|
|
||||||
result->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
|
|
||||||
if (!result->mutex) {
|
|
||||||
FURI_LOG_E(TAG, "Failed to create Mutex\r\n");
|
|
||||||
free(result);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creating event queue
|
|
||||||
result->event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));
|
|
||||||
|
|
||||||
// Returning the UI Manager
|
// Returning the UI Manager
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ui_input(InputEvent* event, void* ctx) {
|
||||||
|
// Turning the context back into the UI Manager
|
||||||
|
uiManager* manager = (uiManager*)ctx;
|
||||||
|
|
||||||
|
// Getting input
|
||||||
|
switch(event->key) {
|
||||||
|
case InputKeyUp:
|
||||||
|
manager->input = Up;
|
||||||
|
break;
|
||||||
|
case InputKeyDown:
|
||||||
|
manager->input = Down;
|
||||||
|
break;
|
||||||
|
case InputKeyLeft:
|
||||||
|
manager->input = Left;
|
||||||
|
break;
|
||||||
|
case InputKeyRight:
|
||||||
|
manager->input = Right;
|
||||||
|
break;
|
||||||
|
case InputKeyOk:
|
||||||
|
manager->input = Ok;
|
||||||
|
break;
|
||||||
|
case InputKeyBack:
|
||||||
|
manager->input = Back;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ui_draw(Canvas* canvas, void* ctx) {
|
void ui_draw(Canvas* canvas, void* ctx) {
|
||||||
// Showing the Main Menu
|
// Showing the Main Menu
|
||||||
ui_p_mainmenu(canvas);
|
ui_p_mainmenu(canvas);
|
||||||
|
@ -67,11 +86,9 @@ void ui_p_mainmenu(Canvas* canvas) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ui_delete(uiManager* manager) {
|
void ui_delete(uiManager* manager) {
|
||||||
furi_message_queue_free(manager->event_queue);
|
|
||||||
view_port_enabled_set(manager->canvas, false);
|
view_port_enabled_set(manager->canvas, false);
|
||||||
gui_remove_view_port(manager->gui, manager->canvas);
|
gui_remove_view_port(manager->gui, manager->canvas);
|
||||||
view_port_free(manager->canvas);
|
view_port_free(manager->canvas);
|
||||||
furi_record_close(RECORD_GUI);
|
furi_record_close(RECORD_GUI);
|
||||||
furi_mutex_free(manager->mutex);
|
|
||||||
free(manager);
|
free(manager);
|
||||||
}
|
}
|
15
project/ui.h
15
project/ui.h
|
@ -9,12 +9,19 @@
|
||||||
|
|
||||||
// Structures
|
// Structures
|
||||||
typedef struct {
|
typedef struct {
|
||||||
FuriMessageQueue* event_queue;
|
|
||||||
FuriMutex* mutex;
|
|
||||||
ViewPort* canvas;
|
ViewPort* canvas;
|
||||||
Gui* gui;
|
Gui* gui;
|
||||||
int page;
|
enum ui_input {
|
||||||
|
Up,
|
||||||
|
Down,
|
||||||
|
Left,
|
||||||
|
Right,
|
||||||
|
|
||||||
|
Ok,
|
||||||
|
Back
|
||||||
|
} input;
|
||||||
|
|
||||||
|
int page;
|
||||||
bool running;
|
bool running;
|
||||||
} uiManager;
|
} uiManager;
|
||||||
|
|
||||||
|
@ -22,7 +29,7 @@ typedef struct {
|
||||||
uiManager* ui_create();
|
uiManager* ui_create();
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
void ui_timer(void* event_queue);
|
void ui_input(InputEvent* event, void* ctx);
|
||||||
|
|
||||||
void ui_draw(Canvas* canvas, void* ctx);
|
void ui_draw(Canvas* canvas, void* ctx);
|
||||||
void ui_p_mainmenu(Canvas* canvas);
|
void ui_p_mainmenu(Canvas* canvas);
|
||||||
|
|
Loading…
Reference in a new issue