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/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 ++--- 14 files changed, 72 insertions(+), 21 deletions(-) (limited to 'src/ui') 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); -- cgit v1.2.3