aboutsummaryrefslogtreecommitdiff
path: root/src/button.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/button.c')
-rw-r--r--src/button.c55
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);
}