summaryrefslogtreecommitdiff
path: root/lib/renderers/wayland
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-10-26 15:41:53 +0200
committerJari Vetoniemi <mailroxas@gmail.com>2014-10-26 15:41:53 +0200
commitfb6a49e69011f911b670ac3bdb08fe7868db3070 (patch)
tree1b7af93d4c873c984d235ab2f726ff469e8dc14b /lib/renderers/wayland
parent8d08365645d1ee22b9c1fe8ab763e21dd7b0e77b (diff)
downloadbemenu-fb6a49e69011f911b670ac3bdb08fe7868db3070.tar.gz
bemenu-fb6a49e69011f911b670ac3bdb08fe7868db3070.tar.bz2
bemenu-fb6a49e69011f911b670ac3bdb08fe7868db3070.zip
Use real font height for window height.
Diffstat (limited to 'lib/renderers/wayland')
-rw-r--r--lib/renderers/wayland/wayland.c5
-rw-r--r--lib/renderers/wayland/wayland.h2
-rw-r--r--lib/renderers/wayland/window.c9
3 files changed, 12 insertions, 4 deletions
diff --git a/lib/renderers/wayland/wayland.c b/lib/renderers/wayland/wayland.c
index 22ea45b..8967253 100644
--- a/lib/renderers/wayland/wayland.c
+++ b/lib/renderers/wayland/wayland.c
@@ -11,10 +11,11 @@ static void
render(const struct bm_menu *menu)
{
struct wayland *wayland = menu->renderer->internal;
+
uint32_t count;
bm_menu_get_filtered_items(menu, &count);
- wayland->window.height = ((count < menu->lines ? count : menu->lines) + 1) * menu->font.size + 4;
- bm_wl_window_render(&wayland->window, menu);
+ uint32_t lines = (count < menu->lines ? count : menu->lines) + 1;
+ bm_wl_window_render(&wayland->window, menu, lines);
if (wl_display_dispatch(wayland->display) < 0)
wayland->input.sym = XKB_KEY_Escape;
diff --git a/lib/renderers/wayland/wayland.h b/lib/renderers/wayland/wayland.h
index d698218..a9c79b3 100644
--- a/lib/renderers/wayland/wayland.h
+++ b/lib/renderers/wayland/wayland.h
@@ -92,7 +92,7 @@ struct wayland {
bool bm_wl_registry_register(struct wayland *wayland);
void bm_wl_registry_destroy(struct wayland *wayland);
-void bm_wl_window_render(struct window *window, const struct bm_menu *menu);
+void bm_wl_window_render(struct window *window, const struct bm_menu *menu, uint32_t lines);
bool bm_wl_window_create(struct window *window, struct wl_shm *shm, struct wl_shell *shell, struct xdg_shell *xdg_shell, struct wl_surface *surface);
void bm_wl_window_destroy(struct window *window);
diff --git a/lib/renderers/wayland/window.c b/lib/renderers/wayland/window.c
index 21555b8..d93a8c9 100644
--- a/lib/renderers/wayland/window.c
+++ b/lib/renderers/wayland/window.c
@@ -247,7 +247,7 @@ static const struct xdg_surface_listener xdg_surface_listener = {
};
void
-bm_wl_window_render(struct window *window, const struct bm_menu *menu)
+bm_wl_window_render(struct window *window, const struct bm_menu *menu, uint32_t lines)
{
assert(window && menu);
@@ -255,6 +255,13 @@ bm_wl_window_render(struct window *window, const struct bm_menu *menu)
if (!(buffer = next_buffer(window)))
return;
+ cairo_font_extents_t fe;
+ bm_cairo_get_font_extents(&buffer->cairo, &menu->font, &fe);
+ window->height = lines * fe.height + 4;
+
+ if (window->height != buffer->height && !(buffer = next_buffer(window)))
+ return;
+
if (window->notify.render)
window->displayed = window->notify.render(&buffer->cairo, buffer->width, buffer->height, menu);