diff options
Diffstat (limited to 'wayland')
-rw-r--r-- | wayland/pango.c | 59 | ||||
-rw-r--r-- | wayland/window.c | 4 |
2 files changed, 63 insertions, 0 deletions
diff --git a/wayland/pango.c b/wayland/pango.c new file mode 100644 index 00000000..9766be6a --- /dev/null +++ b/wayland/pango.c | |||
@@ -0,0 +1,59 @@ | |||
1 | #include <cairo/cairo.h> | ||
2 | #include <pango/pangocairo.h> | ||
3 | #include <stdarg.h> | ||
4 | #include <stdlib.h> | ||
5 | #include <string.h> | ||
6 | #include <stdio.h> | ||
7 | #include "client/window.h" | ||
8 | #include "client/buffer.h" | ||
9 | #include "log.h" | ||
10 | |||
11 | PangoLayout *get_pango_layout(struct window *window, const char *text) { | ||
12 | PangoLayout *layout = pango_cairo_create_layout(window->cairo); | ||
13 | pango_layout_set_text(layout, text, -1); | ||
14 | PangoFontDescription *desc = pango_font_description_from_string(window->font); | ||
15 | pango_layout_set_font_description(layout, desc); | ||
16 | pango_layout_set_single_paragraph_mode(layout, 1); | ||
17 | pango_font_description_free(desc); | ||
18 | return layout; | ||
19 | } | ||
20 | |||
21 | void get_text_size(struct window *window, int *width, int *height, const char *fmt, ...) { | ||
22 | char *buf = malloc(2048); | ||
23 | |||
24 | va_list args; | ||
25 | va_start(args, fmt); | ||
26 | if (vsnprintf(buf, 2048, fmt, args) >= 2048) { | ||
27 | strcpy(buf, "[buffer overflow]"); | ||
28 | } | ||
29 | va_end(args); | ||
30 | |||
31 | PangoLayout *layout = get_pango_layout(window, buf); | ||
32 | pango_cairo_update_layout(window->cairo, layout); | ||
33 | |||
34 | pango_layout_get_pixel_size(layout, width, height); | ||
35 | |||
36 | g_object_unref(layout); | ||
37 | |||
38 | free(buf); | ||
39 | } | ||
40 | |||
41 | void pango_printf(struct window *window, const char *fmt, ...) { | ||
42 | char *buf = malloc(2048); | ||
43 | |||
44 | va_list args; | ||
45 | va_start(args, fmt); | ||
46 | if (vsnprintf(buf, 2048, fmt, args) >= 2048) { | ||
47 | strcpy(buf, "[buffer overflow]"); | ||
48 | } | ||
49 | va_end(args); | ||
50 | |||
51 | PangoLayout *layout = get_pango_layout(window, buf); | ||
52 | pango_cairo_update_layout(window->cairo, layout); | ||
53 | |||
54 | pango_cairo_show_layout(window->cairo, layout); | ||
55 | |||
56 | g_object_unref(layout); | ||
57 | |||
58 | free(buf); | ||
59 | } | ||
diff --git a/wayland/window.c b/wayland/window.c index 13d4c7b2..916e3b57 100644 --- a/wayland/window.c +++ b/wayland/window.c | |||
@@ -63,6 +63,7 @@ struct window *window_setup(struct registry *registry, uint32_t width, uint32_t | |||
63 | window->width = width; | 63 | window->width = width; |
64 | window->height = height; | 64 | window->height = height; |
65 | window->registry = registry; | 65 | window->registry = registry; |
66 | window->font = "monospace 10"; | ||
66 | 67 | ||
67 | window->surface = wl_compositor_create_surface(registry->compositor); | 68 | window->surface = wl_compositor_create_surface(registry->compositor); |
68 | if (shell_surface) { | 69 | if (shell_surface) { |
@@ -74,6 +75,8 @@ struct window *window_setup(struct registry *registry, uint32_t width, uint32_t | |||
74 | wl_pointer_add_listener(registry->pointer, &pointer_listener, window); | 75 | wl_pointer_add_listener(registry->pointer, &pointer_listener, window); |
75 | } | 76 | } |
76 | 77 | ||
78 | get_next_buffer(window); | ||
79 | |||
77 | window->cursor.cursor_theme = wl_cursor_theme_load("default", 32, registry->shm); // TODO: let you customize this | 80 | window->cursor.cursor_theme = wl_cursor_theme_load("default", 32, registry->shm); // TODO: let you customize this |
78 | window->cursor.cursor = wl_cursor_theme_get_cursor(window->cursor.cursor_theme, "left_ptr"); | 81 | window->cursor.cursor = wl_cursor_theme_get_cursor(window->cursor.cursor_theme, "left_ptr"); |
79 | window->cursor.surface = wl_compositor_create_surface(registry->compositor); | 82 | window->cursor.surface = wl_compositor_create_surface(registry->compositor); |
@@ -118,4 +121,5 @@ int window_render(struct window *window) { | |||
118 | } | 121 | } |
119 | 122 | ||
120 | void window_teardown(struct window *window) { | 123 | void window_teardown(struct window *window) { |
124 | // TODO | ||
121 | } | 125 | } |