#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)
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);