buffybox/shared/header.c

89 lines
2.8 KiB
C
Raw Normal View History

/**
* Copyright 2025 buffybox contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#include "header.h"
void bbx_header_init_config(bbx_header_config_t *config) {
config->show_theme_toggle = true;
config->show_keyboard_toggle = true;
config->show_layout_dropdown = true;
config->show_shutdown_button = true;
config->dropdown_options = "Option 1\nOption 2\nOption 3";
config->dropdown_width = 90;
config->theme_symbol = LV_SYMBOL_SETTINGS;
config->keyboard_symbol = LV_SYMBOL_KEYBOARD;
config->shutdown_symbol = LV_SYMBOL_POWER;
}
lv_obj_t *bbx_header_create(lv_obj_t *parent, bbx_header_config_t *config, bbx_header_widgets_t *widgets) {
lv_memzero(widgets, sizeof(bbx_header_widgets_t));
/* Create header flexbox */
lv_obj_t *header = lv_obj_create(parent);
widgets->header = header;
/* Theme toggle button */
if (config->show_theme_toggle) {
lv_obj_t *btn = lv_button_create(header);
widgets->theme_toggle_btn = btn;
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, config->theme_symbol);
lv_obj_center(label);
}
/* Keyboard toggle button */
if (config->show_keyboard_toggle) {
lv_obj_t *btn = lv_button_create(header);
widgets->keyboard_toggle_btn = btn;
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, config->keyboard_symbol);
lv_obj_center(label);
}
/* Layout dropdown */
if (config->show_layout_dropdown) {
lv_obj_t *dropdown = lv_dropdown_create(header);
widgets->layout_dropdown = dropdown;
lv_dropdown_set_options(dropdown, config->dropdown_options);
lv_obj_set_width(dropdown, config->dropdown_width);
}
/* Spacer */
lv_obj_t *spacer = lv_obj_create(header);
lv_obj_set_height(spacer, 0);
lv_obj_set_flex_grow(spacer, 1);
/* Shutdown button */
if (config->show_shutdown_button) {
lv_obj_t *btn = lv_button_create(header);
widgets->shutdown_btn = btn;
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, config->shutdown_symbol);
lv_obj_center(label);
}
/* Size buttons to match dropdown height */
if (widgets->layout_dropdown) {
lv_obj_update_layout(widgets->layout_dropdown);
const int32_t dropdown_height = lv_obj_get_height(widgets->layout_dropdown);
if (widgets->theme_toggle_btn) {
lv_obj_set_size(widgets->theme_toggle_btn, dropdown_height, dropdown_height);
}
if (widgets->keyboard_toggle_btn) {
lv_obj_set_size(widgets->keyboard_toggle_btn, dropdown_height, dropdown_height);
}
if (widgets->shutdown_btn) {
lv_obj_set_size(widgets->shutdown_btn, dropdown_height, dropdown_height);
}
}
return header;
}