aboutsummaryrefslogtreecommitdiff
path: root/src/draw.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/draw.c')
-rw-r--r--src/draw.c70
1 files changed, 50 insertions, 20 deletions
diff --git a/src/draw.c b/src/draw.c
index aed4da0..4362950 100644
--- a/src/draw.c
+++ b/src/draw.c
@@ -5,6 +5,7 @@
#include <pango/pango-types.h>
#include "draw.h"
+#include "button.h"
#include "log.h"
// Idea: Either make a to_draw queue where we put things we schedule to redraw
@@ -68,56 +69,85 @@ void draw_paint(Drawable *draw, Window *win)
cairo_paint(cr);
- cairo_set_line_width(cr, 1 * scale);
+ int line_w = 1 * scale;
+ cairo_set_line_width(cr, line_w);
- for (int i = 0; i < 9; i++) {
+ int bx = 0;
- PangoLayout *layout = pango_cairo_create_layout (cr);
+ for (GList *it = draw->btns; it; it = it->next) {
+ Button *btn = it->data;
+
+ PangoLayout *layout = pango_cairo_create_layout(cr);
pango_layout_set_font_description(layout, draw->desc);
- int x = (height + cairo_get_line_width(cr) * scale * 2) * i;
+ int bwidth, bheight = height;
+ char *btn_text = btn->text;
+ char tmp[2] = { 0 };
+
+ if (btn->fixed_size) {
+ bwidth = height;
+ // Get only the first char
+ tmp[0] = btn->text[0];
+ btn_text = tmp;
+ }
+
+ pango_layout_set_text(layout, btn_text, -1);
+ pango_layout_set_alignment(layout, PANGO_ALIGN_CENTER);
+
+ int text_w, text_h;
+ pango_layout_get_pixel_size(layout, &text_w, &text_h);
+ text_w = ceil(text_w / scale);
+ text_h = ceil(text_h / scale);
+
+ if (!btn->fixed_size) {
+ bwidth = text_w + 2*radius;
+ }
+
+ int text_x = bx + (bwidth / 2) - (text_w / 2);
+ int text_y = (bheight / 2) - (text_h / 2);
// purple
cairo_set_source_rgba(cr, 0.502, 0.168, 0.886, 1);
- cairo_arc(cr, x + radius, radius, radius, 0 * degree, 360 * degree);
+ cairo_new_sub_path(cr);
+ cairo_arc(cr, bx + radius, radius, radius, 90 * degree, 270 * degree);
+ cairo_arc(cr, bx + bwidth - radius, radius, radius, 270 * degree, 450 * degree);
+ cairo_close_path(cr);
cairo_fill(cr);
cairo_set_source_rgba(cr, 0.8, 0.8, 0.8, 1);
- cairo_arc(cr, x + radius, radius, radius - 1, 0 * degree, 360 * degree);
+ cairo_new_sub_path(cr);
+ cairo_arc(cr, bx + radius, radius, radius - line_w , 90 * degree, 270 * degree);
+ cairo_arc(cr, bx + bwidth - radius, radius, radius - line_w, 270 * degree, 450 * degree);
+ cairo_close_path(cr);
cairo_stroke(cr);
cairo_set_source_rgb(cr, 0.8, 0.8, 0.8);
- char btn[] = { '1' + i, '\0' };
- pango_layout_set_text(layout, btn, -1);
-
- int text_w, text_h;
- pango_layout_get_pixel_size(layout, &text_w, &text_h);
- text_w = ceil(text_w / scale);
- text_h = ceil(text_h / scale);
-
- int text_x = x + radius - (text_w / 2);
- int text_y = radius - (text_h / 2);
cairo_move_to(cr, text_x, text_y);
pango_cairo_update_layout(cr, layout);
pango_cairo_show_layout(cr, layout);
g_object_unref(layout);
+
+ int sep = 10 * scale;
+ bx += height + line_w * 2 + sep;
}
cairo_destroy(cr);
- int x = draw->left_pad;
- int y = draw->top_pad;
-
// TODO: Move these somewhere else
- window_move(win, x, y);
+ window_move(win, draw->left_pad, draw->top_pad);
window_resize(win, width0, draw->height);
window_paint_surface(win, surface, width, height);
cairo_surface_destroy(surface);
}
+void draw_set_buttons(Drawable *draw, GList *btns)
+{
+ draw->btns = btns;
+}
+
void draw_destroy(Drawable *draw)
{
pango_font_description_free(draw->desc);