From 0ddbdf18a2cfcf54f591b1372bb3eb9dde9728e2 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Thu, 8 Nov 2018 19:36:18 +0100 Subject: This improve symbolic icon rendering moving it to CSS only. There is places in the UI whar we claim for a Pixbuf. Currently its not possible render them as symbolic without the previos hack --- src/helper/icon-loader.cpp | 112 ++++++++-------------------- src/helper/icon-loader.h | 22 ++---- src/inkscape.cpp | 18 ++++- src/live_effects/parameter/togglebutton.cpp | 4 +- src/ui/dialog/attrdialog.cpp | 2 +- src/ui/dialog/clonetiler.cpp | 4 +- src/ui/dialog/cssdialog.cpp | 2 +- src/ui/dialog/document-properties.cpp | 2 +- src/ui/dialog/inkscape-preferences.cpp | 53 ++++++++++++- src/ui/dialog/inkscape-preferences.h | 1 + src/ui/dialog/layers.cpp | 4 +- src/ui/dialog/livepatheffect-editor.cpp | 2 +- src/ui/dialog/objects.cpp | 2 +- src/ui/dialog/styledialog.cpp | 2 +- src/ui/dialog/symbols.cpp | 3 +- src/ui/dialog/tags.cpp | 6 +- src/ui/interface.cpp | 2 +- src/ui/widget/color-notebook.cpp | 8 +- src/widgets/button.cpp | 2 +- src/widgets/ege-adjustment-action.cpp | 2 +- src/widgets/gradient-selector.cpp | 2 +- src/widgets/ink-action.cpp | 2 +- src/widgets/ink-radio-action.cpp | 2 +- src/widgets/ink-toggle-action.cpp | 5 +- src/widgets/paint-selector.cpp | 6 +- src/widgets/toolbox.cpp | 12 +++ src/widgets/toolbox.h | 1 + 27 files changed, 152 insertions(+), 131 deletions(-) diff --git a/src/helper/icon-loader.cpp b/src/helper/icon-loader.cpp index 7116c2eaf..39918d8ff 100644 --- a/src/helper/icon-loader.cpp +++ b/src/helper/icon-loader.cpp @@ -20,11 +20,14 @@ #include #include -Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gint size, bool negative) +void sp_load_theme() { + } + +Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gint size) +{ + using namespace Inkscape::IO::Resource; - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - Glib::RefPtr _icon_pixbuf; static auto icon_theme = Gtk::IconTheme::get_default(); static bool icon_theme_set; if (!icon_theme_set) { @@ -32,114 +35,63 @@ Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gint size, icon_theme->prepend_search_path(get_path_ustring(SYSTEM, ICONS)); icon_theme->prepend_search_path(get_path_ustring(USER, ICONS)); } - 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 - if (negative) { - colorset = colorset ^ 0xffffff00; - } - 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)) { - // TODO: view if we need parametrice other colors - 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); - } - } - else { - _icon_pixbuf = icon_theme->load_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE); - } - } - catch (const Gtk::IconThemeError &e) { - std::cout << "Icon Loader: " << e.what() << std::endl; - } - return _icon_pixbuf; + return icon_theme->load_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE); } -Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size, bool negative) +Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size) { int width, height; Gtk::IconSize::lookup(Gtk::IconSize(icon_size), width, height); - return sp_get_icon_pixbuf(icon_name, width, negative); + return sp_get_icon_pixbuf(icon_name, width); } -Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, GtkIconSize icon_size, bool negative) +Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, GtkIconSize icon_size) { gint width, height; gtk_icon_size_lookup(icon_size, &width, &height); - return sp_get_icon_pixbuf(icon_name, width, negative); + return sp_get_icon_pixbuf(icon_name, width); } -Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gchar const *prefs_size, bool negative) +Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gchar const *prefs_size) { // Load icon based in preference size defined allowed values are: //"/toolbox/tools/small" Toolbox icon size //"/toolbox/small" Control bar icon size //"/toolbox/secondary" Secondary toolbar icon size GtkIconSize icon_size = Inkscape::UI::ToolboxFactory::prefToSize(prefs_size); - return sp_get_icon_pixbuf(icon_name, icon_size, negative); + return sp_get_icon_pixbuf(icon_name, icon_size); } -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gint size, bool negative) +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gint size) { - auto icon = sp_get_icon_pixbuf(icon_name, size, negative); - Gtk::Image *image = new Gtk::Image(icon); - return image; + + Gtk::Image *icon = new Gtk::Image(); + icon->set_from_icon_name(icon_name, Gtk::IconSize(size)); + return icon; } -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size, bool negative) +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size) { - auto icon = sp_get_icon_pixbuf(icon_name, icon_size, negative); - Gtk::Image *image = new Gtk::Image(icon); - return image; + + 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, GtkIconSize icon_size, bool negative) +Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gchar const *prefs_size) { - auto icon = sp_get_icon_pixbuf(icon_name, icon_size, negative); - Gtk::Image *image = new Gtk::Image(icon); - return image; + + 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; } -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gchar const *prefs_size, bool negative) -{ - auto icon = sp_get_icon_pixbuf(icon_name, prefs_size, negative); - Gtk::Image *image = new Gtk::Image(icon); - return image; -} -std::pair, Gdk::RGBA> sp_set_radioaction_icon(Gtk::RadioAction::Group group, - Glib::ustring icon_name, - Glib::ustring label, - Glib::ustring tooltip, - bool negative) +GtkWidget *sp_get_icon_image(Glib::ustring icon_name, GtkIconSize icon_size) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - if (prefs->getBool("/theme/symbolicIcons", false)) { - icon_name = icon_name + Glib::ustring("-symbolic"); - } - - Glib::RefPtr action = - Gtk::RadioAction::create_with_icon_name(group, "Anonymous", icon_name.c_str(), label.c_str(), tooltip.c_str()); - Gtk::ToolItem *item = action->create_tool_item(); - Gdk::RGBA color; - gchar colornamed[64]; - int colorset = prefs->getInt("/theme/symbolicColor", 0x000000ff); - // Use in case the special widgets have inverse theme background and symbolic - if (negative) { - colorset = colorset ^ 0xffffff00; - } - sp_svg_write_color(colornamed, sizeof(colornamed), colorset); - color.set(colornamed); - return std::make_pair(action, color); + + return gtk_image_new_from_icon_name(icon_name.c_str(), icon_size); } /* diff --git a/src/helper/icon-loader.h b/src/helper/icon-loader.h index 1555871c3..22658225e 100644 --- a/src/helper/icon-loader.h +++ b/src/helper/icon-loader.h @@ -15,19 +15,13 @@ #include #include #include -#include -Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gint size, bool negative = false); -Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size, bool negative = false); -Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, GtkIconSize icon_size, bool negative = false); -Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gchar const *prefs_sice, bool negative = false); -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gint size, bool negative = false); -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size, bool negative = false); -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, GtkIconSize icon_size, bool negative = false); -Gtk::Image *sp_get_icon_image(Glib::ustring icon_name, gchar const *prefs_sice, bool negative = false); -std::pair, Gdk::RGBA> sp_set_radioaction_icon(Gtk::RadioAction::Group group, - Glib::ustring icon_name, - Glib::ustring label, - Glib::ustring tooltip, - bool negative = false); +Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gint size); +Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, Gtk::BuiltinIconSize icon_size); +Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, GtkIconSize icon_size); +Glib::RefPtr sp_get_icon_pixbuf(Glib::ustring icon_name, gchar const *prefs_sice); +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, gchar const *prefs_sice); +GtkWidget *sp_get_icon_image(Glib::ustring icon_name, GtkIconSize icon_size); #endif // SEEN_INK_STOCK_ITEMS_H diff --git a/src/inkscape.cpp b/src/inkscape.cpp index 027dd9dce..a0dfa0a61 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -378,15 +378,26 @@ Application::add_style_sheet() // Add style sheet (GTK3) auto const screen = Gdk::Screen::get_default(); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - // symbolic auto provider = Gtk::CssProvider::create(); Glib::ustring css_str = ""; if (prefs->getBool("/theme/symbolicIcons", false)) { + int colorset = prefs->getInt("/theme/symbolicColor", 0x000000ff); gchar colornamed[64]; - sp_svg_write_color(colornamed, sizeof(colornamed), prefs->getInt("/theme/symbolicColor", 0x000000ff)); - css_str += "*{-gtk-icon-style: symbolic;}toolbutton image{ color: "; + 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;}"; } GtkSettings *settings = gtk_settings_get_default(); const gchar *gtk_font_name = ""; @@ -518,6 +529,7 @@ Application::Application(const char* argv, bool use_gui) : g_object_set(settings, "gtk-application-prefer-dark-theme", prefs->getBool("/theme/darkTheme", gtkApplicationPreferDarkTheme), NULL); } + load_menus(); Inkscape::DeviceManager::getManager().loadConfig(); } diff --git a/src/live_effects/parameter/togglebutton.cpp b/src/live_effects/parameter/togglebutton.cpp index faeb27a55..89a1c426a 100644 --- a/src/live_effects/parameter/togglebutton.cpp +++ b/src/live_effects/parameter/togglebutton.cpp @@ -113,9 +113,9 @@ ToggleButtonParam::param_newWidget() gtk_widget_show(box_button); GtkWidget *icon_button = nullptr; if (!value) { - icon_button = GTK_WIDGET(sp_get_icon_image(_icon_inactive, _icon_size)); + icon_button = sp_get_icon_image(_icon_inactive, _icon_size); } else { - icon_button = GTK_WIDGET(sp_get_icon_image(_icon_active, _icon_size)); + icon_button = sp_get_icon_image(_icon_active, _icon_size); } gtk_widget_show(icon_button); gtk_box_pack_start (GTK_BOX(box_button), icon_button, false, false, 1); diff --git a/src/ui/dialog/attrdialog.cpp b/src/ui/dialog/attrdialog.cpp index 43322b4d3..6d40750ed 100644 --- a/src/ui/dialog/attrdialog.cpp +++ b/src/ui/dialog/attrdialog.cpp @@ -72,7 +72,7 @@ AttrDialog::AttrDialog(): _treeView.append_column("", *addRenderer); Gtk::TreeViewColumn *col = _treeView.get_column(0); if (col) { - auto add_icon = Gtk::manage(sp_get_icon_image("list-add", GTK_ICON_SIZE_SMALL_TOOLBAR)); + auto add_icon = Gtk::manage(sp_get_icon_image("list-add", Gtk::ICON_SIZE_SMALL_TOOLBAR)); col->set_clickable(true); col->set_widget(*add_icon); add_icon->set_tooltip_text(_("Add a new attribute")); diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 5505242a7..3dc88edb0 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -2681,7 +2681,7 @@ GtkWidget * CloneTiler::table_x_y_rand(int values) auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - GtkWidget *i = GTK_WIDGET(sp_get_icon_image(INKSCAPE_ICON("object-rows"), GTK_ICON_SIZE_MENU)->gobj()); + GtkWidget *i = sp_get_icon_image(INKSCAPE_ICON("object-rows"), GTK_ICON_SIZE_MENU); gtk_box_pack_start(GTK_BOX(hb), i, FALSE, FALSE, 2); GtkWidget *l = gtk_label_new(""); @@ -2695,7 +2695,7 @@ GtkWidget * CloneTiler::table_x_y_rand(int values) auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - GtkWidget *i = GTK_WIDGET(sp_get_icon_image(INKSCAPE_ICON("object-columns"), GTK_ICON_SIZE_MENU)->gobj()); + GtkWidget *i = sp_get_icon_image(INKSCAPE_ICON("object-columns"), GTK_ICON_SIZE_MENU); gtk_box_pack_start(GTK_BOX(hb), i, FALSE, FALSE, 2); GtkWidget *l = gtk_label_new(""); diff --git a/src/ui/dialog/cssdialog.cpp b/src/ui/dialog/cssdialog.cpp index 64868f583..95f433a30 100644 --- a/src/ui/dialog/cssdialog.cpp +++ b/src/ui/dialog/cssdialog.cpp @@ -78,7 +78,7 @@ CssDialog::CssDialog(): _attrCol->add_attribute(_attrRenderer->property_text(), _cssColumns._styleAttrVal); } - GtkWidget *child = GTK_WIDGET(sp_get_icon_image("list-add", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image("list-add", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(child); _buttonAddProperty.add(*manage(Glib::wrap(child))); _buttonAddProperty.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index 54277234c..f81fe79be 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -75,7 +75,7 @@ static Inkscape::XML::NodeEventVector const _repr_events = { static void docprops_style_button(Gtk::Button& btn, char const* iconName) { - GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show( child ); btn.add(*Gtk::manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 5b1bcc9d0..19048bc23 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "cms-system.h" #include "document.h" @@ -55,7 +56,7 @@ #include "object/color-profile.h" #include "style.h" - +#include "svg/svg-color.h" #include "ui/interface.h" #include "ui/widget/style-swatch.h" @@ -635,12 +636,53 @@ void InkscapePreferences::symbolicThemeCheck() _symbolic_color.get_parent()->hide(); } else { + _symbolic_icons.get_parent()->show(); _symbolic_color.get_parent()->show(); } } } +void InkscapePreferences::symbolicAddClass() +{ + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + auto const screen = Gdk::Screen::get_default(); + auto provider = Gtk::CssProvider::create(); + Glib::ustring css_str = ""; + 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;}"; + } + // From 3.16, throws an error which we must catch. + try { + provider->load_from_data(css_str); + } +#if GTK_CHECK_VERSION(3, 16, 0) + // Gtk::CssProviderError not defined until 3.16. + 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()); + } +#else + catch (...) { + } +#endif + Gtk::StyleContext::add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); +} void InkscapePreferences::themeChange() { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -874,9 +916,13 @@ void InkscapePreferences::initPageUI() _icon_theme.signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicThemeCheck)); } _symbolic_icons.init(_("Use symbolic icons"), "/theme/symbolicIcons", true); + _symbolic_icons.signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicAddClass)); _page_theme.add_line(true, "", _symbolic_icons, "", "", true), _symbolic_color.init(_("Color for symbolic icons:"), "/theme/symbolicColor", 0x000000ff); - _page_theme.add_line(false, "", _symbolic_color, _("Color for symbolic icons"), "", false); + Gtk::Button * _apply_color = new Gtk::Button(_("Apply color")); + _apply_color->set_tooltip_text(_("Apply color to symbolic icons)")); + _apply_color->signal_clicked().connect(sigc::mem_fun(*this, &InkscapePreferences::symbolicAddClass)); + _page_theme.add_line(false, "", _symbolic_color, _("Color for symbolic icons"), "", false, _apply_color); { Glib::ustring sizeLabels[] = { C_("Icon size", "Larger"), C_("Icon size", "Large"), C_("Icon size", "Small"), C_("Icon size", "Smaller") }; @@ -2388,6 +2434,9 @@ void InkscapePreferences::on_pagelist_selection_changed() Gtk::Main::iteration(); } this->show_all_children(); + if (prefs->getInt("/dialogs/preferences/page",0) == PREFS_PAGE_UI_THEME) { + symbolicThemeCheck(); + } } } diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h index f55680223..c60630721 100644 --- a/src/ui/dialog/inkscape-preferences.h +++ b/src/ui/dialog/inkscape-preferences.h @@ -579,6 +579,7 @@ protected: private: void themeChange(); void symbolicThemeCheck(); + void symbolicAddClass(); InkscapePreferences(); InkscapePreferences(InkscapePreferences const &d); InkscapePreferences operator=(InkscapePreferences const &d); diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp index 2a08a4355..6b7402e47 100644 --- a/src/ui/dialog/layers.cpp +++ b/src/ui/dialog/layers.cpp @@ -87,7 +87,7 @@ void LayersPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned i bool set = false; if ( iconName ) { - GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); btn.set_relief(Gtk::RELIEF_NONE); @@ -99,7 +99,7 @@ void LayersPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned i if ( verb ) { SPAction *action = verb->get_action(Inkscape::ActionContext(desktop)); if ( !set && action && action->image ) { - GtkWidget *child = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image(action->image, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); set = true; diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp index 4ea6b737f..200ab86b7 100644 --- a/src/ui/dialog/livepatheffect-editor.cpp +++ b/src/ui/dialog/livepatheffect-editor.cpp @@ -71,7 +71,7 @@ void lpeeditor_selection_modified (Inkscape::Selection * selection, guint /*flag static void lpe_style_button(Gtk::Button& btn, char const* iconName) { - GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show( child ); btn.add(*Gtk::manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 4d9fcc16d..d6189fcb2 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -231,7 +231,7 @@ public: */ void ObjectsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); btn.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp index bd2cacafe..c20a458b9 100644 --- a/src/ui/dialog/styledialog.cpp +++ b/src/ui/dialog/styledialog.cpp @@ -1522,7 +1522,7 @@ bool StyleDialog::_delProperty(GdkEventButton *event) void StyleDialog::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(child); btn.add(*manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 8ed9ee516..d94ebc5b7 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -222,7 +222,8 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : overlay_opacity->set_halign(Gtk::ALIGN_START ); overlay_opacity->set_valign(Gtk::ALIGN_START ); //No results - overlay_icon = sp_get_icon_image("searching", 110, true); + overlay_icon = sp_get_icon_image("searching", 110); + overlay_icon->set_name("iconinverse"); 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/dialog/tags.cpp b/src/ui/dialog/tags.cpp index f2f856758..9ee6f4851 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -123,7 +123,7 @@ public: void TagsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(child); btn.add(*manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); @@ -137,7 +137,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, const char* label = nullptr; if ( iconName ) { - iconWidget = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_MENU)->gobj()); + iconWidget = sp_get_icon_image(iconName, GTK_ICON_SIZE_MENU); } if ( desktop ) { @@ -145,7 +145,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, if ( verb ) { SPAction *action = verb->get_action(desktop); if ( !iconWidget && action && action->image ) { - iconWidget = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU)->gobj()); + iconWidget = sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU); } if ( action ) { diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index 5c0e44b44..f81d252de 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -504,7 +504,7 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *men // If there is an image associated with the action, then we can add it as an icon for the menu item. if (show_icon && action->image) { item->set_name("ImageMenuItem"); // custom name to identify our "ImageMenuItems" - GtkWidget *icon = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU)->gobj()); + GtkWidget *icon = sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU); // create a box to hold icon and label as GtkMenuItem derives from GtkBin and can only hold one child GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); diff --git a/src/ui/widget/color-notebook.cpp b/src/ui/widget/color-notebook.cpp index 6d6fee5e0..cc6832815 100644 --- a/src/ui/widget/color-notebook.cpp +++ b/src/ui/widget/color-notebook.cpp @@ -159,21 +159,21 @@ void ColorNotebook::_initUI() #if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) /* Create color management icons */ _box_colormanaged = gtk_event_box_new(); - GtkWidget *colormanaged = GTK_WIDGET(sp_get_icon_image("color-management", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *colormanaged = sp_get_icon_image("color-management", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_container_add(GTK_CONTAINER(_box_colormanaged), colormanaged); gtk_widget_set_tooltip_text(_box_colormanaged, _("Color Managed")); gtk_widget_set_sensitive(_box_colormanaged, false); gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2); _box_outofgamut = gtk_event_box_new(); - GtkWidget *outofgamut = GTK_WIDGET(sp_get_icon_image("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *outofgamut = sp_get_icon_image("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_container_add(GTK_CONTAINER(_box_outofgamut), outofgamut); gtk_widget_set_tooltip_text(_box_outofgamut, _("Out of gamut!")); gtk_widget_set_sensitive(_box_outofgamut, false); gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2); _box_toomuchink = gtk_event_box_new(); - GtkWidget *toomuchink = GTK_WIDGET(sp_get_icon_image("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *toomuchink = sp_get_icon_image("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_container_add(GTK_CONTAINER(_box_toomuchink), toomuchink); gtk_widget_set_tooltip_text(_box_toomuchink, _("Too much ink!")); gtk_widget_set_sensitive(_box_toomuchink, false); @@ -182,7 +182,7 @@ void ColorNotebook::_initUI() /* Color picker */ - GtkWidget *picker = GTK_WIDGET(sp_get_icon_image("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *picker = sp_get_icon_image("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR); _btn_picker = gtk_button_new(); gtk_button_set_relief(GTK_BUTTON(_btn_picker), GTK_RELIEF_NONE); gtk_container_add(GTK_CONTAINER(_btn_picker), picker); diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp index de7aa8880..8933c2672 100644 --- a/src/widgets/button.cpp +++ b/src/widgets/button.cpp @@ -214,7 +214,7 @@ static void sp_button_set_action(SPButton *button, SPAction *action) button->c_set_sensitive = action->signal_set_sensitive.connect( sigc::bind<0>(sigc::ptr_fun(>k_widget_set_sensitive), GTK_WIDGET(button))); if (action->image) { - child = GTK_WIDGET(sp_get_icon_image(action->image, button->lsize)->gobj()); + child = sp_get_icon_image(action->image, button->lsize); gtk_widget_show(child); gtk_container_add(GTK_CONTAINER(button), child); } diff --git a/src/widgets/ege-adjustment-action.cpp b/src/widgets/ege-adjustment-action.cpp index 15647c245..155f33389 100644 --- a/src/widgets/ege-adjustment-action.cpp +++ b/src/widgets/ege-adjustment-action.cpp @@ -867,7 +867,7 @@ static GtkWidget* create_tool_item( GtkAction* action ) /* Use an icon if available or use short-label */ if ( act->private_data->iconId && strcmp( act->private_data->iconId, "" ) != 0 ) { GtkWidget *icon = - GTK_WIDGET(sp_get_icon_image(act->private_data->iconId, act->private_data->iconSize)->gobj()); + sp_get_icon_image(act->private_data->iconId, act->private_data->iconSize); gtk_box_pack_start( GTK_BOX(hb), icon, FALSE, FALSE, 0 ); } else { GtkWidget* lbl = gtk_label_new( g_value_get_string( &value ) ? g_value_get_string( &value ) : "wwww" ); diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index 8da832a26..85c4214a7 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -95,7 +95,7 @@ static void sp_gradient_selector_class_init(SPGradientSelectorClass *klass) static void gradsel_style_button(GtkWidget *gtkbtn, char const *iconName) { Gtk::Button *btn = Glib::wrap(GTK_BUTTON(gtkbtn)); - GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); + GtkWidget *child = sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(child); btn->add(*manage(Glib::wrap(child))); btn->set_relief(Gtk::RELIEF_NONE); diff --git a/src/widgets/ink-action.cpp b/src/widgets/ink-action.cpp index bbdcd1c66..c879f2c11 100644 --- a/src/widgets/ink-action.cpp +++ b/src/widgets/ink-action.cpp @@ -171,7 +171,7 @@ static GtkWidget* ink_action_create_tool_item( GtkAction* action ) GtkToolButton* button = GTK_TOOL_BUTTON(item); GtkWidget *child = - GTK_WIDGET(sp_get_icon_image(act->private_data->iconId, act->private_data->iconSize)->gobj()); + sp_get_icon_image(act->private_data->iconId, act->private_data->iconSize); gtk_tool_button_set_icon_widget( button, child ); } else { // For now trigger a warning but don't do anything else diff --git a/src/widgets/ink-radio-action.cpp b/src/widgets/ink-radio-action.cpp index 5f8e3448a..fb117594a 100644 --- a/src/widgets/ink-radio-action.cpp +++ b/src/widgets/ink-radio-action.cpp @@ -168,7 +168,7 @@ static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ) GtkToolButton* button = GTK_TOOL_BUTTON(item); GtkWidget *child = - GTK_WIDGET(sp_get_icon_image(act->private_data->iconId, act->private_data->iconSize)->gobj()); + sp_get_icon_image(act->private_data->iconId, act->private_data->iconSize); gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_tool_button_set_icon_widget(button, child); diff --git a/src/widgets/ink-toggle-action.cpp b/src/widgets/ink-toggle-action.cpp index fdd3e2498..f7dc36450 100644 --- a/src/widgets/ink-toggle-action.cpp +++ b/src/widgets/ink-toggle-action.cpp @@ -188,7 +188,7 @@ static GtkWidget* ink_toggle_action_create_tool_item( GtkAction* action ) GtkToolButton* button = GTK_TOOL_BUTTON(item); if ( act->private_data->iconId ) { GtkWidget *child = - GTK_WIDGET(sp_get_icon_image(act->private_data->iconId, act->private_data->iconSize)->gobj()); + sp_get_icon_image(act->private_data->iconId, act->private_data->iconSize); gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); @@ -220,8 +220,7 @@ static void ink_toggle_action_update_icon( InkToggleAction* action ) if ( GTK_IS_TOOL_BUTTON(proxies->data) ) { GtkToolButton* button = GTK_TOOL_BUTTON(proxies->data); - GtkWidget *child = GTK_WIDGET( - sp_get_icon_image(action->private_data->iconId, action->private_data->iconSize)->gobj()); + GtkWidget *child = sp_get_icon_image(action->private_data->iconId, action->private_data->iconSize); gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_widget_show_all(child); diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 51061a947..b3e4c302d 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -238,7 +238,7 @@ sp_paint_selector_init(SPPaintSelector *psel) // TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty gtk_widget_set_tooltip_text(psel->evenodd, _("Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)")); g_object_set_data(G_OBJECT(psel->evenodd), "mode", GUINT_TO_POINTER(SPPaintSelector::FILLRULE_EVENODD)); - w = GTK_WIDGET(sp_get_icon_image("fill-rule-even-odd", GTK_ICON_SIZE_MENU)->gobj()); + w = sp_get_icon_image("fill-rule-even-odd", GTK_ICON_SIZE_MENU); gtk_container_add(GTK_CONTAINER(psel->evenodd), w); gtk_box_pack_start(GTK_BOX(psel->fillrulebox), psel->evenodd, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(psel->evenodd), "toggled", G_CALLBACK(sp_paint_selector_fillrule_toggled), psel); @@ -249,7 +249,7 @@ sp_paint_selector_init(SPPaintSelector *psel) // TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty gtk_widget_set_tooltip_text(psel->nonzero, _("Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)")); g_object_set_data(G_OBJECT(psel->nonzero), "mode", GUINT_TO_POINTER(SPPaintSelector::FILLRULE_NONZERO)); - w = GTK_WIDGET(sp_get_icon_image("fill-rule-nonzero", GTK_ICON_SIZE_MENU)->gobj()); + w = sp_get_icon_image("fill-rule-nonzero", GTK_ICON_SIZE_MENU); gtk_container_add(GTK_CONTAINER(psel->nonzero), w); gtk_box_pack_start(GTK_BOX(psel->fillrulebox), psel->nonzero, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(psel->nonzero), "toggled", G_CALLBACK(sp_paint_selector_fillrule_toggled), psel); @@ -318,7 +318,7 @@ static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel, gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(b), FALSE); g_object_set_data(G_OBJECT(b), "mode", GUINT_TO_POINTER(mode)); - w = GTK_WIDGET(sp_get_icon_image(pixmap, GTK_ICON_SIZE_BUTTON)->gobj()); + w = sp_get_icon_image(pixmap, GTK_ICON_SIZE_BUTTON); gtk_container_add(GTK_CONTAINER(b), w); gtk_box_pack_start(GTK_BOX(psel->style), b, FALSE, FALSE, 0); diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 670693bc4..41b237b29 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -137,6 +137,18 @@ GtkIconSize ToolboxFactory::prefToSize( Glib::ustring const &path, int base ) { return sizeChoices[index]; } +Gtk::IconSize ToolboxFactory::prefToSize_mm( Glib::ustring const &path, int base ) { + static Gtk::IconSize sizeChoices[] = { + Gtk::ICON_SIZE_LARGE_TOOLBAR, + Gtk::ICON_SIZE_SMALL_TOOLBAR, + Gtk::ICON_SIZE_MENU, + Gtk::ICON_SIZE_DIALOG + }; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + int index = prefs->getIntLimited( path, base, 0, G_N_ELEMENTS(sizeChoices) ); + return sizeChoices[index]; +} + static struct { gchar const *type_name; gchar const *data_name; diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h index ff19c802c..a5cc98b5c 100644 --- a/src/widgets/toolbox.h +++ b/src/widgets/toolbox.h @@ -62,6 +62,7 @@ public: static void updateSnapToolbox(SPDesktop *desktop, Inkscape::UI::Tools::ToolBase *eventcontext, GtkWidget *toolbox); static GtkIconSize prefToSize(Glib::ustring const &path, int base = 0 ); + static Gtk::IconSize prefToSize_mm(Glib::ustring const &path, int base = 0 ); private: ToolboxFactory() = delete; -- cgit v1.2.3