summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/inkscape-preferences.cpp
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-01-26 05:16:02 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-01-27 00:40:25 +0000
commite0471fb385a7250815528d23f0c2ecbbca675d42 (patch)
tree33ac5b8f91a55e7de73cd61dcb206f2e2e04ce78 /src/ui/dialog/inkscape-preferences.cpp
parentAdd style file (diff)
downloadinkscape-e0471fb385a7250815528d23f0c2ecbbca675d42.tar.gz
inkscape-e0471fb385a7250815528d23f0c2ecbbca675d42.zip
Adding styling refactoring, moving after to other branch the CSS part
Diffstat (limited to 'src/ui/dialog/inkscape-preferences.cpp')
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp74
1 files changed, 63 insertions, 11 deletions
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index 6634ef170..158aeb617 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -43,6 +43,7 @@
#include "selection.h"
#include "shortcuts.h"
#include "verbs.h"
+#include "inkscape-window.h"
#include "display/canvas-grid.h"
#include "display/nr-filter-gaussian.h"
@@ -59,6 +60,7 @@
#include "svg/svg-color.h"
#include "ui/interface.h"
#include "ui/widget/style-swatch.h"
+#include "widgets/desktop-widget.h"
#ifdef HAVE_ASPELL
# include <aspell.h>
@@ -679,30 +681,34 @@ void InkscapePreferences::symbolicDefaultColor(){
void InkscapePreferences::symbolicAddClass()
{
+ using namespace Inkscape::IO::Resource;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setBool("/theme/symbolicIconsDefaultColor", false);
auto const screen = Gdk::Screen::get_default();
auto provider = Gtk::CssProvider::create();
Glib::ustring css_str = "";
+
+ gchar colornamed[64];
+ gchar colornamed_inverse[64];
+ int colorset = prefs->getInt("/theme/symbolicColor", 0x000000ff);
+ sp_svg_write_color(colornamed, sizeof(colornamed), colorset);
+ // Use in case the special widgets have inverse theme background and symbolic
+ int colorset_inverse = colorset ^ 0xffffff00;
+ sp_svg_write_color(colornamed_inverse, sizeof(colornamed_inverse), colorset_inverse);
if (prefs->getBool("/theme/symbolicIcons", false)) {
- int colorset = prefs->getInt("/theme/symbolicColor", 0x000000ff);
- gchar colornamed[64];
- sp_svg_write_color(colornamed, sizeof(colornamed), colorset);
- // Use in case the special widgets have inverse theme background and symbolic
- int colorset_inverse = colorset ^ 0xffffff00;
- gchar colornamed_inverse[64];
- sp_svg_write_color(colornamed_inverse, sizeof(colornamed_inverse), colorset_inverse);
css_str += "*{ -gtk-icon-style: symbolic;}";
css_str += "image{ color:";
css_str += colornamed;
css_str += ";}";
- css_str += "iconinverse{ color:";
- css_str += colornamed_inverse;
- css_str += ";}";
- css_str += "iconregular{ -gtk-icon-style: regular;}";
} else {
css_str += "*{-gtk-icon-style: regular;}";
}
+ css_str += ".iconcolornamed, .iconcolornamed image{ color:";
+ css_str += colornamed;
+ css_str += ";}";
+ css_str += ".iconcolornamedinverse, .colornamedinverse image{ color:";
+ css_str += colornamed_inverse;
+ css_str += ";}";
// From 3.16, throws an error which we must catch.
try {
provider->load_from_data(css_str);
@@ -717,6 +723,29 @@ void InkscapePreferences::symbolicAddClass()
}
#endif
Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ // we want a tiny file with 3 or 4 lines, so we can load without removing context
+ // is more understandable than record previously applied
+ Glib::ustring style = get_filename(UIS, "style.css");
+ if (!style.empty()) {
+ auto provider = Gtk::CssProvider::create();
+
+ // From 3.16, throws an error which we must catch.
+ try {
+ provider->load_from_path (style);
+ }
+#if GTK_CHECK_VERSION(3,16,0)
+ // Gtk::CssProviderError not defined until 3.16.
+ catch (const Gtk::CssProviderError& ex)
+ {
+ g_critical("CSSProviderError::load_from_path(): failed to load '%s'\n(%s)",
+ style.c_str(), ex.what().c_str());
+ }
+#else
+ catch (...)
+ {}
+#endif
+ Gtk::StyleContext::add_provider_for_screen (screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
}
void InkscapePreferences::themeChange()
{
@@ -724,6 +753,29 @@ void InkscapePreferences::themeChange()
g_object_set(gtk_settings_get_default(), "gtk-theme-name", prefs->getString("/theme/gtkTheme").c_str(), NULL);
g_object_set(gtk_settings_get_default(), "gtk-application-prefer-dark-theme",
prefs->getBool("/theme/darkTheme", false), NULL);
+ gchar *gtkThemeName;
+ gboolean gtkApplicationPreferDarkTheme;
+ Gtk::Window *window = SP_ACTIVE_DESKTOP->getToplevel();
+ GtkSettings *settings = gtk_settings_get_default();
+ if (window && settings) {
+ g_object_get(settings, "gtk-theme-name", &gtkThemeName, NULL);
+ g_object_get(settings, "gtk-application-prefer-dark-theme", &gtkApplicationPreferDarkTheme, NULL);
+ bool dark = gtkApplicationPreferDarkTheme || Glib::ustring(gtkThemeName).find(":dark") != -1;
+ if (!dark) {
+ Glib::RefPtr<Gtk::StyleContext> stylecontext = window->get_style_context();
+ Gdk::RGBA rgba;
+ bool background_set = stylecontext->lookup_color("theme_bg_color", rgba);
+ if (background_set && rgba.get_red() + rgba.get_green() + rgba.get_blue() < 1.0) {
+ dark = true;
+ }
+ }
+ if (dark)
+ {
+ window->get_style_context()->add_class("dark");
+ } else {
+ window->get_style_context()->remove_class("dark");
+ }
+ }
}
void InkscapePreferences::initPageUI()