File: header.c

package info (click to toggle)
buffybox 3.4.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 108,056 kB
  • sloc: ansic: 357,060; cpp: 42,613; python: 10,534; xml: 1,214; sh: 823; asm: 665; ruby: 487; makefile: 66
file content (88 lines) | stat: -rw-r--r-- 2,876 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
 * 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;
}