Skip to content

Commit f524267

Browse files
committed
WIP
1 parent 99bf4de commit f524267

File tree

8 files changed

+39
-0
lines changed

8 files changed

+39
-0
lines changed

src/game/gui/component.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ component *component_find(component *c, int id) {
113113
return c->find(c, id);
114114
}
115115

116+
component *component_find_text(component *c, const char *text) {
117+
if(c->find_text != NULL) {
118+
return c->find_text(c, text);
119+
}
120+
return NULL;
121+
}
122+
116123
void component_set_obj(component *c, void *obj) {
117124
c->obj = obj;
118125
}

src/game/gui/component.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ typedef void (*component_tick_cb)(component *c);
2525
typedef void (*component_free_cb)(component *c);
2626
typedef void (*component_init_cb)(component *c, const gui_theme *theme);
2727
typedef component *(*component_find_cb)(component *c, int id);
28+
typedef component *(*component_find_text_cb)(component *c, const char *text);
2829

2930
/*! \brief Basic GUI object
3031
*
@@ -70,6 +71,7 @@ struct component {
7071
component_tick_cb tick; ///< Tick function callback. This is called periodically.
7172
component_free_cb free; ///< Free function callback. Any component callbacks should be done here.
7273
component_find_cb find; ///< Should only be set by widget and sizer. Used to look up widgets by ID.
74+
component_find_text_cb find_text; ///< ...
7375
component_init_cb init; ///< Initialization function callback. This is called right before layout function. This
7476
///< should be used to prerender elements, decide size hints, etc.
7577

@@ -121,5 +123,6 @@ void component_set_init_cb(component *c, component_init_cb cb);
121123
void component_set_tick_cb(component *c, component_tick_cb cb);
122124
void component_set_free_cb(component *c, component_free_cb cb);
123125
void component_set_find_cb(component *c, component_find_cb cb);
126+
void component_set_find_text_cb(component *c, component_find_cb cb);
124127

125128
#endif // COMPONENT_H

src/game/gui/sizer.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ typedef struct sizer {
1717
sizer_tick_cb tick;
1818
sizer_free_cb free;
1919
sizer_find_cb find;
20+
sizer_find_text_cb find_text;
2021
sizer_init_cb init;
2122
} sizer;
2223

@@ -109,6 +110,12 @@ void sizer_set_find_cb(component *c, sizer_find_cb cb) {
109110
local->find = cb;
110111
}
111112

113+
void sizer_set_find_text_cb(component *c, sizer_find_text_cb cb) {
114+
assert(c->header == SIZER_MAGIC);
115+
sizer *local = component_get_obj(c);
116+
local->find_text = cb;
117+
}
118+
112119
void sizer_set_init_cb(component *c, sizer_init_cb cb) {
113120
assert(c->header == SIZER_MAGIC);
114121
sizer *local = component_get_obj(c);

src/game/gui/sizer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ typedef void (*sizer_tick_cb)(component *c);
1212
typedef void (*sizer_init_cb)(component *c, const gui_theme *theme);
1313
typedef void (*sizer_free_cb)(component *c);
1414
typedef component *(*sizer_find_cb)(component *c, int id);
15+
typedef component *(*sizer_find_text_cb)(component *c, const char *text);
1516

1617
typedef struct sizer sizer;
1718

@@ -36,6 +37,7 @@ void sizer_set_tick_cb(component *c, sizer_tick_cb cb);
3637
void sizer_set_free_cb(component *c, sizer_free_cb cb);
3738
void sizer_set_init_cb(component *c, sizer_init_cb cb);
3839
void sizer_set_find_cb(component *c, sizer_find_cb cb);
40+
void sizer_set_find_text_cb(component *c, sizer_find_text_cb cb);
3941

4042
void sizer_attach(component *c, component *nc);
4143

src/game/gui/spritebutton.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ typedef struct spritebutton {
2525
spritebutton_click_cb click_cb;
2626
spritebutton_tick_cb tick_cb;
2727
spritebutton_focus_cb focus_cb;
28+
spritebutton_find_text_cb find_text_cb;
2829
bool free_userdata;
2930
void *userdata;
3031
} spritebutton;
@@ -71,6 +72,14 @@ static void spritebutton_tick(component *c) {
7172
}
7273
}
7374

75+
static component *spritebutton_find_text(component *c, const char *text) {
76+
spritebutton *b = widget_get_obj(c);
77+
if(strcmp(text_c(b->text), text) == 0) {
78+
return c;
79+
}
80+
return NULL;
81+
}
82+
7483
static void spritebutton_focus(component *c, bool focused) {
7584
spritebutton *b = widget_get_obj(c);
7685
if(b->focus_cb) {
@@ -139,6 +148,7 @@ component *spritebutton_create(const char *text, const surface *img, bool disabl
139148
widget_set_tick_cb(c, spritebutton_tick);
140149
widget_set_free_cb(c, spritebutton_free);
141150
widget_set_layout_cb(c, spritebutton_layout);
151+
widget_set_find_text_cb(c, spritebutton_find_text);
142152
return c;
143153
}
144154

src/game/gui/spritebutton.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
typedef void (*spritebutton_click_cb)(component *c, void *userdata);
99
typedef void (*spritebutton_tick_cb)(component *c, void *userdata);
1010
typedef void (*spritebutton_focus_cb)(component *c, bool focused, void *userdata);
11+
typedef component *(*spritebutton_find_text_cb)(component *c, const char *text);
1112

1213
component *spritebutton_create(const char *text, const surface *img, bool disabled, spritebutton_click_cb cb,
1314
void *userdata);

src/game/gui/widget.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ typedef struct widget {
1212
widget_event_cb event;
1313
widget_action_cb action;
1414
widget_focus_cb focus;
15+
widget_find_text_cb find_text;
1516
widget_layout_cb layout;
1617
widget_tick_cb tick;
1718
widget_init_cb init;
@@ -66,6 +67,12 @@ void widget_set_focus_cb(component *c, widget_focus_cb cb) {
6667
local->focus = cb;
6768
}
6869

70+
void widget_set_find_text_cb(component *c, widget_find_text_cb cb) {
71+
assert(c->header == WIDGET_MAGIC);
72+
widget *local = component_get_obj(c);
73+
local->find_text = cb;
74+
}
75+
6976
void widget_set_layout_cb(component *c, widget_layout_cb cb) {
7077
assert(c->header == WIDGET_MAGIC);
7178
widget *local = component_get_obj(c);

src/game/gui/widget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
typedef void (*widget_render_cb)(component *c);
77
typedef int (*widget_event_cb)(component *c, SDL_Event *event);
88
typedef int (*widget_action_cb)(component *c, int action);
9+
typedef component *(*widget_find_text_cb)(component *c, const char *text);
910
typedef void (*widget_focus_cb)(component *c, bool focused);
1011
typedef void (*widget_layout_cb)(component *c, int x, int y, int w, int h);
1112
typedef void (*widget_tick_cb)(component *c);
@@ -23,6 +24,7 @@ int widget_get_id(const component *c);
2324
void widget_set_render_cb(component *c, widget_render_cb cb);
2425
void widget_set_event_cb(component *c, widget_event_cb cb);
2526
void widget_set_action_cb(component *c, widget_action_cb cb);
27+
void widget_set_find_text_cb(component *c, widget_find_text_cb cb);
2628
void widget_set_focus_cb(component *c, widget_focus_cb cb);
2729
void widget_set_layout_cb(component *c, widget_layout_cb cb);
2830
void widget_set_tick_cb(component *c, widget_tick_cb cb);

0 commit comments

Comments
 (0)