From db63cedcd681da170487db0ac18cac56704cfe05 Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 1 Jul 2021 12:17:02 +0200 Subject: [PATCH] Improved positioning of tooltips through more exactly computing the size of the tooltip to be shown --- src/tooltips.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/tooltips.cpp b/src/tooltips.cpp index 08f2f98..ed3af23 100644 --- a/src/tooltips.cpp +++ b/src/tooltips.cpp @@ -193,11 +193,23 @@ void Tooltip::show(bool disregard_drawn, const std::function &on_motion) return false; }); - auto layout = Pango::Layout::create(tooltip_text_view->get_pango_context()); - if(auto tag = code_tag ? code_tag : code_block_tag) - layout->set_font_description(tag->property_font_desc()); - layout->set_text(buffer->get_text()); - layout->get_pixel_size(size.first, size.second); + Gdk::Rectangle rect; + auto iter = buffer->begin(); + tooltip_text_view->get_iter_location(iter, rect); + int min_x = rect.get_x(); + int max_x = rect.get_x() + rect.get_width(); + int height = 0; + while(true) { + if(iter.ends_line()) { + tooltip_text_view->get_iter_location(iter, rect); + max_x = std::max(max_x, rect.get_x() + rect.get_width()); + height += rect.get_height(); + } + if(iter.is_end()) + break; + iter.forward_char(); + } + size = {max_x - min_x, height}; size.first += 6; // 2xpadding size.second += 8; // 2xpadding + 2