]> git.lizzy.rs Git - nothing.git/commitdiff
(#606) Implement ListSelector ctor/dtor
authorrexim <reximkut@gmail.com>
Sat, 9 Mar 2019 17:12:57 +0000 (00:12 +0700)
committerrexim <reximkut@gmail.com>
Sat, 9 Mar 2019 17:12:57 +0000 (00:12 +0700)
src/ui/list_selector.c
src/ui/list_selector.h

index bb871d0fcf532c8855cc164031013e50ca5efe18..69ea8127b07e5233a5cf1a6280082a3037503c2e 100644 (file)
@@ -3,22 +3,63 @@
 #include <SDL2/SDL.h>
 
 #include "system/stacktrace.h"
+#include "system/lt.h"
+#include "system/nth_alloc.h"
+#include "system/str.h"
 #include "math/point.h"
+
 #include "./list_selector.h"
 
+struct ListSelector
+{
+    Lt *lt;
+    const char **items;
+    size_t count;
+    Vec positiion;
+    float width;
+};
+
 ListSelector *create_list_selector(const char **items,
                                    size_t count,
-                                   Vec positiion)
+                                   Vec positiion,
+                                   float width)
 {
     trace_assert(items);
-    (void) count;
-    (void) positiion;
-    return NULL;
+
+    Lt *lt = create_lt();
+    if (lt == NULL) {
+        return NULL;
+    }
+
+    ListSelector *list_selector = PUSH_LT(lt, nth_alloc(sizeof(ListSelector)), free);
+    if (list_selector == NULL) {
+        RETURN_LT(lt, NULL);
+    }
+    list_selector->lt = lt;
+
+    list_selector->items = PUSH_LT(lt, nth_calloc(count, sizeof(const char*)), free);
+    if (list_selector->items == NULL) {
+        RETURN_LT(lt, NULL);
+    }
+
+    for (size_t i = 0; i < count; ++i) {
+        list_selector->items[i] = PUSH_LT(lt, string_duplicate(list_selector->items[i], NULL), free);
+        if (list_selector->items[i] == NULL) {
+            RETURN_LT(lt, NULL);
+        }
+    }
+
+    list_selector->count = count;
+    list_selector->positiion = positiion;
+    list_selector->width = width;
+
+    return list_selector;
 }
 
 void destroy_list_selector(ListSelector *list_selector)
 {
     trace_assert(list_selector);
+    RETURN_LT0(list_selector->lt);
 }
 
 int list_selector_render(const ListSelector *list_selector, SDL_Renderer *renderer)
index 639b20949d8f50a5ccb86c44bc3cd790fc6b0aff..c6820a4cb92d9a38a944de1215758240447f6ba3 100644 (file)
@@ -5,7 +5,8 @@ typedef struct ListSelector ListSelector;
 
 ListSelector *create_list_selector(const char **items,
                                    size_t count,
-                                   Vec positiion);
+                                   Vec positiion,
+                                   float width);
 void destroy_list_selector(ListSelector *list_selector);
 
 int list_selector_render(const ListSelector *list_selector, SDL_Renderer *renderer);