text/plain
•
1.94 KB
•
61 lines
#include "breakout_screen.h"
#include "../../topbar.h"
#include <stdlib.h>
static void back_btn_event_cb(lv_event_t *e) {
lv_event_code_t code = lv_event_get_code(e);
if (code == LV_EVENT_CLICKED) {
navigate_to(SCREEN_GAMES);
}
}
static void cancel_event_cb(lv_event_t *e) {
(void)e;
navigate_to(SCREEN_GAMES);
}
ui_state_t setup_breakout_screen(void) {
breakout_screen_state_t *state = calloc(1, sizeof(breakout_screen_state_t));
topbar_set_title("Breakout");
// Create subtitle label centered (offset for topbar)
state->subtitle_label = lv_label_create(lv_screen_active());
lv_label_set_text(state->subtitle_label, "Coming Soon");
lv_obj_align(state->subtitle_label, LV_ALIGN_CENTER, 0, TOPBAR_H / 2);
// Create back button at bottom
state->back_btn = lv_button_create(lv_screen_active());
lv_obj_align(state->back_btn, LV_ALIGN_BOTTOM_MID, 0, -8);
lv_obj_add_event_cb(state->back_btn, back_btn_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_add_event_cb(state->back_btn, cancel_event_cb, LV_EVENT_CANCEL, NULL);
lv_obj_set_size(state->back_btn, 80, 26);
lv_obj_set_style_bg_color(state->back_btn, lv_color_hex(0x0288D1), 0);
lv_obj_t *back_label = lv_label_create(state->back_btn);
lv_label_set_text(back_label, "Back");
lv_obj_center(back_label);
// Add button to group for keyboard navigation
lv_group_add_obj(lv_group_get_default(), state->back_btn);
lv_group_focus_obj(state->back_btn);
return (ui_state_t){.type = SCREEN_BREAKOUT, .breakout = state};
}
void free_breakout_screen(breakout_screen_state_t *state) {
if (!state) return;
// Remove from group before deleting
lv_group_remove_obj(state->back_btn);
// Delete all widgets
lv_obj_delete(state->subtitle_label);
lv_obj_delete(state->back_btn);
free(state);
}
void update_breakout_screen(breakout_screen_state_t *state) {
(void)state; // LVGL handles updates via timer
}