vcl/unx/gtk3/gtkinst.cxx | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-)
New commits: commit 950483343d2f8218ac886aac27e1072bfec304bf Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Wed Nov 3 10:59:53 2021 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Wed Nov 3 13:24:56 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/+/124641 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 30fda52e5c79..b98dc7fdf3c4 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -9002,6 +9002,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: @@ -9070,10 +9071,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); @@ -12272,21 +12296,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 {