diff options
| author | Jari Vetoniemi <mailroxas@gmail.com> | 2014-10-26 15:41:53 +0200 | 
|---|---|---|
| committer | Jari Vetoniemi <mailroxas@gmail.com> | 2014-10-26 15:41:53 +0200 | 
| commit | fb6a49e69011f911b670ac3bdb08fe7868db3070 (patch) | |
| tree | 1b7af93d4c873c984d235ab2f726ff469e8dc14b /lib/renderers | |
| parent | 8d08365645d1ee22b9c1fe8ab763e21dd7b0e77b (diff) | |
| download | bemenu-fb6a49e69011f911b670ac3bdb08fe7868db3070.tar.gz bemenu-fb6a49e69011f911b670ac3bdb08fe7868db3070.tar.bz2 bemenu-fb6a49e69011f911b670ac3bdb08fe7868db3070.zip  | |
Use real font height for window height.
Diffstat (limited to 'lib/renderers')
| -rw-r--r-- | lib/renderers/cairo.h | 14 | ||||
| -rw-r--r-- | lib/renderers/wayland/wayland.c | 5 | ||||
| -rw-r--r-- | lib/renderers/wayland/wayland.h | 2 | ||||
| -rw-r--r-- | lib/renderers/wayland/window.c | 9 | 
4 files changed, 22 insertions, 8 deletions
diff --git a/lib/renderers/cairo.h b/lib/renderers/cairo.h index 1dc052f..3132c09 100644 --- a/lib/renderers/cairo.h +++ b/lib/renderers/cairo.h @@ -32,6 +32,15 @@ struct cairo_result {  static size_t blen = 0;  static char *buffer = NULL; +__attribute__((unused)) static void +bm_cairo_get_font_extents(struct cairo *cairo, const struct bm_font *font, cairo_font_extents_t *fe) +{ +    assert(cairo && font && fe); +    cairo_select_font_face(cairo->cr, font->name, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); +    cairo_set_font_size(cairo->cr, font->size); +    cairo_font_extents(cairo->cr, fe); +} +  __attribute__((unused)) BM_LOG_ATTR(3, 4) static bool  bm_cairo_get_text_extents(struct cairo *cairo, struct cairo_result *result, const char *fmt, ...)  { @@ -100,12 +109,9 @@ bm_cairo_paint(struct cairo *cairo, uint32_t width, uint32_t height, const struc      cairo_rectangle(cairo->cr, 0, 0, width, height);      cairo_fill(cairo->cr); -    cairo_select_font_face(cairo->cr, menu->font.name, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); -    cairo_set_font_size(cairo->cr, menu->font.size); -      struct cairo_paint paint;      memset(&paint, 0, sizeof(paint)); -    cairo_font_extents(cairo->cr, &paint.fe); +    bm_cairo_get_font_extents(cairo, &menu->font, &paint.fe);      struct cairo_result result;      memset(&result, 0, sizeof(result)); 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);  | 
