~ruther/CTU-FEE-B0B35APO-Semestral-project

ref: 961a234628badb64f90926e84702cf195fc2622b CTU-FEE-B0B35APO-Semestral-project/lib-gui/src/gui_window_info.c -rw-r--r-- 1.6 KiB
961a2346 — František Boháček feat: add gui container info to store window create data 3 years ago
                                                                                
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
#include "gui_window_info.h"
#include "gui.h"
#include "gui_container_info.h"

bool gui_window_init_and_loop(gui_t *gui, void *state, window_info_t info,
                              gui_loop_running_fn loop_running,
                              gui_loop_job_fn job) {
  container_t containers[info.containers_count];
  window_t window = gui_window_create(containers, info.containers_count);

  uint32_t components_count = 0;
  for (int i = 0; i < info.containers_count; i++) {
    gui_container_info_t cinfo = info.containers[i];
    components_count += gui_container_info_get_components_count(cinfo);
  }

  component_t components[components_count];
  component_t *component_ptr = components;

  for (int i = 0; i < info.containers_count; i++) {
    gui_container_info_t cinfo = info.containers[i];

    uint16_t components_count = gui_container_info_get_components_count(cinfo);
    container_t container = gui_container_info_create(cinfo, component_ptr, components_count);
    gui_window_add_container(&window, container);

    component_ptr += components_count;
  }

  void *loop_state = info.construct(&window, state);

  window_t *prev_active_window = gui->active_window;

  gui->active_window = &window;
  gui_window_start_loop(gui, loop_running, job, loop_state);
  gui->active_window = prev_active_window;

  return true;
}

void gui_window_start_loop(gui_t *gui, gui_loop_running_fn loop_running,
                           gui_loop_job_fn job, void *loop_state) {
  while (loop_running(loop_state)) {
    commands_check_input(gui->commands);
    gui_update(gui);
    gui_render(gui);
    rgb_led_update(gui->pheripherals->rgb_leds);

    job(loop_state);
  }
}
Do not follow this link