vcl/unx/gtk3/gtk3gtkinst.cxx | 55 ++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 26 deletions(-)
New commits: commit 2c61782812b1b8b382dd48a04a712da9eaeb4685 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Feb 5 16:01:23 2021 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Sat Feb 6 11:01:26 2021 +0100 complete TODO to keep color if font changes and vice versa Change-Id: Ic38ed14ed67e477d97523b5a670528f5aa0f93f1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110482 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 967531bfc4d4..529eb7881ac2 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -6823,21 +6823,20 @@ public: } }; -PangoAttrList* create_attr_list(const vcl::Font& rFont) +void update_attr_list(PangoAttrList* pAttrList, const vcl::Font& rFont) { - PangoAttrList* pAttrList = pango_attr_list_new(); - pango_attr_list_insert(pAttrList, pango_attr_family_new(OUStringToOString(rFont.GetFamilyName(), RTL_TEXTENCODING_UTF8).getStr())); - pango_attr_list_insert(pAttrList, pango_attr_size_new(rFont.GetFontSize().Height() * PANGO_SCALE)); + 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: - pango_attr_list_insert(pAttrList, pango_attr_style_new(PANGO_STYLE_NORMAL)); + pango_attr_list_change(pAttrList, pango_attr_style_new(PANGO_STYLE_NORMAL)); break; case ITALIC_NORMAL: - pango_attr_list_insert(pAttrList, pango_attr_style_new(PANGO_STYLE_ITALIC)); + pango_attr_list_change(pAttrList, pango_attr_style_new(PANGO_STYLE_ITALIC)); break; case ITALIC_OBLIQUE: - pango_attr_list_insert(pAttrList, pango_attr_style_new(PANGO_STYLE_OBLIQUE)); + pango_attr_list_change(pAttrList, pango_attr_style_new(PANGO_STYLE_OBLIQUE)); break; default: break; @@ -6845,19 +6844,19 @@ PangoAttrList* create_attr_list(const vcl::Font& rFont) switch (rFont.GetWeight()) { case WEIGHT_ULTRALIGHT: - pango_attr_list_insert(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_ULTRALIGHT)); + pango_attr_list_change(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_ULTRALIGHT)); break; case WEIGHT_LIGHT: - pango_attr_list_insert(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_LIGHT)); + pango_attr_list_change(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_LIGHT)); break; case WEIGHT_NORMAL: - pango_attr_list_insert(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_NORMAL)); + pango_attr_list_change(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_NORMAL)); break; case WEIGHT_BOLD: - pango_attr_list_insert(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_BOLD)); + pango_attr_list_change(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_BOLD)); break; case WEIGHT_ULTRABOLD: - pango_attr_list_insert(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_ULTRABOLD)); + pango_attr_list_change(pAttrList, pango_attr_weight_new(PANGO_WEIGHT_ULTRABOLD)); break; default: break; @@ -6865,42 +6864,42 @@ PangoAttrList* create_attr_list(const vcl::Font& rFont) switch (rFont.GetWidthType()) { case WIDTH_ULTRA_CONDENSED: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_ULTRA_CONDENSED)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_ULTRA_CONDENSED)); break; case WIDTH_EXTRA_CONDENSED: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_EXTRA_CONDENSED)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_EXTRA_CONDENSED)); break; case WIDTH_CONDENSED: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_CONDENSED)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_CONDENSED)); break; case WIDTH_SEMI_CONDENSED: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_SEMI_CONDENSED)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_SEMI_CONDENSED)); break; case WIDTH_NORMAL: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_NORMAL)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_NORMAL)); break; case WIDTH_SEMI_EXPANDED: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_SEMI_EXPANDED)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_SEMI_EXPANDED)); break; case WIDTH_EXPANDED: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_EXPANDED)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_EXPANDED)); break; case WIDTH_EXTRA_EXPANDED: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_EXTRA_EXPANDED)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_EXTRA_EXPANDED)); break; case WIDTH_ULTRA_EXPANDED: - pango_attr_list_insert(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_ULTRA_EXPANDED)); + pango_attr_list_change(pAttrList, pango_attr_stretch_new(PANGO_STRETCH_ULTRA_EXPANDED)); break; default: break; } - return pAttrList; } void set_font(GtkLabel* pLabel, const vcl::Font& rFont) { - // TODO?, clear old props like set_text_foreground_color does - PangoAttrList* pAttrList = create_attr_list(rFont); + PangoAttrList* pOrigList = gtk_label_get_attributes(pLabel); + PangoAttrList* pAttrList = pOrigList ? pango_attr_list_copy(pOrigList) : pango_attr_list_new(); + update_attr_list(pAttrList, rFont); gtk_label_set_attributes(pLabel, pAttrList); pango_attr_list_unref(pAttrList); } @@ -9457,7 +9456,9 @@ public: virtual void set_font(const vcl::Font& rFont) override { m_xFont.reset(new vcl::Font(rFont)); - PangoAttrList* pAttrList = create_attr_list(rFont); + PangoAttrList* pOrigList = gtk_entry_get_attributes(m_pEntry); + PangoAttrList* pAttrList = pOrigList ? pango_attr_list_copy(pOrigList) : pango_attr_list_new(); + update_attr_list(pAttrList, rFont); gtk_entry_set_attributes(m_pEntry, pAttrList); pango_attr_list_unref(pAttrList); } @@ -15728,8 +15729,10 @@ public: virtual void set_entry_font(const vcl::Font& rFont) override { m_xFont.reset(new vcl::Font(rFont)); - PangoAttrList* pAttrList = create_attr_list(rFont); assert(m_pEntry); + PangoAttrList* pOrigList = gtk_entry_get_attributes(GTK_ENTRY(m_pEntry)); + PangoAttrList* pAttrList = pOrigList ? pango_attr_list_copy(pOrigList) : pango_attr_list_new(); + update_attr_list(pAttrList, rFont); gtk_entry_set_attributes(GTK_ENTRY(m_pEntry), pAttrList); pango_attr_list_unref(pAttrList); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits