vcl/unx/gtk3/gtkinst.cxx | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-)
New commits: commit 13d4a0d2a287074a954bd698e325fc2fe2d76bbb Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Wed Nov 3 10:59:53 2021 +0000 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Thu Nov 4 01:26:13 2021 +0100 Related: tdf#143443 remove PANGO_ATTR_ABSOLUTE_SIZE and PANGO_ATTR_SIZE when setting a new size because an absolute size set by gtk itself seems to be not overwritten by pango_attr_size_new so sometimes the size of the font in the annotation window label is too large Change-Id: Ib69eec2111336cc27d1571babcc891f16cae2f01 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124482 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 6bfef76f9ed9..6b592b341ea0 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -8689,6 +8689,7 @@ void update_attr_list(PangoAttrList* pAttrList, const vcl::Font& rFont) { pango_attr_list_change(pAttrList, pango_attr_family_new(OUStringToOString(rFont.GetFamilyName(), RTL_TEXTENCODING_UTF8).getStr())); pango_attr_list_change(pAttrList, pango_attr_size_new(rFont.GetFontSize().Height() * PANGO_SCALE)); + switch (rFont.GetItalic()) { case ITALIC_NONE: @@ -8757,10 +8758,33 @@ void update_attr_list(PangoAttrList* pAttrList, const vcl::Font& rFont) } } +gboolean filter_pango_attrs(PangoAttribute *attr, gpointer data) +{ + PangoAttrType* pFilterAttrs = static_cast<PangoAttrType*>(data); + while (*pFilterAttrs) + { + if (attr->klass->type == *pFilterAttrs) + return true; + ++pFilterAttrs; + } + return false; +} + void set_font(GtkLabel* pLabel, const vcl::Font& rFont) { PangoAttrList* pOrigList = gtk_label_get_attributes(pLabel); PangoAttrList* pAttrList = pOrigList ? pango_attr_list_copy(pOrigList) : pango_attr_list_new(); + + if (pOrigList) + { + // tdf#143443 remove both PANGO_ATTR_ABSOLUTE_SIZE and PANGO_ATTR_SIZE + // because pango_attr_list_change(..., pango_attr_size_new...) isn't + // sufficient on its own to ensure a new size sticks. + PangoAttrType aFilterAttrs[] = {PANGO_ATTR_ABSOLUTE_SIZE, PANGO_ATTR_SIZE, PANGO_ATTR_INVALID}; + PangoAttrList* pRemovedAttrs = pOrigList ? pango_attr_list_filter(pAttrList, filter_pango_attrs, &aFilterAttrs) : nullptr; + pango_attr_list_unref(pRemovedAttrs); + } + update_attr_list(pAttrList, rFont); gtk_label_set_attributes(pLabel, pAttrList); pango_attr_list_unref(pAttrList); @@ -11867,21 +11891,6 @@ namespace } } -namespace -{ - gboolean filter_pango_attrs(PangoAttribute *attr, gpointer data) - { - PangoAttrType* pFilterAttrs = static_cast<PangoAttrType*>(data); - while (*pFilterAttrs) - { - if (attr->klass->type == *pFilterAttrs) - return true; - ++pFilterAttrs; - } - return false; - } -} - namespace {