summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-11-03 10:59:53 +0000
committerAdolfo Jayme Barrientos <fitojb@ubuntu.com>2021-11-04 01:26:13 +0100
commit13d4a0d2a287074a954bd698e325fc2fe2d76bbb (patch)
tree44834faa4637c4534b804fd4b1d322fac31ddd8d /vcl
parent2a02015b8f822b957b3b7d417b55b647b00f62e9 (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/+/124482 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Diffstat (limited to 'vcl')
-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 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);
@@ -11869,21 +11893,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
{