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>
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 30fda52..b98dc7f 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
{