diff options
Diffstat (limited to 'src/button.c')
| -rw-r--r-- | src/button.c | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/src/button.c b/src/button.c index 2f279d4..0ff1437 100644 --- a/src/button.c +++ b/src/button.c @@ -2,29 +2,62 @@ #include "button.h" -Button *button_create(const char *text, PangoAlignment align) +Button *button_simple_create(PangoAlignment align, Color color, Color line_color) { - Button *btn = g_malloc0(sizeof(Button)); - btn->text = g_strdup(text); + Button *btn = g_malloc0(sizeof(ButtonSimple)); + btn->simple = true; btn->align = align; + btn->color = color; + btn->line_color = line_color; return btn; } -void button_set_colors(Button *btn, Color background, Color foreground, Color stroke) +void button_simple_set_text(Button *btn, const char *text, Color text_color) { - btn->background = background; - btn->foreground = foreground; - btn->stroke = stroke; + g_assert(btn->simple); + ButtonSimple *sbtn = CAST(btn, ButtonSimple); + if (sbtn->text != NULL) g_free(sbtn->text); + sbtn->text = g_strdup(text); + sbtn->text_color = text_color; } -void button_set_action(Button *btn, ButtonAction action, gpointer data) +const char *button_simple_get_text(Button *btn) { - btn->action = action; - btn->action_data = data; + g_assert(btn->simple); + return CAST(btn, ButtonSimple)->text; +} + +void button_simple_set_action(Button *btn, ButtonAction action, gpointer data) +{ + g_assert(btn->simple); + CAST(btn, ButtonSimple)->action = action; + CAST(btn, ButtonSimple)->action_data = data; +} + +ButtonAction button_simple_get_action(Button *btn) +{ + g_assert(btn->simple); + return CAST(btn, ButtonSimple)->action; +} + +Button *button_group_create(PangoAlignment align, Color color, Color line_color) +{ + Button *btn = g_malloc0(sizeof(ButtonGroup)); + btn->simple = false; + btn->align = align; + btn->color = color; + btn->line_color = line_color; + return btn; +} + +void button_group_append(Button *btn, Button *child) +{ + g_assert(!btn->simple); + CAST(btn, ButtonGroup)->children = g_list_append(CAST(btn, ButtonGroup)->children, child); } void button_destroy(Button *btn) { - g_free(btn->text); + if (btn->simple) g_free(CAST(btn, ButtonSimple)->text); g_free(btn); } |
