aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2023-11-19 02:18:01 +0100
committerFederico Angelilli <code@fedang.net>2023-11-19 02:18:01 +0100
commitbd327c61eb3c59458b197e70f6c091d81dbde1ba (patch)
tree060fdeb5eef88c76f9b5439fa8b26069a6a5dca9
parent07646612acbc833ec50479eee3564af37636f272 (diff)
Simplify button shape handling
-rw-r--r--src/button.c3
-rw-r--r--src/button.h3
-rw-r--r--src/comet.c4
-rw-r--r--src/draw.c5
4 files changed, 8 insertions, 7 deletions
diff --git a/src/button.c b/src/button.c
index 6e0e263..3a4e311 100644
--- a/src/button.c
+++ b/src/button.c
@@ -2,11 +2,10 @@
#include "button.h"
-Button *button_create(const char *text, bool fixed_size)
+Button *button_create(const char *text)
{
Button *btn = g_malloc0(sizeof(Button));
btn->text = g_strdup(text);
- btn->fixed_size = fixed_size;
return btn;
}
diff --git a/src/button.h b/src/button.h
index 11b6507..7df70d3 100644
--- a/src/button.h
+++ b/src/button.h
@@ -10,12 +10,11 @@ typedef struct Button Button;
typedef void (* ButtonAction)(Button *btn);
struct Button {
- bool fixed_size;
ButtonAction action;
char *text;
};
-Button *button_create(const char *text, bool fixed_size);
+Button *button_create(const char *text);
void button_set_action(Button *btn, ButtonAction action);
diff --git a/src/comet.c b/src/comet.c
index 2b0cf40..268d846 100644
--- a/src/comet.c
+++ b/src/comet.c
@@ -69,12 +69,12 @@ int main(int argc, char **argv)
for (int i = 0; i < 9; ++i) {
char text[] = { '1' + i, '\0' };
- Button *btn = button_create(text, true);
+ Button *btn = button_create(text);
button_set_action(btn, action);
state_add_button(state, btn);
}
- Button *btn = button_create("long button", false);
+ Button *btn = button_create("long button");
button_set_action(btn, action);
state_add_button(state, btn);
diff --git a/src/draw.c b/src/draw.c
index d9e999b..91ae186 100644
--- a/src/draw.c
+++ b/src/draw.c
@@ -151,7 +151,10 @@ void draw_compute_layout(Drawable *draw, GList *btns, cairo_t *cr)
layout->text_w = ceil(text_w / scale);
layout->text_h = ceil(text_h / scale);
- layout->width = btn->fixed_size ? height : layout->text_w + 2 * radius;
+ // If there is only one glyph the button should be round
+ size_t text_l = g_utf8_strlen(btn->text, -1);
+
+ layout->width = text_l == 1 ? height : layout->text_w + 2 * radius;
layout->height = height;
draw->layouts = g_list_append(draw->layouts, layout);