diff options
| author | Jabiertxof <jabier.arraiza@marker.es> | 2019-08-03 11:04:56 +0000 |
|---|---|---|
| committer | Jabiertxof <jabier.arraiza@marker.es> | 2019-08-03 11:04:56 +0000 |
| commit | 8188af28103fe5badfcba8635279775f06bebfff (patch) | |
| tree | a0a3320083188253455b0d7829cad93386cb8bec /src/inkscape.cpp | |
| parent | Initial code (diff) | |
| download | inkscape-8188af28103fe5badfcba8635279775f06bebfff.tar.gz inkscape-8188af28103fe5badfcba8635279775f06bebfff.zip | |
Add custom GTK3 themes inside Inkscape
Diffstat (limited to 'src/inkscape.cpp')
| -rw-r--r-- | src/inkscape.cpp | 90 |
1 files changed, 64 insertions, 26 deletions
diff --git a/src/inkscape.cpp b/src/inkscape.cpp index 2164a90a2..71ed178b7 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -541,6 +541,64 @@ Glib::ustring Application::get_symbolic_colors() /** * \brief Add our CSS style sheets */ +void Application::add_inkscape_css() +{ + using namespace Inkscape::IO::Resource; + auto const screen = Gdk::Screen::get_default(); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + if (!customcssprovider) { + customcssprovider = Gtk::CssProvider::create(); + } else { + Gtk::StyleContext::remove_provider_for_screen(screen, customcssprovider); + } + Glib::ustring customthemename = prefs->getString("/theme/gtkTheme"); + if (customthemename.find("inkscapecustom::") != -1) { + customthemename = customthemename.substr(16); + Glib::ustring style = customthemename + "/gtk-3.0/gtk.css"; + bool dark = prefs->getBool("/theme/preferDarkTheme", false) || customthemename.find(":dark") != -1; + if (dark) { + style = customthemename + "/gtk-3.0/gtk-dark.css"; + } + style = get_filename(THEMES, style.c_str()); + if (!style.empty()) { + try { + customcssprovider->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, customcssprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + } + Glib::ustring style = get_filename(UIS, "style.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(); + } + Glib::ustring css_str = ""; + if (prefs->getBool("/theme/symbolicIcons", false)) { + css_str = get_symbolic_colors(); + } + try { + colorizeprovider->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, colorizeprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); +} + +/** + * \brief Add our CSS style sheets + */ void Application::add_gtk_css() { using namespace Inkscape::IO::Resource; @@ -563,6 +621,10 @@ void Application::add_gtk_css() prefs->setString("/theme/defaultIconTheme", Glib::ustring(gtkIconThemeName)); Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme"); if (gtkthemename != "") { + if (gtkthemename.find("inkscapecustom::") != -1) { + //we use adwaita as base of all custom CSS, seems more standar than user default theme than can make unwanted results + gtkthemename = "Adwaita"; + } g_object_set(settings, "gtk-theme-name", gtkthemename.c_str(), NULL); } else { prefs->setString("/theme/gtkTheme", Glib::ustring(gtkThemeName)); @@ -575,33 +637,9 @@ void Application::add_gtk_css() } g_object_get(settings, "gtk-font-name", >k_font_name, NULL); } - - - Glib::ustring style = get_filename(UIS, "style.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(); - } + add_inkscape_css(); + Glib::ustring css_str = ""; - if (prefs->getBool("/theme/symbolicIcons", false)) { - css_str = get_symbolic_colors(); - } - try { - colorizeprovider->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, colorizeprovider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - if (!strncmp(gtk_font_name, "Cantarell", 9)) { auto provider = Gtk::CssProvider::create(); css_str = "#monoStrokeWidth,"; |
