From 3868d1918c76e963a077ca0a56ef7de7409beb05 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Fri, 3 Nov 2023 22:57:12 +0100 Subject: Improve draw and add other x11 functionalities --- draw.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 13 deletions(-) (limited to 'draw.c') diff --git a/draw.c b/draw.c index 20f5f03..3d5d48d 100644 --- a/draw.c +++ b/draw.c @@ -3,31 +3,66 @@ #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 w = 1000, h = 1000; - cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - round(w * scale), - round(h * scale)); + int screen_width, screen_height; + window_get_screen_size(win, &screen_width, &screen_height); - cairo_t *cr = cairo_create(surface); + 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.0, 1.0, 0.0); - cairo_rectangle(cr, 0, 0, 10000, 10000); + cairo_set_source_rgb(cr, 0.3, 0.3, 0.3); + cairo_rectangle(cr, 0, 0, width, height); cairo_fill(cr); - cairo_select_font_face(cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); - cairo_set_font_size(cr, 50.0); - cairo_set_source_rgb(cr, 0, 0, 0); - cairo_move_to(cr, 50, 50); - cairo_show_text(cr, "Hello, world"); + 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); - window_paint_surface(win, surface, w, h); + + 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); } -- cgit v1.2.3