include/vcl/weld.hxx | 13 +++++++++- sfx2/source/appl/helpinterceptor.cxx | 7 ++--- vcl/inc/salvtables.hxx | 4 +++ vcl/source/app/salvtables.cxx | 16 +++++++++++++ vcl/unx/gtk3/gtk3gtkinst.cxx | 43 +++++++++++++++++++++++++++++++---- 5 files changed, 74 insertions(+), 9 deletions(-)
New commits: commit ac240585063b3b74d062e3ce5384ac0705f51425 Author: Julien Nabet <serval2...@yahoo.fr> AuthorDate: Wed Sep 9 11:07:33 2020 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Thu Sep 10 20:51:26 2020 +0200 micro-optim we just want to remove all urls after m_nCurPos (sfx2) Change-Id: Ib27386baa81ee912ebb5112d721610c5fc3c708b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102287 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sfx2/source/appl/helpinterceptor.cxx b/sfx2/source/appl/helpinterceptor.cxx index b69ca9fedd5f..75755ecbe640 100644 --- a/sfx2/source/appl/helpinterceptor.cxx +++ b/sfx2/source/appl/helpinterceptor.cxx @@ -50,10 +50,9 @@ void HelpInterceptor_Impl::addURL( const OUString& rURL ) size_t nCount = m_vHistoryUrls.size(); if ( nCount && m_nCurPos < ( nCount - 1 ) ) { - for ( size_t i = nCount - 1; i > m_nCurPos; i-- ) - { - m_vHistoryUrls.erase( m_vHistoryUrls.begin() + i ); - } + m_vHistoryUrls.erase( + m_vHistoryUrls.begin() + m_nCurPos + 1, + m_vHistoryUrls.end()); } Reference<XFrame> xFrame(m_xIntercepted, UNO_QUERY); Reference<XController> xController; commit 265f95d9a316b1ecfee21a01d46d04cc6eadee7b Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Thu Sep 3 16:24:33 2020 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Thu Sep 10 20:51:10 2020 +0200 support attempting to set a foreground color for labels and textviews but try to discourage use of random colors Change-Id: I1a67956846b8bd056180b37547ca7d206970c0e5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102014 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 9d68d839f641..5508246e0c1c 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -1926,9 +1926,14 @@ public: virtual void set_label(const OUString& rText) = 0; virtual OUString get_label() const = 0; virtual void set_mnemonic_widget(Widget* pTarget) = 0; - virtual void set_label_type(LabelType eType) = 0; // font size is in points, not pixels, e.g. see Window::[G]etPointFont virtual void set_font(const vcl::Font& rFont) = 0; + virtual void set_label_type(LabelType eType) = 0; + /* + If you want to set a warning or error state, see set_label_type + instead. + */ + virtual void set_font_color(const Color& rColor) = 0; }; class VCL_DLLPUBLIC TextView : virtual public Container @@ -1966,6 +1971,12 @@ public: return get_text_height() * nRows; } + /* + Typically you want to avoid the temptation of customizing + font colors + */ + virtual void set_font_color(const Color& rColor) = 0; + void save_value() { m_sSavedValue = get_text(); } bool get_value_changed_from_saved() const { return m_sSavedValue != get_text(); } diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index d82e1e5087f6..ac856598768e 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -407,6 +407,8 @@ public: virtual void set_label_type(weld::LabelType eType) override; virtual void set_font(const vcl::Font& rFont) override; + + virtual void set_font_color(const Color& rColor) override; }; class SalInstanceContainer : public SalInstanceWidget, public virtual weld::Container @@ -1276,6 +1278,8 @@ public: virtual void set_monospace(bool bMonospace) override; + virtual void set_font_color(const Color& rColor) override; + virtual void connect_cursor_position(const Link<TextView&, void>& rLink) override; virtual bool can_move_cursor_with_up() const override; diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 16436ad0a666..0343347cde96 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -5547,6 +5547,14 @@ void SalInstanceLabel::set_label_type(weld::LabelType eType) } } +void SalInstanceLabel::set_font_color(const Color& rColor) +{ + if (rColor != COL_AUTO) + m_xLabel->SetControlForeground(rColor); + else + m_xLabel->SetControlForeground(); +} + void SalInstanceLabel::set_font(const vcl::Font& rFont) { m_xLabel->SetPointFont(*m_xLabel, rFont); @@ -5623,6 +5631,14 @@ void SalInstanceTextView::set_monospace(bool bMonospace) m_xTextView->SetControlFont(aFont); } +void SalInstanceTextView::set_font_color(const Color& rColor) +{ + if (rColor != COL_AUTO) + m_xTextView->SetControlForeground(rColor); + else + m_xTextView->SetControlForeground(); +} + void SalInstanceTextView::connect_cursor_position(const Link<TextView&, void>& rLink) { assert(!m_aCursorPositionHdl.IsSet()); diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 5e7f09c22a76..693200c6349a 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -12556,7 +12556,7 @@ private: pango_attr_list_unref(pAttrs); } - void set_bold_text_foreground_color(const Color& rColor) + void set_text_foreground_color(const Color& rColor, bool bSetBold) { guint16 nRed = rColor.GetRed() << 8; guint16 nGreen = rColor.GetRed() << 8; @@ -12564,14 +12564,19 @@ private: PangoAttrType aFilterAttrs[] = {PANGO_ATTR_FOREGROUND, PANGO_ATTR_WEIGHT, PANGO_ATTR_INVALID}; + if (!bSetBold) + aFilterAttrs[1] = PANGO_ATTR_INVALID; + PangoAttrList* pOrigList = gtk_label_get_attributes(m_pLabel); PangoAttrList* pAttrs = pOrigList ? pango_attr_list_filter(pOrigList, filter_pango_attrs, &aFilterAttrs) : nullptr; if (!pAttrs) pAttrs = pango_attr_list_new(); - pango_attr_list_insert(pAttrs, pango_attr_foreground_new(nRed, nGreen, nBlue)); - pango_attr_list_insert(pAttrs, pango_attr_weight_new(PANGO_WEIGHT_BOLD)); + if (rColor != COL_AUTO) + pango_attr_list_insert(pAttrs, pango_attr_foreground_new(nRed, nGreen, nBlue)); + if (bSetBold) + pango_attr_list_insert(pAttrs, pango_attr_weight_new(PANGO_WEIGHT_BOLD)); gtk_label_set_attributes(m_pLabel, pAttrs); pango_attr_list_unref(pAttrs); } @@ -12614,17 +12619,23 @@ public: set_text_background_color(Application::GetSettings().GetStyleSettings().GetHighlightColor()); break; case weld::LabelType::Title: - set_bold_text_foreground_color(Application::GetSettings().GetStyleSettings().GetLightColor()); + set_text_foreground_color(Application::GetSettings().GetStyleSettings().GetLightColor(), true); break; } } virtual void set_font(const vcl::Font& rFont) override { + // TODO, clear old props like set_text_foreground_color does PangoAttrList* pAttrList = create_attr_list(rFont); gtk_label_set_attributes(m_pLabel, pAttrList); pango_attr_list_unref(pAttrList); } + + virtual void set_font_color(const Color& rColor) override + { + set_text_foreground_color(rColor, false); + } }; } @@ -12645,6 +12656,7 @@ private: GtkTextView* m_pTextView; GtkTextBuffer* m_pTextBuffer; GtkAdjustment* m_pVAdjustment; + GtkCssProvider* m_pFgCssProvider; int m_nMaxTextLength; gulong m_nChangedSignalId; // we don't disable/enable this one, it's to implement max-length gulong m_nInsertTextSignalId; @@ -12733,6 +12745,7 @@ public: , m_pTextView(pTextView) , m_pTextBuffer(gtk_text_view_get_buffer(pTextView)) , m_pVAdjustment(gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(pTextView))) + , m_pFgCssProvider(nullptr) , m_nMaxTextLength(0) , m_nChangedSignalId(g_signal_connect(m_pTextBuffer, "changed", G_CALLBACK(signalChanged), this)) , m_nInsertTextSignalId(g_signal_connect_after(m_pTextBuffer, "insert-text", G_CALLBACK(signalInserText), this)) @@ -12823,6 +12836,28 @@ public: gtk_text_view_set_monospace(m_pTextView, bMonospace); } + virtual void set_font_color(const Color& rColor) override + { + const bool bRemoveColor = rColor == COL_AUTO; + if (bRemoveColor && !m_pFgCssProvider) + return; + GtkStyleContext *pWidgetContext = gtk_widget_get_style_context(GTK_WIDGET(m_pTextView)); + if (m_pFgCssProvider) + { + gtk_style_context_remove_provider(pWidgetContext, GTK_STYLE_PROVIDER(m_pFgCssProvider)); + m_pFgCssProvider = nullptr; + } + if (bRemoveColor) + return; + OUString sColor = rColor.AsRGBHexString(); + m_pFgCssProvider = gtk_css_provider_new(); + OUString aBuffer = "textview text { color: #" + sColor + "; }"; + OString aResult = OUStringToOString(aBuffer, RTL_TEXTENCODING_UTF8); + gtk_css_provider_load_from_data(m_pFgCssProvider, aResult.getStr(), aResult.getLength(), nullptr); + gtk_style_context_add_provider(pWidgetContext, GTK_STYLE_PROVIDER(m_pFgCssProvider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + virtual void disable_notify_events() override { g_signal_handler_block(m_pVAdjustment, m_nVAdjustChangedSignalId); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits