]> git.lizzy.rs Git - nothing.git/blob - src/ui/list_selector.c
(#606) Implement ListSelector ctor/dtor
[nothing.git] / src / ui / list_selector.c
1 #include <stdlib.h>
2
3 #include <SDL2/SDL.h>
4
5 #include "system/stacktrace.h"
6 #include "system/lt.h"
7 #include "system/nth_alloc.h"
8 #include "system/str.h"
9 #include "math/point.h"
10
11 #include "./list_selector.h"
12
13 struct ListSelector
14 {
15     Lt *lt;
16     const char **items;
17     size_t count;
18     Vec positiion;
19     float width;
20 };
21
22 ListSelector *create_list_selector(const char **items,
23                                    size_t count,
24                                    Vec positiion,
25                                    float width)
26 {
27     trace_assert(items);
28
29     Lt *lt = create_lt();
30     if (lt == NULL) {
31         return NULL;
32     }
33
34     ListSelector *list_selector = PUSH_LT(lt, nth_alloc(sizeof(ListSelector)), free);
35     if (list_selector == NULL) {
36         RETURN_LT(lt, NULL);
37     }
38     list_selector->lt = lt;
39
40     list_selector->items = PUSH_LT(lt, nth_calloc(count, sizeof(const char*)), free);
41     if (list_selector->items == NULL) {
42         RETURN_LT(lt, NULL);
43     }
44
45     for (size_t i = 0; i < count; ++i) {
46         list_selector->items[i] = PUSH_LT(lt, string_duplicate(list_selector->items[i], NULL), free);
47         if (list_selector->items[i] == NULL) {
48             RETURN_LT(lt, NULL);
49         }
50     }
51
52     list_selector->count = count;
53     list_selector->positiion = positiion;
54     list_selector->width = width;
55
56     return list_selector;
57 }
58
59 void destroy_list_selector(ListSelector *list_selector)
60 {
61     trace_assert(list_selector);
62     RETURN_LT0(list_selector->lt);
63 }
64
65 int list_selector_render(const ListSelector *list_selector, SDL_Renderer *renderer)
66 {
67     trace_assert(list_selector);
68     trace_assert(renderer);
69     return 0;
70 }
71
72 int list_selector_update(ListSelector *list_selector, float delta_time)
73 {
74     trace_assert(list_selector);
75     (void) delta_time;
76
77     return 0;
78 }
79
80 int list_selector_event(ListSelector *list_selector, const SDL_Event *event)
81 {
82     trace_assert(list_selector);
83     trace_assert(event);
84     return 0;
85 }
86
87 const char *list_selector_selected(const ListSelector *list_selector)
88 {
89     trace_assert(list_selector);
90     return NULL;
91 }