From aaa7bc6e42e3ad7f718044df7298556b805ed5a0 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Fri, 21 Jun 2019 16:05:21 +0200 Subject: Bug fixing of update colors --- .../symbolic/actions/color-fill-symbolic.svg | 34 ++- src/inkscape.cpp | 6 +- src/ui/dialog/inkscape-preferences.cpp | 254 ++++++++++++--------- 3 files changed, 157 insertions(+), 137 deletions(-) diff --git a/share/icons/nextgen/symbolic/actions/color-fill-symbolic.svg b/share/icons/nextgen/symbolic/actions/color-fill-symbolic.svg index 3c033f124..0121d6b0b 100644 --- a/share/icons/nextgen/symbolic/actions/color-fill-symbolic.svg +++ b/share/icons/nextgen/symbolic/actions/color-fill-symbolic.svg @@ -14,15 +14,16 @@ viewBox="0 0 16 16" sodipodi:docname="color-fill-symbolic.svg" inkscape:version="1.0alpha2 (2892b301b3, 2019-06-19)"> - - + + @@ -140,11 +141,6 @@ - @@ -170,14 +165,12 @@ inkscape:connector-curvature="0" class="error" d="M 8.7193115,11.918048 C 8.195008,12.400794 6.5589297,11.476834 5.0650285,9.8543264 3.5711272,8.2318186 2.7851132,6.5251737 3.3094174,6.0424287 3.8337212,5.5596835 5.4697993,6.4836433 6.9637003,8.1061507 8.4576013,9.7286581 9.2436152,11.435303 8.7193115,11.918048 Z" - style="stroke-width:0.496753" id="fillinside" /> @@ -185,10 +178,9 @@ sodipodi:nodetypes="csssc" inkscape:connector-curvature="0" id="border" - style="display:inline;opacity:1;fill:#000000;fill-rule:nonzero;stroke:none;stroke-width:1.67244" transform="matrix(0.65238321,-0.65238321,0.65238321,0.65238321,0.58802838,0.36789635)" d="m -2.4566457,14.349953 c -0.057771,0.05951 0.01271,0.02646 0.01271,0.02646 0,0 0.070481,0.03306 0.01271,-0.02646 -0.3781875,-0.389602 -0.7345816,-1.698749 -0.7345817,-3.464201 0,-1.7654525 0.3563942,-3.0746004 0.7345817,-3.4642019 0.057771,-0.059514 -0.01271,-0.026455 -0.01271,-0.026455 0,0 -0.070481,-0.033059 -0.01271,0.026455 0.3781875,0.3896016 0.7345816,1.6987496 0.7345816,3.4642019 -10e-8,1.765452 -0.3563942,3.074599 -0.7345816,3.464201 z m 0.01271,-8.154858 c -1.3258575,-4e-7 -1.9218719,2.3692339 -1.9218719,4.690657 1e-7,2.321423 0.5960145,4.690656 1.9218717,4.690656 1.3258572,0 1.9218715,-2.369233 1.9218716,-4.690656 0,-2.3214229 -0.5960142,-4.690657 -1.9218714,-4.690657 z" - class="cls-2 base" + class="base" inkscape:path-effect="#path-effect134-3" inkscape:original-d="m -1.122064,10.885752 c -1e-7,2.259207 -0.5918222,4.090656 -1.3218716,4.090656 -0.7300495,0 -1.3218716,-1.831449 -1.3218717,-4.090656 0,-2.2592076 0.5918221,-4.0906572 1.3218717,-4.090657 0.7300496,0 1.3218716,1.8314496 1.3218716,4.090657 z" /> getInt("/theme/" + themeiconname + "/symbolicBaseColor", colorsetbase); - sp_svg_write_color(colornamed, sizeof(colornamed), colorsetbase); colorsetsuccess = prefs->getInt("/theme/" + themeiconname + "/symbolicSuccessColor", colorsetsuccess); - sp_svg_write_color(colornamedsuccess, sizeof(colornamedsuccess), colorsetsuccess); colorsetwarning = prefs->getInt("/theme/" + themeiconname + "/symbolicWarningColor", colorsetwarning); - sp_svg_write_color(colornamedwarning, sizeof(colornamedwarning), colorsetwarning); colorseterror = prefs->getInt("/theme/" + themeiconname + "/symbolicErrorColor", colorseterror); + sp_svg_write_color(colornamed, sizeof(colornamed), colorsetbase); + sp_svg_write_color(colornamedsuccess, sizeof(colornamedsuccess), colorsetsuccess); + sp_svg_write_color(colornamedwarning, sizeof(colornamedwarning), colorsetwarning); sp_svg_write_color(colornamederror, sizeof(colornamederror), colorseterror); sp_svg_write_color(colornamed_inverse, sizeof(colornamed_inverse), colorsetbase_inverse); css_str += "*{-gtk-icon-palette: success "; diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 6b796b8c8..bfb4b7cd5 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -583,108 +583,6 @@ static void _inkscape_fill_gtk(const gchar *path, GHashTable *t) g_dir_close(dir); } -void InkscapePreferences::symbolicThemeCheck() -{ - using namespace Inkscape::IO::Resource; - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - bool symbolic = false; - GtkSettings *settings = gtk_settings_get_default(); - if (settings) { - Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); - if (themeiconname != "") { - g_object_set(settings, "gtk-icon-theme-name", themeiconname.c_str(), NULL); - } - } - if (prefs->getString("/theme/defaultIconTheme") != prefs->getString("/theme/iconTheme")) { - auto folders = get_foldernames(ICONS, { "application" }); - for (auto &folder : folders) { - auto path = folder; - const size_t last_slash_idx = folder.find_last_of("\\/"); - if (std::string::npos != last_slash_idx) { - folder.erase(0, last_slash_idx + 1); - } - if (folder == prefs->getString("/theme/iconTheme")) { - #ifdef _WIN32 - path += g_win32_locale_filename_from_utf8("/symbolic/actions"); - #else - path += "/symbolic/actions"; - #endif - std::vector symbolic_icons = get_filenames(path, { ".svg" }, {}); - if (symbolic_icons.size() > 0) { - symbolic = true; - symbolic_icons.clear(); - } - } - } - } else { - symbolic = true; - } - if (_symbolic_icons.get_parent()) { - if (!symbolic) { - _symbolic_icons.set_active(false); - _symbolic_icons.get_parent()->hide(); - _symbolic_base_colors.get_parent()->hide(); - _symbolic_base_color.get_parent()->get_parent()->hide(); - _symbolic_success_color.get_parent()->get_parent()->hide(); - } - else { - _symbolic_icons.get_parent()->show(); - _symbolic_base_colors.get_parent()->show(); - _symbolic_base_color.get_parent()->get_parent()->show(); - _symbolic_success_color.get_parent()->get_parent()->show(); - } - } - changeIconsColors(); -} - -void InkscapePreferences::resetIconsColors() -{ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); - if (!prefs->getBool("/theme/symbolicIcons", false)) { - _symbolic_base_colors.set_sensitive(false); - _symbolic_base_color.setSensitive(false); - _symbolic_success_color.setSensitive(false); - _symbolic_warning_color.setSensitive(false); - _symbolic_error_color.setSensitive(false); - } else if (prefs->getBool("/theme/symbolicDefaultColors", true) || - !prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) - { - Gdk::RGBA normal_color = _symbolic_base_color.get_style_context()->get_color(); - Gdk::RGBA success_color = _symbolic_success_color.get_style_context()->get_color(); - Gdk::RGBA warning_color = _symbolic_warning_color.get_style_context()->get_color(); - Gdk::RGBA error_color = _symbolic_error_color.get_style_context()->get_color(); - SPColor normal_color_sp(normal_color.get_red(), normal_color.get_green(), normal_color.get_blue()); - SPColor success_color_sp(success_color.get_red(), success_color.get_green(), success_color.get_blue()); - SPColor warning_color_sp(warning_color.get_red(), warning_color.get_green(), warning_color.get_blue()); - SPColor error_color_sp(error_color.get_red(), error_color.get_green(), error_color.get_blue()); - guint32 colorsetbase = normal_color_sp.toRGBA32(normal_color.get_alpha()); - guint32 colorsetsuccess = success_color_sp.toRGBA32(success_color.get_alpha()); - guint32 colorsetwarning = warning_color_sp.toRGBA32(warning_color.get_alpha()); - guint32 colorseterror = error_color_sp.toRGBA32(error_color.get_alpha()); - get_highlight_colors(colorsetbase, colorsetsuccess, colorsetwarning, colorseterror); - _symbolic_base_color.setRgba32(colorsetbase); - _symbolic_success_color.setRgba32(colorsetsuccess); - _symbolic_warning_color.setRgba32(colorsetwarning); - _symbolic_error_color.setRgba32(colorseterror); - prefs->setInt("/theme/" + themeiconname + "/symbolicBaseColor", colorsetbase); - prefs->setInt("/theme/" + themeiconname + "/symbolicSuccessColor", colorsetsuccess); - prefs->setInt("/theme/" + themeiconname + "/symbolicWarningColor", colorsetwarning); - prefs->setInt("/theme/" + themeiconname + "/symbolicErrorColor", colorseterror); - _symbolic_base_color.setSensitive(false); - _symbolic_success_color.setSensitive(false); - _symbolic_warning_color.setSensitive(false); - _symbolic_error_color.setSensitive(false); - changeIconsColors(); - } else { - _symbolic_base_color.setSensitive(true); - _symbolic_success_color.setSensitive(true); - _symbolic_warning_color.setSensitive(true); - _symbolic_error_color.setSensitive(true); - } -} - - void InkscapePreferences::get_highlight_colors(guint32 &colorsetbase, guint32 &colorsetsuccess, guint32 &colorsetwarning, guint32 &colorseterror) { @@ -757,6 +655,57 @@ void InkscapePreferences::get_highlight_colors(guint32 &colorsetbase, guint32 &c } } +void InkscapePreferences::resetIconsColors() +{ + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + if (!prefs->getBool("/theme/symbolicIcons", false)) { + _symbolic_base_colors.set_sensitive(false); + _symbolic_base_color.setSensitive(false); + _symbolic_success_color.setSensitive(false); + _symbolic_warning_color.setSensitive(false); + _symbolic_error_color.setSensitive(false); + return; + } + if (prefs->getBool("/theme/symbolicDefaultColors", true) || + !prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) + { + Gdk::RGBA normal_color = _symbolic_base_color.get_style_context()->get_color(); + Gdk::RGBA success_color = _symbolic_success_color.get_style_context()->get_color(); + Gdk::RGBA warning_color = _symbolic_warning_color.get_style_context()->get_color(); + Gdk::RGBA error_color = _symbolic_error_color.get_style_context()->get_color(); + SPColor normal_color_sp(normal_color.get_red(), normal_color.get_green(), normal_color.get_blue()); + SPColor success_color_sp(success_color.get_red(), success_color.get_green(), success_color.get_blue()); + SPColor warning_color_sp(warning_color.get_red(), warning_color.get_green(), warning_color.get_blue()); + SPColor error_color_sp(error_color.get_red(), error_color.get_green(), error_color.get_blue()); + guint32 colorsetbase = normal_color_sp.toRGBA32(normal_color.get_alpha()); + guint32 colorsetsuccess = success_color_sp.toRGBA32(success_color.get_alpha()); + guint32 colorsetwarning = warning_color_sp.toRGBA32(warning_color.get_alpha()); + guint32 colorseterror = error_color_sp.toRGBA32(error_color.get_alpha()); + get_highlight_colors(colorsetbase, colorsetsuccess, colorsetwarning, colorseterror); + _symbolic_base_color.setRgba32(colorsetbase); + _symbolic_success_color.setRgba32(colorsetsuccess); + _symbolic_warning_color.setRgba32(colorsetwarning); + _symbolic_error_color.setRgba32(colorseterror); + prefs->setInt("/theme/" + themeiconname + "/symbolicBaseColor", colorsetbase); + prefs->setInt("/theme/" + themeiconname + "/symbolicSuccessColor", colorsetsuccess); + prefs->setInt("/theme/" + themeiconname + "/symbolicWarningColor", colorsetwarning); + prefs->setInt("/theme/" + themeiconname + "/symbolicErrorColor", colorseterror); + if (prefs->getBool("/theme/symbolicDefaultColors", true) { + _symbolic_base_color.setSensitive(false); + _symbolic_success_color.setSensitive(false); + _symbolic_warning_color.setSensitive(false); + _symbolic_error_color.setSensitive(false); + } + changeIconsColors(); + } else { + _symbolic_base_color.setSensitive(true); + _symbolic_success_color.setSensitive(true); + _symbolic_warning_color.setSensitive(true); + _symbolic_error_color.setSensitive(true); + } +} + void InkscapePreferences::changeIconsColors() { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -797,7 +746,12 @@ void InkscapePreferences::toggleSymbolic() window->get_style_context()->remove_class("regular"); } _symbolic_base_colors.set_sensitive(true); - changeIconsColors(); + Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + if (!prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) { + resetIconsColors(); + } else { + changeIconsColors(); + } } else { if (window) { window->get_style_context()->add_class("regular"); @@ -814,16 +768,17 @@ void InkscapePreferences::toggleSymbolic() void InkscapePreferences::themeChange() { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - bool darktheme = prefs->getBool("/theme/darkTheme", false); - Glib::ustring themename = prefs->getString("/theme/gtkTheme"); - GtkSettings *settings = gtk_settings_get_default(); - g_object_set(settings, "gtk-theme-name", themename.c_str(), NULL); - g_object_set(settings, "gtk-application-prefer-dark-theme", darktheme, NULL); - gchar *gtkThemeName; - gboolean gtkApplicationPreferDarkTheme; Gtk::Window *window = SP_ACTIVE_DESKTOP->getToplevel(); if (window) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool darktheme = prefs->getBool("/theme/darkTheme", false); + Glib::ustring themename = prefs->getString("/theme/gtkTheme"); + Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + GtkSettings *settings = gtk_settings_get_default(); + g_object_set(settings, "gtk-theme-name", themename.c_str(), NULL); + g_object_set(settings, "gtk-application-prefer-dark-theme", darktheme, NULL); + gchar *gtkThemeName; + gboolean gtkApplicationPreferDarkTheme; bool dark = darktheme || themename.find(":dark") != -1; if (!dark) { Glib::RefPtr stylecontext = window->get_style_context(); @@ -842,12 +797,85 @@ void InkscapePreferences::themeChange() window->get_style_context()->add_class("bright"); window->get_style_context()->remove_class("dark"); } - resetIconsColors(); + if (!prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) { + resetIconsColors(); + } else { + changeIconsColors(); + } INKSCAPE.signal_change_theme.emit(); } } -void InkscapePreferences::changeIconsColor(guint32 /*color*/) { symbolicStyling(); } +void InkscapePreferences::symbolicThemeCheck() +{ + using namespace Inkscape::IO::Resource; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + Glib::ustring themeiconname = prefs->getString("/theme/iconTheme"); + bool symbolic = false; + GtkSettings *settings = gtk_settings_get_default(); + if (settings) { + if (themeiconname != "") { + g_object_set(settings, "gtk-icon-theme-name", themeiconname.c_str(), NULL); + } + } + if (prefs->getString("/theme/defaultIconTheme") != prefs->getString("/theme/iconTheme")) { + auto folders = get_foldernames(ICONS, { "application" }); + for (auto &folder : folders) { + auto path = folder; + const size_t last_slash_idx = folder.find_last_of("\\/"); + if (std::string::npos != last_slash_idx) { + folder.erase(0, last_slash_idx + 1); + } + if (folder == prefs->getString("/theme/iconTheme")) { + #ifdef _WIN32 + path += g_win32_locale_filename_from_utf8("/symbolic/actions"); + #else + path += "/symbolic/actions"; + #endif + std::vector symbolic_icons = get_filenames(path, { ".svg" }, {}); + if (symbolic_icons.size() > 0) { + symbolic = true; + symbolic_icons.clear(); + } + } + } + } else { + symbolic = true; + } + if (_symbolic_icons.get_parent()) { + if (!symbolic) { + _symbolic_icons.set_active(false); + _symbolic_icons.get_parent()->hide(); + _symbolic_base_colors.get_parent()->hide(); + _symbolic_base_color.get_parent()->get_parent()->hide(); + _symbolic_success_color.get_parent()->get_parent()->hide(); + } + else { + _symbolic_icons.get_parent()->show(); + _symbolic_base_colors.get_parent()->show(); + _symbolic_base_color.get_parent()->get_parent()->show(); + _symbolic_success_color.get_parent()->get_parent()->show(); + } + } + if (symbolic) { + if (!prefs->getEntry("/theme/" + themeiconname + "/symbolicBaseColor").isValid()) { + resetIconsColors(); + } else { + changeIconsColors(); + } + guint32 colorsetbase = prefs->getInt("/theme/" + themeiconname + "/symbolicBaseColor", 0x2E3436ff); + guint32 colorsetsuccess = prefs->getInt("/theme/" + themeiconname + "/symbolicSuccessColor", 0x4AD589ff); + guint32 colorsetwarning = prefs->getInt("/theme/" + themeiconname + "/symbolicWarningColor", 0xF57900ff); + guint32 colorseterror = prefs->getInt("/theme/" + themeiconname + "/symbolicErrorColor", 0xcc0000ff); + _symbolic_base_color.init(_("Color for symbolic icons:"), "/theme/" + themeiconname + "/symbolicBaseColor", colorsetbase); + _symbolic_success_color.init(_("Color for symbolic success icons:"), + "/theme/" + themeiconname + "/symbolicSuccessColor", colorsetsuccess); + _symbolic_warning_color.init(_("Color for symbolic warning icons:"), + "/theme/" + themeiconname + "/symbolicWarningColor", colorsetwarning); + _symbolic_error_color.init(_("Color for symbolic error icons:"), "/theme/" + themeiconname + "/symbolicErrorColor", + colorseterror); + } +} void InkscapePreferences::initPageUI() { -- cgit v1.2.3