From f8b7a0e193064acffc23d17c192c13fa9da09f6c Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Fri, 11 Oct 2019 17:27:31 +0000 Subject: [PATCH 1/3] Separate adwaita specific styling to allow better theming --- share/ui/Adwaita-dark | 62 ++++++++++++++++++++++++++++++++++++++++++ share/ui/Adwaita.css | 63 +++++++++++++++++++++++++++++++++++++++++++ share/ui/style.css | 48 +-------------------------------- src/inkscape.cpp | 36 ++++++++++--------------- 4 files changed, 140 insertions(+), 69 deletions(-) create mode 100644 share/ui/Adwaita-dark create mode 100644 share/ui/Adwaita.css diff --git a/share/ui/Adwaita-dark b/share/ui/Adwaita-dark new file mode 100644 index 0000000000..db89ba272a --- /dev/null +++ b/share/ui/Adwaita-dark @@ -0,0 +1,62 @@ +/* ADWAITA DARK SPECIFIC STYLE */ + +/* + * Keep as small as possible + */ + +spinbutton { + padding: 0; + outline-style: none; +} + +spinbutton entry { + padding-left: 2px; + padding-right: 0; +} + +spinbutton undershoot { + outline-style: none; +} + +spinbutton entry { + padding-left: 2px; + padding-right: 0; +} + +spinbutton undershoot { + outline-style: none; +} + +.inkswitch slider { + min-width: 18px; + min-height: 18px; +} + +.inkswitch image { + color: transparent; + background-color: transparent; + background-image: image(transparent); + -gtk-icon-style:symbolic; +} + +.inkswitch { + margin: 2px; + padding: 0; + font-size: 8px; +} + +/* Reduce width of +/- buttons. */ +.up, +.down { + padding-left: 0; + padding-right: 0; +} + +#monoStrokeWidth, +#fillEmptySpace, +#SelectStatus, +#CoordinateStatusX, +#CoordinateStatusY, +#DesktopMainTable spinbutton{ + font-family: sans-serif; +} \ No newline at end of file diff --git a/share/ui/Adwaita.css b/share/ui/Adwaita.css new file mode 100644 index 0000000000..ebec8d2ee7 --- /dev/null +++ b/share/ui/Adwaita.css @@ -0,0 +1,63 @@ +/* ADWAITA SPECIFIC STYLE */ + + +/* + * Keep as small as possible + */ + +spinbutton { + padding: 0; + outline-style: none; +} + +spinbutton entry { + padding-left: 2px; + padding-right: 0; +} + +spinbutton undershoot { + outline-style: none; +} + +spinbutton entry { + padding-left: 2px; + padding-right: 0; +} + +spinbutton undershoot { + outline-style: none; +} + +.inkswitch slider { + min-width: 18px; + min-height: 18px; +} + +.inkswitch image { + color: transparent; + background-color: transparent; + background-image: image(transparent); + -gtk-icon-style:symbolic; +} + +.inkswitch { + margin: 2px; + padding: 0; + font-size: 8px; +} + +/* Reduce width of +/- buttons. */ +.up, +.down { + padding-left: 0; + padding-right: 0; +} + +#monoStrokeWidth, +#fillEmptySpace, +#SelectStatus, +#CoordinateStatusX, +#CoordinateStatusY, +#DesktopMainTable spinbutton{ + font-family: sans-serif; +} \ No newline at end of file diff --git a/share/ui/style.css b/share/ui/style.css index b103c323b6..46a4de0cd8 100644 --- a/share/ui/style.css +++ b/share/ui/style.css @@ -122,6 +122,7 @@ color: inherit; } +/* atribute dialog popup size */ .attrpop textview { font-size: 13px; } @@ -149,29 +150,6 @@ color: @success_color; } -spinbutton { - padding: 0; - outline-style: none; -} - -spinbutton entry { - padding-left: 2px; - padding-right: 0; -} - -spinbutton undershoot { - outline-style: none; -} - -spinbutton entry { - padding-left: 2px; - padding-right: 0; -} - -spinbutton undershoot { - outline-style: none; -} - iconview *:hover { border-width: 1px; border-color: @theme_fg_color; @@ -187,23 +165,6 @@ iconview *:hover { font-size: 11px; } -.inkswitch slider { - min-width: 18px; - min-height: 18px; -} - -.inkswitch image { - color: transparent; - background-color: transparent; - background-image: image(transparent); - -gtk-icon-style:symbolic; -} - -.inkswitch { - margin: 2px; - padding: 0; - font-size: 8px; -} /* LPE Dialog add */ #LPESelectorFlowBox GtkFlowBoxChild, @@ -404,13 +365,6 @@ SPCanvas { padding-right: 0; } -/* Reduce width of +/- buttons. */ -.up, -.down { - padding-left: 0; - padding-right: 0; -} - /* InkSpinScale */ #InkSpinScale { background: @theme_bg_color; diff --git a/src/inkscape.cpp b/src/inkscape.cpp index 030072df80..b6298895b7 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -558,7 +558,6 @@ void Application::add_gtk_css() // Add style sheet (GTK3) auto const screen = Gdk::Screen::get_default(); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gchar *gtk_font_name = nullptr; gchar *gtkThemeName = nullptr; gchar *gtkIconThemeName = nullptr; Glib::ustring themeiconname; @@ -584,7 +583,7 @@ void Application::add_gtk_css() } else { prefs->setString("/theme/iconTheme", Glib::ustring(gtkIconThemeName)); } - g_object_get(settings, "gtk-font-name", >k_font_name, NULL); + } g_free(gtkThemeName); @@ -601,6 +600,19 @@ void Application::add_gtk_css() } Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } + + style = get_filename(UIS, prefs->getString("/theme/gtkTheme") + ".css"); + if (!style.empty()) { + auto provider = Gtk::CssProvider::create(); + try { + provider->load_from_path(style); + } catch (const Gtk::CssProviderError &ex) { + g_critical("CSSProviderError::load_from_path(): failed to load '%s'\n(%s)", style.c_str(), + ex.what().c_str()); + } + Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + if (!colorizeprovider) { colorizeprovider = Gtk::CssProvider::create(); } @@ -614,26 +626,6 @@ void Application::add_gtk_css() g_critical("CSSProviderError::load_from_data(): failed to load '%s'\n(%s)", css_str.c_str(), ex.what().c_str()); } Gtk::StyleContext::add_provider_for_screen(screen, colorizeprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - - if (gtk_font_name && !strncmp(gtk_font_name, "Cantarell", 9)) { - auto provider = Gtk::CssProvider::create(); - css_str = "#monoStrokeWidth,"; - css_str += "#fillEmptySpace,"; - css_str += "#SelectStatus,"; - css_str += "#CoordinateStatusX,"; - css_str += "#CoordinateStatusY,"; - css_str += "#DesktopMainTable spinbutton{"; - css_str += " font-family: sans-serif;"; - css_str += "}"; // we also can add to * but seems to me Cantarell looks better for other places - try { - provider->load_from_data(css_str); - } catch (const Gtk::CssProviderError &ex) { - g_critical("CSSProviderError::load_from_data(): failed to load '%s'\n(%s)", css_str.c_str(), - ex.what().c_str()); - } - Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - } - g_free(gtk_font_name); } void Application::readStyleSheets(bool forceupd) -- GitLab From f92663a5edb150b72df0359861b9c1a7c4f8f965 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Fri, 11 Oct 2019 18:47:36 +0000 Subject: [PATCH 2/3] Fix string type --- src/inkscape.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/inkscape.cpp b/src/inkscape.cpp index b6298895b7..c8193440fb 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -600,8 +600,9 @@ void Application::add_gtk_css() } Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } - - style = get_filename(UIS, prefs->getString("/theme/gtkTheme") + ".css"); + Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme"); + gtkthemename += ".css"; + style = get_filename(UIS, gtkthemename.c_str()); if (!style.empty()) { auto provider = Gtk::CssProvider::create(); try { -- GitLab From cd511a25cbea59ba23c87dc327d88b5afee8b040 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Fri, 11 Oct 2019 20:04:35 +0000 Subject: [PATCH 3/3] Fix some issues on theme change --- share/ui/{Adwaita-dark => Adwaita-dark.css} | 0 src/inkscape.cpp | 12 +++++++++--- src/inkscape.h | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) rename share/ui/{Adwaita-dark => Adwaita-dark.css} (100%) diff --git a/share/ui/Adwaita-dark b/share/ui/Adwaita-dark.css similarity index 100% rename from share/ui/Adwaita-dark rename to share/ui/Adwaita-dark.css diff --git a/src/inkscape.cpp b/src/inkscape.cpp index c8193440fb..5a49b1ade3 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -600,18 +600,24 @@ void Application::add_gtk_css() } Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } + Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme"); gtkthemename += ".css"; style = get_filename(UIS, gtkthemename.c_str()); if (!style.empty()) { - auto provider = Gtk::CssProvider::create(); + if (themeprovider) { + Gtk::StyleContext::remove_provider_for_screen(screen, themeprovider); + } + if (!themeprovider) { + themeprovider = Gtk::CssProvider::create(); + } try { - provider->load_from_path(style); + themeprovider->load_from_path(style); } catch (const Gtk::CssProviderError &ex) { g_critical("CSSProviderError::load_from_path(): failed to load '%s'\n(%s)", style.c_str(), ex.what().c_str()); } - Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + Gtk::StyleContext::add_provider_for_screen(screen, themeprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } if (!colorizeprovider) { diff --git a/src/inkscape.h b/src/inkscape.h index 897f9e2963..2ee35651a2 100644 --- a/src/inkscape.h +++ b/src/inkscape.h @@ -109,6 +109,7 @@ public: Inkscape::UI::Tools::ToolBase * active_event_context(); SPDocument * active_document(); SPDesktop * active_desktop(); + Glib::RefPtr themeprovider; Glib::RefPtr colorizeprovider; // Use this function to get selection model etc for a document Inkscape::ActionContext action_context_for_document(SPDocument *doc); -- GitLab