diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-10-17 16:41:58 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-10-17 20:57:23 +0100 |
commit | 69c9acd4b8dcd7ec8a5c3c380ad5cd8b797661ea (patch) | |
tree | ac61381e85b29e2b33ec1fc5a8915beca935cc2d | |
parent | 27466acb4eda3ec6432d575091effe6c3a780950 (diff) |
Resolves: tdf#92776 ensure correct notebook tab font color
despite various theme layout differences
Change-Id: I209258583571b57b2b7869937fa4821855125eac
-rw-r--r-- | vcl/inc/unx/gtk/gtkgdi.hxx | 13 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx | 133 |
2 files changed, 90 insertions, 56 deletions
diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx index ee3920706e88..514c71d1a9b7 100644 --- a/vcl/inc/unx/gtk/gtkgdi.hxx +++ b/vcl/inc/unx/gtk/gtkgdi.hxx @@ -33,6 +33,7 @@ enum class GtkControlPart { + ToplevelWindow, Button, LinkButton, CheckButton, @@ -72,6 +73,9 @@ enum class GtkControlPart NotebookStack, NotebookHeaderTabs, NotebookHeaderTabsTab, + NotebookHeaderTabsTabLabel, + NotebookHeaderTabsTabActiveLabel, + NotebookHeaderTabsTabHoverLabel, FrameBorder, MenuBar, MenuBarItem, @@ -118,10 +122,13 @@ public: virtual void GetResolution(sal_Int32& rDPIX, sal_Int32& rDPIY) override; - static GtkStyleContext* createNewContext(GtkControlPart ePart, gtk_widget_path_iter_set_object_nameFunc set_object_name); - static GtkStyleContext* createOldContext(GtkControlPart ePart); + GtkStyleContext* createStyleContext(gtk_widget_path_iter_set_object_nameFunc set_object_name, GtkControlPart ePart); + GtkStyleContext* createNewContext(GtkControlPart ePart, gtk_widget_path_iter_set_object_nameFunc set_object_name); + GtkStyleContext* createOldContext(GtkControlPart ePart); + GtkStyleContext* makeContext(GtkWidgetPath *pPath, GtkStyleContext *pParent); private: GtkWidget *mpWindow; + static GtkStyleContext *mpWindowStyle; static GtkStyleContext *mpButtonStyle; static GtkStyleContext *mpLinkButtonStyle; static GtkStyleContext *mpEntryStyle; @@ -171,6 +178,8 @@ private: static GtkStyleContext *mpNotebookHeaderTabsStyle; static GtkStyleContext *mpNotebookHeaderTabsTabStyle; static GtkStyleContext *mpNotebookHeaderTabsTabLabelStyle; + static GtkStyleContext *mpNotebookHeaderTabsTabActiveLabelStyle; + static GtkStyleContext *mpNotebookHeaderTabsTabHoverLabelStyle; static GtkStyleContext *mpMenuBarStyle; static GtkStyleContext *mpMenuBarItemStyle; static GtkStyleContext *mpMenuWindowStyle; diff --git a/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx index 3dcfb4a70e6a..670fad9559ea 100644 --- a/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx @@ -21,6 +21,7 @@ #include <boost/optional.hpp> +GtkStyleContext* GtkSalGraphics::mpWindowStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpButtonStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpLinkButtonStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpEntryStyle = nullptr; @@ -69,6 +70,9 @@ GtkStyleContext* GtkSalGraphics::mpNotebookStackStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpNotebookHeaderStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpNotebookHeaderTabsStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpNotebookHeaderTabsTabStyle = nullptr; +GtkStyleContext* GtkSalGraphics::mpNotebookHeaderTabsTabLabelStyle = nullptr; +GtkStyleContext* GtkSalGraphics::mpNotebookHeaderTabsTabActiveLabelStyle = nullptr; +GtkStyleContext* GtkSalGraphics::mpNotebookHeaderTabsTabHoverLabelStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpMenuBarStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpMenuBarItemStyle = nullptr; GtkStyleContext* GtkSalGraphics::mpMenuWindowStyle = nullptr; @@ -930,9 +934,10 @@ static GtkWidgetPath* buildRTLComboSiblingsPath(gtk_widget_path_iter_set_object_ return pSiblingsPath; } -static GtkStyleContext* makeContext(GtkWidgetPath *pPath, GtkStyleContext *pParent) +GtkStyleContext* GtkSalGraphics::makeContext(GtkWidgetPath *pPath, GtkStyleContext *pParent) { GtkStyleContext* context = gtk_style_context_new(); + gtk_style_context_set_screen(context, gtk_window_get_screen(GTK_WINDOW(mpWindow))); gtk_style_context_set_path(context, pPath); gtk_style_context_set_parent(context, pParent); gtk_widget_path_unref(pPath); @@ -943,6 +948,14 @@ GtkStyleContext* GtkSalGraphics::createNewContext(GtkControlPart ePart, gtk_widg { switch (ePart) { + case GtkControlPart::ToplevelWindow: + { + GtkWidgetPath *path = gtk_widget_path_new(); + gtk_widget_path_append_type(path, G_TYPE_NONE); + set_object_name(path, -1, "window"); + gtk_widget_path_iter_add_class(path, -1, "background"); + return makeContext(path, nullptr); + } case GtkControlPart::Button: { GtkWidgetPath *path = gtk_widget_path_new(); @@ -1225,6 +1238,16 @@ GtkStyleContext* GtkSalGraphics::createNewContext(GtkControlPart ePart, gtk_widg gtk_widget_path_iter_add_class(path, -1, "top"); return makeContext(path, mpNotebookHeaderTabsStyle); } + case GtkControlPart::NotebookHeaderTabsTabLabel: + { + GtkWidgetPath *path = gtk_widget_path_copy(gtk_style_context_get_path(mpNotebookHeaderTabsTabStyle)); + gtk_widget_path_append_type(path, G_TYPE_NONE); + set_object_name(path, -1, "label"); + return makeContext(path, mpNotebookHeaderTabsTabStyle); + } + case GtkControlPart::NotebookHeaderTabsTabActiveLabel: + case GtkControlPart::NotebookHeaderTabsTabHoverLabel: + return mpNotebookHeaderTabsTabLabelStyle; case GtkControlPart::FrameBorder: { GtkWidgetPath *path = gtk_widget_path_new(); @@ -1339,6 +1362,13 @@ GtkStyleContext* GtkSalGraphics::createOldContext(GtkControlPart ePart) { switch (ePart) { + case GtkControlPart::ToplevelWindow: + { + GtkWidgetPath *path = gtk_widget_path_new(); + gtk_widget_path_append_type(path, GTK_TYPE_WINDOW); + gtk_widget_path_iter_add_class(path, -1, "background"); + return makeContext(path, nullptr); + } case GtkControlPart::Button: { GtkWidgetPath *path = gtk_widget_path_new(); @@ -1508,11 +1538,11 @@ GtkStyleContext* GtkSalGraphics::createOldContext(GtkControlPart ePart) } case GtkControlPart::Notebook: { - GtkWidgetPath *path = gtk_widget_path_new(); + GtkWidgetPath *path = gtk_widget_path_copy(gtk_style_context_get_path(mpWindowStyle)); gtk_widget_path_append_type(path, GTK_TYPE_NOTEBOOK); gtk_widget_path_iter_add_class(path, -1, GTK_STYLE_CLASS_NOTEBOOK); gtk_widget_path_iter_add_class(path, -1, "frame"); - return makeContext(path, nullptr); + return makeContext(path, mpWindowStyle); } case GtkControlPart::NotebookStack: return mpNotebookStyle; @@ -1521,7 +1551,7 @@ GtkStyleContext* GtkSalGraphics::createOldContext(GtkControlPart ePart) GtkWidgetPath *path = gtk_widget_path_copy(gtk_style_context_get_path(mpNotebookStyle)); gtk_widget_path_iter_add_class(path, -1, GTK_STYLE_CLASS_HEADER); gtk_widget_path_iter_add_class(path, -1, "top"); - return makeContext(path, nullptr); + return makeContext(path, gtk_style_context_get_parent(mpNotebookStyle)); } case GtkControlPart::NotebookHeaderTabs: return mpNotebookHeaderStyle; @@ -1531,9 +1561,33 @@ GtkStyleContext* GtkSalGraphics::createOldContext(GtkControlPart ePart) gtk_widget_path_append_type(path, GTK_TYPE_NOTEBOOK); gtk_widget_path_iter_add_class(path, -1, GTK_STYLE_CLASS_HEADER); gtk_widget_path_iter_add_class(path, -1, "top"); - GtkStyleContext* pContext = makeContext(path, mpNotebookHeaderTabsStyle); - gtk_style_context_add_region(pContext, GTK_STYLE_REGION_TAB, GTK_REGION_ONLY); - return pContext; + gtk_widget_path_iter_add_region(path, -1, GTK_STYLE_REGION_TAB, static_cast<GtkRegionFlags>(GTK_REGION_EVEN | GTK_REGION_FIRST)); + return makeContext(path, mpNotebookHeaderTabsStyle); + } + case GtkControlPart::NotebookHeaderTabsTabLabel: + { + GtkWidgetPath *path = gtk_widget_path_copy(gtk_style_context_get_path(mpNotebookHeaderTabsTabStyle)); + gtk_widget_path_append_type(path, GTK_TYPE_LABEL); + gtk_widget_path_iter_add_class(path, -1, GTK_STYLE_CLASS_LABEL); + return makeContext(path, mpNotebookHeaderTabsTabStyle); + } + case GtkControlPart::NotebookHeaderTabsTabActiveLabel: + { + GtkWidgetPath *path = gtk_widget_path_copy(gtk_style_context_get_path(mpNotebookHeaderTabsTabStyle)); + gtk_widget_path_append_type(path, GTK_TYPE_LABEL); + gtk_widget_path_iter_add_class(path, -1, GTK_STYLE_CLASS_LABEL); + GtkStyleContext* pRet = makeContext(path, mpNotebookHeaderTabsTabStyle); + gtk_style_context_add_class(pRet, "active-page"); + return pRet; + } + case GtkControlPart::NotebookHeaderTabsTabHoverLabel: + { + GtkWidgetPath *path = gtk_widget_path_copy(gtk_style_context_get_path(mpNotebookHeaderTabsTabStyle)); + gtk_widget_path_append_type(path, GTK_TYPE_LABEL); + gtk_widget_path_iter_add_class(path, -1, GTK_STYLE_CLASS_LABEL); + GtkStyleContext* pRet = makeContext(path, mpNotebookHeaderTabsTabStyle); + gtk_style_context_add_class(pRet, "prelight-page"); + return pRet; } case GtkControlPart::FrameBorder: { @@ -1645,12 +1699,12 @@ GtkStyleContext* GtkSalGraphics::createOldContext(GtkControlPart ePart) return mpButtonStyle; } -static GtkStyleContext* createStyleContext(gtk_widget_path_iter_set_object_nameFunc set_object_name, - GtkControlPart ePart) +GtkStyleContext* GtkSalGraphics::createStyleContext(gtk_widget_path_iter_set_object_nameFunc set_object_name, + GtkControlPart ePart) { if (set_object_name) - return GtkSalGraphics::createNewContext(ePart, set_object_name); - return GtkSalGraphics::createOldContext(ePart); + return createNewContext(ePart, set_object_name); + return createOldContext(ePart); } namespace @@ -2418,7 +2472,7 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings ) aStyleSet.SetGroupFont( aFont ); aFont.SetWeight( WEIGHT_BOLD ); - aStyleSet.SetTabFont( aFont ); //pull from notebook style + GTK_STYLE_REGION_TAB ? + aStyleSet.SetTabFont( aFont ); //pull from notebook style? aStyleSet.SetTitleFont( aFont ); aStyleSet.SetFloatTitleFont( aFont ); @@ -2549,64 +2603,30 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings ) aStyleSet.SetVisitedLinkColor(getColor(text_color)); #endif - if (gtk_check_version(3, 20, 0) == nullptr) { - GtkStyleContext *pCStyle = mpNotebookHeaderTabsTabStyle; - + GtkStyleContext *pCStyle = mpNotebookHeaderTabsTabLabelStyle; style_context_set_state(pCStyle, GTK_STATE_FLAG_NORMAL); gtk_style_context_get_color(pCStyle, gtk_style_context_get_state(pCStyle), &text_color); aTextColor = getColor( text_color ); aStyleSet.SetTabTextColor(aTextColor); + } - // mouse over text colors + // mouse over text colors + { + GtkStyleContext *pCStyle = mpNotebookHeaderTabsTabHoverLabelStyle; style_context_set_state(pCStyle, GTK_STATE_FLAG_PRELIGHT); gtk_style_context_get_color(pCStyle, gtk_style_context_get_state(pCStyle), &text_color); aTextColor = getColor( text_color ); aStyleSet.SetTabRolloverTextColor(aTextColor); + } + { + GtkStyleContext *pCStyle = mpNotebookHeaderTabsTabActiveLabelStyle; style_context_set_state(pCStyle, ACTIVE_TAB()); gtk_style_context_get_color(pCStyle, gtk_style_context_get_state(pCStyle), &text_color); aTextColor = getColor( text_color ); aStyleSet.SetTabHighlightTextColor(aTextColor); } - else - { - GtkStyleContext *pCStyle = gtk_style_context_new(); - gtk_style_context_set_screen( pCStyle, gtk_window_get_screen( GTK_WINDOW( mpWindow ) ) ); - GtkWidgetPath *pCPath = gtk_widget_path_new(); - guint pos = gtk_widget_path_append_type(pCPath, GTK_TYPE_NOTEBOOK); - gtk_widget_path_iter_add_class(pCPath, pos, GTK_STYLE_CLASS_NOTEBOOK); - gtk_widget_path_iter_add_region(pCPath, pos, GTK_STYLE_REGION_TAB, static_cast<GtkRegionFlags>(GTK_REGION_EVEN | GTK_REGION_FIRST)); - pos = gtk_widget_path_append_type (pCPath, GTK_TYPE_LABEL); -#if GTK_CHECK_VERSION(3,16,0) - gtk_widget_path_iter_add_class(pCPath, pos, GTK_STYLE_CLASS_LABEL); -#endif - pCStyle = gtk_style_context_new(); - gtk_style_context_set_path(pCStyle, pCPath); - gtk_widget_path_free(pCPath); - - style_context_set_state(pCStyle, GTK_STATE_FLAG_NORMAL); - gtk_style_context_get_color(pCStyle, gtk_style_context_get_state(pCStyle), &text_color); - aTextColor = getColor( text_color ); - aStyleSet.SetTabTextColor(aTextColor); - - // mouse over text colors - gtk_style_context_add_class(pCStyle, "prelight-page"); - style_context_set_state(pCStyle, GTK_STATE_FLAG_PRELIGHT); - gtk_style_context_get_color(pCStyle, gtk_style_context_get_state(pCStyle), &text_color); - gtk_style_context_remove_class(pCStyle, "prelight-page"); - aTextColor = getColor( text_color ); - aStyleSet.SetTabRolloverTextColor(aTextColor); - - gtk_style_context_add_class(pCStyle, "active-page"); - style_context_set_state(pCStyle, GTK_STATE_FLAG_ACTIVE); - gtk_style_context_get_color(pCStyle, gtk_style_context_get_state(pCStyle), &text_color); - gtk_style_context_remove_class(pCStyle, "active-page"); - aTextColor = getColor( text_color ); - aStyleSet.SetTabHighlightTextColor(aTextColor); - - g_object_unref( pCStyle ); - } // get cursor blink time gboolean blink = false; @@ -2877,6 +2897,8 @@ GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow ) gEntryBox = gtk_entry_new(); gtk_container_add(GTK_CONTAINER(gDumbContainer), gEntryBox); + + mpWindowStyle = createStyleContext(set_object_name, GtkControlPart::ToplevelWindow); mpEntryStyle = createStyleContext(set_object_name, GtkControlPart::Entry); getStyleContext(&mpTextViewStyle, gtk_text_view_new()); @@ -2928,6 +2950,9 @@ GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow ) mpNotebookHeaderStyle = createStyleContext(set_object_name, GtkControlPart::NotebookHeader); mpNotebookHeaderTabsStyle = createStyleContext(set_object_name, GtkControlPart::NotebookHeaderTabs); mpNotebookHeaderTabsTabStyle = createStyleContext(set_object_name, GtkControlPart::NotebookHeaderTabsTab); + mpNotebookHeaderTabsTabLabelStyle = createStyleContext(set_object_name, GtkControlPart::NotebookHeaderTabsTabLabel); + mpNotebookHeaderTabsTabActiveLabelStyle = createStyleContext(set_object_name, GtkControlPart::NotebookHeaderTabsTabActiveLabel); + mpNotebookHeaderTabsTabHoverLabelStyle = createStyleContext(set_object_name, GtkControlPart::NotebookHeaderTabsTabHoverLabel); /* Combobox */ gComboBox = gtk_combo_box_text_new_with_entry(); |