#include #include #include #include "x11.h" #include "log.h" #define EVEN(n) ((int)(n) - ((int)(n) % 2 != 0)) void draw(Window *win) { double scale = window_get_scale(win); int screen_width, screen_height; window_get_screen_size(win, &screen_width, &screen_height); int width = EVEN(round(screen_width * 0.98 * scale)); int height = EVEN(round(screen_height * 0.02 * scale)); cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); cairo_t *cr = cairo_create(surface); cairo_set_fill_rule(cr, CAIRO_FILL_RULE_EVEN_ODD); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgb(cr, 0.3, 0.3, 0.3); cairo_rectangle(cr, 0, 0, width, height); cairo_fill(cr); for (int i = 0; i < 9; i++) { cairo_set_source_rgb(cr, 0.7, 0.7, 0.7); cairo_rectangle(cr, height * i, 0, height, height); cairo_fill(cr); cairo_set_source_rgb(cr, 0.4, 0.4, 0.4); cairo_set_line_width(cr, 1 * scale); cairo_rectangle(cr, height * i, 0, height, height); cairo_stroke(cr); cairo_select_font_face(cr, "monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_source_rgb(cr, 0.3, 0.3, 0.3); cairo_set_font_size(cr, 20.0); char btn[] = { '0' + i, '\0' }; cairo_text_extents_t te; cairo_text_extents(cr, btn, &te); cairo_move_to(cr, (height * i) + (height / 2) - te.x_bearing - te.width / 2, (height / 2) - te.y_bearing - te.height / 2); cairo_show_text(cr, btn); } cairo_destroy(cr); int x = EVEN((screen_width - width) / 2.0); int y = EVEN(screen_height * 0.005); // TODO: Move these somewhere else window_move(win, x, y); window_resize(win, width, height); window_paint_surface(win, surface, width, height); cairo_surface_destroy(surface); } // vim: ts=4 sw=4 et