diff options
author | Phil Jones <philj56@gmail.com> | 2022-06-24 16:48:15 +0100 |
---|---|---|
committer | Phil Jones <philj56@gmail.com> | 2022-06-24 16:48:15 +0100 |
commit | b70772372ef51a64dece064aaa0e25e0a83354fd (patch) | |
tree | 2ea4abb1e1fbbb5ffed06fcedbd38235fcf8d071 /src/entry_backend | |
parent | 131c676fb6fc6323089acd45741a4659ffe888fc (diff) |
Horizontal mode fixes.
Implement horizontal mode for Pango, and add min-input-width option.
Diffstat (limited to 'src/entry_backend')
-rw-r--r-- | src/entry_backend/harfbuzz.c | 4 | ||||
-rw-r--r-- | src/entry_backend/pango.c | 14 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/entry_backend/harfbuzz.c b/src/entry_backend/harfbuzz.c index 61a691f..fff4950 100644 --- a/src/entry_backend/harfbuzz.c +++ b/src/entry_backend/harfbuzz.c @@ -23,6 +23,9 @@ const struct { #include <freetype/fterrors.h> +#undef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + static const char *get_ft_error_string(int err_code) { for (size_t i = 0; i < N_ELEM(ft_errors); i++) { @@ -199,6 +202,7 @@ void entry_backend_harfbuzz_update(struct entry *entry) hb_buffer_add_utf8(buffer, entry->input_mb, -1, 0, -1); hb_shape(entry->harfbuzz.hb_font, buffer, NULL, 0); width = render_hb_buffer(cr, buffer); + width = MAX(width, entry->input_width); cairo_font_extents_t font_extents; cairo_font_extents(cr, &font_extents); diff --git a/src/entry_backend/pango.c b/src/entry_backend/pango.c index 49365fb..084d34f 100644 --- a/src/entry_backend/pango.c +++ b/src/entry_backend/pango.c @@ -5,6 +5,9 @@ #include "../log.h" #include "../nelem.h" +#undef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + void entry_backend_pango_init(struct entry *entry, uint32_t *width, uint32_t *height) { cairo_t *cr = entry->cairo[0].cr; @@ -60,11 +63,17 @@ void entry_backend_pango_update(struct entry *entry) pango_cairo_update_layout(cr, layout); pango_cairo_show_layout(cr, layout); + int width; int height; - pango_layout_get_size(layout, NULL, &height); + pango_layout_get_size(layout, &width, &height); + width = MAX(width, (int)entry->input_width * PANGO_SCALE); for (size_t i = 0; i < entry->num_results && i < entry->results.count; i++) { - cairo_translate(cr, 0, (int)(height / PANGO_SCALE)); + if (entry->horizontal) { + cairo_translate(cr, (int)(width / PANGO_SCALE) + entry->result_padding, 0); + } else { + cairo_translate(cr, 0, (int)(height / PANGO_SCALE) + entry->result_padding); + } const char *str; if (i < entry->results.count) { str = entry->results.buf[i]; @@ -82,5 +91,6 @@ void entry_backend_pango_update(struct entry *entry) if (i == entry->selection) { cairo_restore(cr); } + pango_layout_get_size(layout, &width, &height); } } |