From bcff7094627e423dd9ca52a246345512dc3d791c Mon Sep 17 00:00:00 2001 From: Phil Jones Date: Sun, 26 Jun 2022 23:44:28 +0100 Subject: Add optional background around selected result. --- src/entry_backend/harfbuzz.c | 13 +++++++++++-- src/entry_backend/pango.c | 15 ++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) (limited to 'src/entry_backend') diff --git a/src/entry_backend/harfbuzz.c b/src/entry_backend/harfbuzz.c index 58f4ca6..fe4d7dc 100644 --- a/src/entry_backend/harfbuzz.c +++ b/src/entry_backend/harfbuzz.c @@ -231,13 +231,22 @@ void entry_backend_harfbuzz_update(struct entry *entry) hb_buffer_add_utf8(buffer, entry->results.buf[i], -1, 0, -1); hb_shape(entry->harfbuzz.hb_font, buffer, NULL, 0); if (i == entry->selection) { - cairo_save(cr); - color = entry->selection_color; + cairo_push_group(cr); + color = entry->selection_foreground_color; cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a); } width = render_hb_buffer(cr, buffer); if (i == entry->selection) { + cairo_pop_group_to_source(cr); + cairo_save(cr); + color = entry->selection_background_color; + cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a); + cairo_rectangle(cr, 0, 0, width, font_extents.height); + cairo_fill(cr); cairo_restore(cr); + cairo_paint(cr); + color = entry->foreground_color; + cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a); } } diff --git a/src/entry_backend/pango.c b/src/entry_backend/pango.c index 019933e..8a0add7 100644 --- a/src/entry_backend/pango.c +++ b/src/entry_backend/pango.c @@ -87,15 +87,24 @@ void entry_backend_pango_update(struct entry *entry) pango_layout_set_text(layout, str, -1); pango_cairo_update_layout(cr, layout); if (i == entry->selection) { - cairo_save(cr); - color = entry->selection_color; + cairo_push_group(cr); + color = entry->selection_foreground_color; cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a); } pango_cairo_show_layout(cr, layout); + pango_layout_get_size(layout, &width, &height); if (i == entry->selection) { + cairo_pop_group_to_source(cr); + cairo_save(cr); + color = entry->selection_background_color; + cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a); + cairo_rectangle(cr, 0, 0, (int)(width / PANGO_SCALE), (int)(height / PANGO_SCALE)); + cairo_fill(cr); cairo_restore(cr); + cairo_paint(cr); + color = entry->foreground_color; + cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a); } - pango_layout_get_size(layout, &width, &height); } cairo_restore(cr); -- cgit v1.2.3