diff options
| author | Alexander Valavanis <valavanisalex@gmail.com> | 2019-01-27 10:43:05 +0000 |
|---|---|---|
| committer | Alexander Valavanis <valavanisalex@gmail.com> | 2019-01-27 10:43:05 +0000 |
| commit | c4a6cf08d98d1b1239aefbb5a8b05f7c3f9294bf (patch) | |
| tree | d3532f1b95025706cebb81e0e354002a405dd834 /src/ui | |
| parent | toolbox - add comment (diff) | |
| parent | Finich CSS refactor (diff) | |
| download | inkscape-c4a6cf08d98d1b1239aefbb5a8b05f7c3f9294bf.tar.gz inkscape-c4a6cf08d98d1b1239aefbb5a8b05f7c3f9294bf.zip | |
Merge branch 'master' of gitlab.com:inkscape/inkscape
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/dialog/inkscape-preferences.cpp | 79 | ||||
| -rw-r--r-- | src/ui/dialog/symbols.cpp | 5 | ||||
| -rw-r--r-- | src/ui/icon-loader.cpp | 118 | ||||
| -rw-r--r-- | src/ui/icon-loader.h | 15 | ||||
| -rw-r--r-- | src/ui/widget/dash-selector.cpp | 2 |
5 files changed, 120 insertions, 99 deletions
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 6634ef170..191182528 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -34,6 +34,7 @@ #include "cms-system.h" #include "document.h" #include "enums.h" +#include "inkscape-window.h" #include "inkscape.h" #include "message-stack.h" #include "path-prefix.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> @@ -654,7 +656,7 @@ void InkscapePreferences::symbolicDefaultColor(){ Glib::ustring css_str = ""; if (prefs->getBool("/theme/symbolicIcons", false)) { css_str += "*{ -gtk-icon-style: symbolic;}"; - css_str += "image{ color: @theme_fg_color}"; + css_str += ".dark,.bright,.dark image,.bright image{ color: @theme_fg_color;}"; css_str += "iconinverse{ color: @theme_bg_color;}"; css_str += "iconregular{ -gtk-icon-style: regular;}"; } else { @@ -679,30 +681,35 @@ 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 += ".dark *,.bright *{ color: @theme_fg_color;}"; + css_str += ".dark,.bright,.dark image,.bright 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 +724,28 @@ 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,30 @@ 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", >kThemeName, NULL); + g_object_get(settings, "gtk-application-prefer-dark-theme", >kApplicationPreferDarkTheme, 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"); + window->get_style_context()->remove_class("bright"); + } else { + window->get_style_context()->add_class("bright"); + window->get_style_context()->remove_class("dark"); + } + } } void InkscapePreferences::initPageUI() diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index fa76fc31a..06a76605b 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -186,7 +186,6 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : icon_view = new Gtk::IconView(static_cast<Glib::RefPtr<Gtk::TreeModel> >(store)); //icon_view->set_text_column( columns->symbol_id ); icon_view->set_tooltip_column( 1 ); - icon_view->set_name( "symbolsView" ); icon_view->set_pixbuf_column( columns->symbol_image ); // Giving the iconview a small minimum size will help users understand // What the dialog does. @@ -214,6 +213,8 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : overlay->set_hexpand(); overlay->set_vexpand(); overlay->add(* scroller); + overlay->get_style_context()->add_class("colorbright"); + overlay->get_style_context()->add_class("backgroundbright"); scroller->set_size_request(100, 250); table->attach(*Gtk::manage(overlay),0,row,2,1); @@ -227,7 +228,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : iconsize = Gtk::IconSize().register_new(Glib::ustring("ICON_SIZE_DIALOG_EXTRA"), 110, 110); } overlay_icon = sp_get_icon_image("searching", iconsize); - overlay_icon->set_name("iconinverse"); + overlay_icon->get_style_context()->add_class("iconsymbolic"); overlay_icon->set_halign(Gtk::ALIGN_CENTER ); overlay_icon->set_valign(Gtk::ALIGN_START ); overlay_icon->set_margin_top(45); diff --git a/src/ui/icon-loader.cpp b/src/ui/icon-loader.cpp index a6011773d..e2aaf5093 100644 --- a/src/ui/icon-loader.cpp +++ b/src/ui/icon-loader.cpp @@ -10,64 +10,63 @@ * Released under GNU GPL v2+, read the file 'COPYING' for more information. */ + #include "icon-loader.h" #include "inkscape.h" -#include "io/resource.h" -#include "preferences.h" -#include "svg/svg-color.h" #include "widgets/toolbox.h" +#include <gtkmm/iconinfo.h> #include <gdkmm/display.h> #include <gdkmm/screen.h> #include <gtkmm/iconinfo.h> #include <gtkmm/icontheme.h> -#include <gtkmm/toolitem.h> -void sp_load_theme() {} +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gint size) +{ + Gtk::Image *icon = new Gtk::Image(); + icon->set_from_icon_name(icon_name, Gtk::IconSize(Gtk::ICON_SIZE_BUTTON)); + icon->set_pixel_size(size); + return icon; +} + +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::IconSize icon_size) +{ + Gtk::Image *icon = new Gtk::Image(); + icon->set_from_icon_name(icon_name, icon_size); + return icon; +} + +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size) +{ + Gtk::Image *icon = new Gtk::Image(); + icon->set_from_icon_name(icon_name, icon_size); + return icon; +} + +GtkWidget *sp_get_icon_image(Glib::ustring icon_name, GtkIconSize icon_size) +{ + return gtk_image_new_from_icon_name(icon_name.c_str(), icon_size); +} + +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gchar const *prefs_size) +{ + Gtk::IconSize icon_size = Inkscape::UI::ToolboxFactory::prefToSize_mm(prefs_size); + return sp_get_icon_image(icon_name, icon_size); +} Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, gint size) { Glib::RefPtr<Gdk::Display> display = Gdk::Display::get_default(); Glib::RefPtr<Gdk::Screen> screen = display->get_default_screen(); Glib::RefPtr<Gtk::IconTheme> icon_theme = Gtk::IconTheme::get_for_screen(screen); - // TODO all calls to "sp_get_icon_pixbuf" need to be removed in thew furture - // Put here temporary for allow use symbolic in a few icons require pixbug instead Gtk::Image - // We coulden't acces to pixbuf of a symbolic ones with the next order - // icon_theme->load_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE); - // Maybe we can do with Gio, but not sure. Also can render a icon to pixbuf but need to be - // a stock-icon not on named ones I think or access directly to the icon.svg file - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::RefPtr<Gdk::Pixbuf> _icon_pixbuf; - try { - if (prefs->getBool("/theme/symbolicIcons", false)) { - gchar colornamed[64]; - int colorset = prefs->getInt("/theme/symbolicColor", 0x000000ff); - // Use in case the special widgets have inverse theme background and symbolic - sp_svg_write_color(colornamed, sizeof(colornamed), colorset); - Gdk::RGBA color; - color.set(colornamed); - Gtk::IconInfo iconinfo = - icon_theme->lookup_icon(icon_name + Glib::ustring("-symbolic"), size, Gtk::ICON_LOOKUP_FORCE_SIZE); - if (bool(iconinfo)) { - bool was_symbolic = false; - _icon_pixbuf = iconinfo.load_symbolic(color, color, color, color, was_symbolic); - } - else { - _icon_pixbuf = icon_theme->load_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE); - } - // g_warning("Icon Loader using a future dead function in this icon: %s", icon_name.c_str()); - // limit warns to 1 per run - static bool tmp_warn = true; - if (tmp_warn) { - tmp_warn = false; - g_warning("Icon Loader using a legacy function (sp_get_icon_pixbuf)."); - } - } - else { - _icon_pixbuf = icon_theme->load_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE); - } - } - catch (const Gtk::IconThemeError &e) { - g_warning("Icon Loader error loading icon file: %s", e.what().c_str()); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + if (prefs->getBool("/theme/symbolicIcons", false)) { + Gtk::IconInfo iconinfo = icon_theme->lookup_icon(icon_name + Glib::ustring("-symbolic"), size, Gtk::ICON_LOOKUP_FORCE_SIZE); + bool was_sumbolic = false; + _icon_pixbuf = iconinfo.load_symbolic(SP_ACTIVE_DESKTOP->getToplevel()->get_style_context(), was_sumbolic); + } else { + Gtk::IconInfo iconinfo = icon_theme->lookup_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE); + _icon_pixbuf = iconinfo.load_icon(); } return _icon_pixbuf; } @@ -103,39 +102,6 @@ Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, gchar cons return sp_get_icon_pixbuf(icon_name, icon_size); } - -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size) -{ - - Gtk::Image *icon = new Gtk::Image(); - icon->set_from_icon_name(icon_name, Gtk::IconSize(icon_size)); - return icon; -} - -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::IconSize icon_size) -{ - - Gtk::Image *icon = new Gtk::Image(); - icon->set_from_icon_name(icon_name, icon_size); - return icon; -} - -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gchar const *prefs_size) -{ - - Gtk::IconSize icon_size = Inkscape::UI::ToolboxFactory::prefToSize_mm(prefs_size); - Gtk::Image *icon = new Gtk::Image(); - icon->set_from_icon_name(icon_name, icon_size); - return icon; -} - - -GtkWidget *sp_get_icon_image(Glib::ustring icon_name, GtkIconSize icon_size) -{ - - return gtk_image_new_from_icon_name(icon_name.c_str(), icon_size); -} - /* Local Variables: mode:c++ diff --git a/src/ui/icon-loader.h b/src/ui/icon-loader.h index 3f7f1fcb8..78975e210 100644 --- a/src/ui/icon-loader.h +++ b/src/ui/icon-loader.h @@ -13,16 +13,17 @@ #define SEEN_INK_ICON_LOADER_H #include <gdkmm/pixbuf.h> -#include <gtkmm/box.h> #include <gtkmm/image.h> +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gint size); +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size); +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::IconSize icon_size); +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gchar const *prefs_sice); +GtkWidget *sp_get_icon_image(Glib::ustring icon_name, GtkIconSize icon_size); Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, gint size); -Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size); Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, Gtk::IconSize icon_size); +Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size); Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, GtkIconSize icon_size); Glib::RefPtr<Gdk::Pixbuf> sp_get_icon_pixbuf(Glib::ustring icon_name, gchar const *prefs_sice); -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size); -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::IconSize icon_size); -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gchar const *prefs_sice); -GtkWidget *sp_get_icon_image(Glib::ustring icon_name, GtkIconSize icon_size); -#endif // SEEN_INK_STOCK_ITEMS_H + +#endif // SEEN_INK_ICON_LOADER_H diff --git a/src/ui/widget/dash-selector.cpp b/src/ui/widget/dash-selector.cpp index 81e7881b6..ea5cc57d2 100644 --- a/src/ui/widget/dash-selector.cpp +++ b/src/ui/widget/dash-selector.cpp @@ -61,7 +61,7 @@ DashSelector::DashSelector() dash_combo.pack_start(image_renderer); dash_combo.set_cell_data_func(image_renderer, sigc::mem_fun(*this, &DashSelector::prepareImageRenderer)); dash_combo.set_tooltip_text(_("Dash pattern")); - dash_combo.set_name("dashCombo"); + dash_combo.get_style_context()->add_class("combobright"); dash_combo.show(); dash_combo.signal_changed().connect( sigc::mem_fun(*this, &DashSelector::on_selection) ); |
