From f76e63fd896d3a862bfff713e6af125c05eb360c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 20 Sep 2022 03:31:43 +0200 Subject: [PATCH] Update size-request when font/style is set --- libs/gtkmm2ext/utils.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc index 694c5c9455..f32ba97800 100644 --- a/libs/gtkmm2ext/utils.cc +++ b/libs/gtkmm2ext/utils.cc @@ -65,15 +65,26 @@ Gtkmm2ext::get_ink_pixel_size (Glib::RefPtr layout, height = PANGO_PIXELS(ink_rect.get_height()); } +static void +_set_size_request_to_display_given_text (Glib::RefPtr const& sty, Gtk::Widget* w, std::string const& text, + gint hpadding, gint vpadding) +{ + w->ensure_style (); + if (sty && sty->get_font() == w->get_style()->get_font()) { + return; + } + + int width, height; + w->create_pango_layout (text)->get_pixel_size (width, height); + w->set_size_request(width + hpadding, height + vpadding); +} + void Gtkmm2ext::set_size_request_to_display_given_text (Gtk::Widget &w, std::string const& text, gint hpadding, gint vpadding) { - int width, height; - w.ensure_style (); - - w.create_pango_layout (text)->get_pixel_size (width, height); - w.set_size_request(width + hpadding, height + vpadding); + w.signal_style_changed().connect (sigc::bind (sigc::ptr_fun (_set_size_request_to_display_given_text), &w, text, hpadding, vpadding)); + _set_size_request_to_display_given_text (Glib::RefPtr(), &w, text, hpadding, vpadding); } static inline guint8