diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-11-03 10:59:53 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-11-03 13:24:56 +0100 |
commit | 950483343d2f8218ac886aac27e1072bfec304bf (patch) | |
tree | cb8a19507f71172b8a47cdd5d31c2dbbdcfdb21d | |
parent | 487acc0c42984199be603df68f1a6df02849e527 (diff) |
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 <caolanm@redhat.com>
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 39 |
1 files changed, 24 insertions, 15 deletions
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); @@ -12274,21 +12298,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 -{ class GtkInstanceEditable : public GtkInstanceWidget, public virtual weld::Entry { |