summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-11-03 10:59:53 +0000
committerCaolán McNamara <caolanm@redhat.com>2021-11-03 13:24:56 +0100
commit950483343d2f8218ac886aac27e1072bfec304bf (patch)
treecb8a19507f71172b8a47cdd5d31c2dbbdcfdb21d
parent487acc0c42984199be603df68f1a6df02849e527 (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.cxx39
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
{