summaryrefslogtreecommitdiff
path: root/src/entry_backend
diff options
context:
space:
mode:
authorPhil Jones <philj56@gmail.com>2022-06-24 16:48:15 +0100
committerPhil Jones <philj56@gmail.com>2022-06-24 16:48:15 +0100
commitb70772372ef51a64dece064aaa0e25e0a83354fd (patch)
tree2ea4abb1e1fbbb5ffed06fcedbd38235fcf8d071 /src/entry_backend
parent131c676fb6fc6323089acd45741a4659ffe888fc (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.c4
-rw-r--r--src/entry_backend/pango.c14
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);
}
}