diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2018-07-21 02:55:31 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2018-07-21 02:55:31 +0000 |
| commit | 75d662f71d8eeb4b1c83e9bb61c1bd56f9b0e959 (patch) | |
| tree | e31f9e32ffa511bb495fc75eac6484681798e0d2 /src/ui | |
| parent | CMake/MSYS2: Update for enchant-2 (diff) | |
| download | inkscape-75d662f71d8eeb4b1c83e9bb61c1bd56f9b0e959.tar.gz inkscape-75d662f71d8eeb4b1c83e9bb61c1bd56f9b0e959.zip | |
adding gtk-theme
Diffstat (limited to 'src/ui')
35 files changed, 437 insertions, 218 deletions
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 3d9a53951..7ad8a5e18 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -45,6 +45,7 @@ #include "object/sp-root.h" #include "object/sp-text.h" +#include "helper/icon-loader.h" #include "ui/icon-names.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/multi-path-manipulator.h" @@ -68,7 +69,7 @@ Action::Action(Glib::ustring id, _parent(parent) { Gtk::Image* pIcon = Gtk::manage(new Gtk::Image()); - pIcon->set_from_icon_name( _id, Gtk::ICON_SIZE_LARGE_TOOLBAR); + pIcon = sp_get_icon_image(_id, Gtk::ICON_SIZE_LARGE_TOOLBAR); Gtk::Button * pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 9a4cd92ab..3cec38022 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -43,6 +43,7 @@ #include "display/drawing-context.h" #include "display/drawing.h" +#include "helper/icon-loader.h" #include "helper/window.h" #include "object/sp-item.h" @@ -2683,28 +2684,28 @@ 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_image_new_from_icon_name (INKSCAPE_ICON("object-rows"), GTK_ICON_SIZE_MENU); - gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); + GtkWidget *i = GTK_WIDGET(sp_get_icon_image(INKSCAPE_ICON("object-rows"), GTK_ICON_SIZE_MENU)->gobj()); + gtk_box_pack_start(GTK_BOX(hb), i, FALSE, FALSE, 2); - GtkWidget *l = gtk_label_new (""); - gtk_label_set_markup (GTK_LABEL(l), _("<small>Per row:</small>")); - gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 2); + GtkWidget *l = gtk_label_new(""); + gtk_label_set_markup(GTK_LABEL(l), _("<small>Per row:</small>")); + gtk_box_pack_start(GTK_BOX(hb), l, FALSE, FALSE, 2); - table_attach (table, hb, 0, 1, 2); + table_attach(table, hb, 0, 1, 2); } { auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - GtkWidget *i = gtk_image_new_from_icon_name (INKSCAPE_ICON("object-columns"), GTK_ICON_SIZE_MENU); - gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); + GtkWidget *i = GTK_WIDGET(sp_get_icon_image(INKSCAPE_ICON("object-columns"), GTK_ICON_SIZE_MENU)->gobj()); + gtk_box_pack_start(GTK_BOX(hb), i, FALSE, FALSE, 2); - GtkWidget *l = gtk_label_new (""); - gtk_label_set_markup (GTK_LABEL(l), _("<small>Per column:</small>")); - gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 2); + GtkWidget *l = gtk_label_new(""); + gtk_label_set_markup(GTK_LABEL(l), _("<small>Per column:</small>")); + gtk_box_pack_start(GTK_BOX(hb), l, FALSE, FALSE, 2); - table_attach (table, hb, 0, 1, 3); + table_attach(table, hb, 0, 1, 3); } { diff --git a/src/ui/dialog/cssdialog.cpp b/src/ui/dialog/cssdialog.cpp index aa0198f27..901bcf36c 100644 --- a/src/ui/dialog/cssdialog.cpp +++ b/src/ui/dialog/cssdialog.cpp @@ -16,6 +16,7 @@ #include "verbs.h" #include "selection.h" +#include "helper/icon-loader.h" #include "ui/widget/addtoicon.h" #include "xml/attribute-record.h" @@ -123,7 +124,7 @@ void CssDialog::setDesktop(SPDesktop* desktop) void CssDialog::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); gtk_widget_show(child); btn.add(*manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index 0b47f9bac..39993bc09 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -34,6 +34,7 @@ #include "object/sp-script.h" #include "style.h" +#include "helper/icon-loader.h" #include "ui/dialog/filedialog.h" #include "ui/icon-names.h" #include "ui/shape-editor.h" @@ -75,7 +76,7 @@ static Inkscape::XML::NodeEventVector const _repr_events = { static void docprops_style_button(Gtk::Button& btn, char const* iconName) { - GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); gtk_widget_show( child ); btn.add(*Gtk::manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); @@ -1511,8 +1512,7 @@ DocumentProperties::_createPageTabLabel(const Glib::ustring& label, const char * Gtk::HBox *_tab_label_box = Gtk::manage(new Gtk::HBox(false, 0)); _tab_label_box->set_spacing(4); - auto img = Gtk::manage(new Gtk::Image()); - img->set_from_icon_name(label_image, Gtk::ICON_SIZE_MENU); + auto img = Gtk::manage(sp_get_icon_image(label_image, Gtk::ICON_SIZE_MENU)); _tab_label_box->pack_start(*img); Gtk::Label *_tab_label = Gtk::manage(new Gtk::Label(label, true)); diff --git a/src/ui/dialog/fill-and-stroke.cpp b/src/ui/dialog/fill-and-stroke.cpp index dd387c37e..067749fa0 100644 --- a/src/ui/dialog/fill-and-stroke.cpp +++ b/src/ui/dialog/fill-and-stroke.cpp @@ -26,6 +26,7 @@ #include "svg/css-ostringstream.h" +#include "helper/icon-loader.h" #include "ui/icon-names.h" #include "ui/view/view-widget.h" #include "ui/widget/notebook-page.h" @@ -177,8 +178,7 @@ FillAndStroke::_createPageTabLabel(const Glib::ustring& label, const char *label { Gtk::HBox *_tab_label_box = Gtk::manage(new Gtk::HBox(false, 4)); - auto img = Gtk::manage(new Gtk::Image()); - img->set_from_icon_name(label_image, Gtk::ICON_SIZE_MENU); + auto img = Gtk::manage(sp_get_icon_image(label_image, Gtk::ICON_SIZE_MENU)); _tab_label_box->pack_start(*img); Gtk::Label *_tab_label = Gtk::manage(new Gtk::Label(label, true)); diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 03c3587d9..5bf594c38 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -25,6 +25,8 @@ #include <gtkmm/main.h> #include <gtkmm/recentmanager.h> #include <gtkmm/recentinfo.h> +#include <gtk/gtksettings.h> +#include <gio/gio.h> #include "cms-system.h" #include "document.h" @@ -51,6 +53,7 @@ #include "style.h" #include "ui/widget/style-swatch.h" +#include "ui/interface.h" #ifdef HAVE_ASPELL # include <aspell.h> @@ -337,6 +340,12 @@ void InkscapePreferences::AddNewObjectsStyle(DialogPage &p, Glib::ustring const _("Remember the style of the (first) selected object as this tool's style")); } +//static void changeTheme() +//{ +// sp_ui_reload(); +//} + + void InkscapePreferences::initPageTools() { Gtk::TreeModel::iterator iter_tools = this->AddPage(_page_tools, _("Tools"), PREFS_PAGE_TOOLS); @@ -571,6 +580,41 @@ void InkscapePreferences::initPageTools() #endif // WITH_LPETOOL } +gchar * _inkscape_get_theme_dir (void) +{ + const gchar *var; + + var = g_getenv ("GTK_DATA_PREFIX"); + if (var == NULL) + var = g_getenv ("GTK_PATH"); + return g_build_filename (var, "share", "themes", NULL); +} + +static void +_inkscape_fill_gtk (const gchar *path, + GHashTable *t) +{ + const gchar *dir_entry; + GDir *dir = g_dir_open (path, 0, NULL); + + if (!dir) + return; + + while ((dir_entry = g_dir_read_name (dir))) + { + gchar *filename = g_build_filename (path, dir_entry, "gtk-3.0", "gtk.css", NULL); + + if (g_file_test (filename, G_FILE_TEST_IS_REGULAR) && + !g_hash_table_contains (t, dir_entry)) + g_hash_table_add (t, g_strdup (dir_entry)); + + g_free (filename); + } + + g_dir_close (dir); +} + + void InkscapePreferences::initPageUI() { Gtk::TreeModel::iterator iter_ui = this->AddPage(_page_ui, _("Interface"), PREFS_PAGE_UI); @@ -654,23 +698,7 @@ void InkscapePreferences::initPageUI() _page_ui.add_line( false, _("Language (requires restart):"), _ui_languages, "", _("Set the language for menus and number formats"), false); - { - Glib::ustring sizeLabels[] = {C_("Icon size", "Larger"), C_("Icon size", "Large"), C_("Icon size", "Small"), C_("Icon size", "Smaller")}; - int sizeValues[] = {3, 0, 1, 2}; - // "Larger" is 3 to not break existing preference files. Should fix in GTK3 - - _misc_small_tools.init( "/toolbox/tools/small", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 0 ); - _page_ui.add_line( false, _("Toolbox icon size:"), _misc_small_tools, "", - _("Set the size for the tool icons (requires restart)"), false); - - _misc_small_toolbar.init( "/toolbox/small", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 0 ); - _page_ui.add_line( false, _("Control bar icon size:"), _misc_small_toolbar, "", - _("Set the size for the icons in tools' control bars to use (requires restart)"), false); - - _misc_small_secondary.init( "/toolbox/secondary", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 1 ); - _page_ui.add_line( false, _("Secondary toolbar icon size:"), _misc_small_secondary, "", - _("Set the size for the icons in secondary toolbars to use (requires restart)"), false); - } + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); _ui_colorsliders_top.init( _("Work-around color sliders not drawing"), "/options/workarounds/colorsontop", false); _page_ui.add_line( false, "", _ui_colorsliders_top, "", @@ -717,6 +745,131 @@ void InkscapePreferences::initPageUI() _("Selects whether the dockbar switcher will show text labels, icons, or both"), false); } + //Theme + _page_theme.add_group_header( _("Theme changes, require restart")); + { + GHashTable *t; + GHashTableIter iter; + gchar *theme, *path; + gchar **builtin_themes; + GList *list, *l; + guint i; + const gchar * const *dirs; + + t = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + /* Builtin themes */ + builtin_themes = g_resources_enumerate_children ("/org/gtk/libgtk/theme", G_RESOURCE_LOOKUP_FLAGS_NONE, NULL); + for (i = 0; builtin_themes[i] != NULL; i++) + { + if (g_str_has_suffix (builtin_themes[i], "/")) + g_hash_table_add (t, g_strndup (builtin_themes[i], strlen (builtin_themes[i]) - 1)); + } + g_strfreev (builtin_themes); + + path = _inkscape_get_theme_dir (); + _inkscape_fill_gtk (path, t); + g_free (path); + + path = g_build_filename (g_get_user_data_dir (), "themes", NULL); + _inkscape_fill_gtk (path, t); + g_free (path); + + path = g_build_filename (g_get_home_dir (), ".themes", NULL); + _inkscape_fill_gtk (path, t); + g_free (path); + + dirs = g_get_system_data_dirs (); + for (i = 0; dirs[i]; i++) + { + path = g_build_filename (dirs[i], "themes", NULL); + _inkscape_fill_gtk (path, t); + g_free (path); + } + + list = NULL; + g_hash_table_iter_init (&iter, t); + while (g_hash_table_iter_next (&iter, (gpointer *)&theme, NULL)) + list = g_list_insert_sorted (list, theme, (GCompareFunc)strcmp); + + std::vector<Glib::ustring> labels; + std::vector<Glib::ustring> values; + for (l = list; l; l = l->next) + { + theme = (gchar *)l->data; + labels.push_back(Glib::ustring(theme)); + values.push_back(Glib::ustring(theme)); + } + + g_list_free (list); + g_hash_table_destroy (t); + +// g_object_bind_property (gtk_settings_get_default (), "gtk-theme-name", +// (gpointer *)&_theme, "active-id", +// (GBindingFlags)(G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE)); + + _theme.init("/theme/theme", labels, values, "Adwaita"); + _page_theme.add_line(false, _("Change theme:"), _theme, "", "", false); + } + + { + using namespace Inkscape::IO::Resource; + auto files = get_filenames(UIS, {".css"}, {"style.css","dark.css","symbolic.css"}); + std::vector<Glib::ustring> labels; + std::vector<Glib::ustring> values; + for(auto &filename: files) { + // from https://stackoverflow.com/questions/8520560/get-a-file-name-from-a-path#8520871 + // Maybe we can link boost path utilities + // Remove directory if present. + // Do this before extension removal incase directory has a period character. + const size_t last_slash_idx = filename.find_last_of("\\/"); + if (std::string::npos != last_slash_idx) + { + filename.erase(0, last_slash_idx + 1); + } + + // Remove extension if present. + const size_t period_idx = filename.rfind('.'); + if (std::string::npos != period_idx) + { + filename.erase(period_idx); + } + labels.push_back(filename); + values.push_back(filename); + } + _icon_theme.init("/theme/iconTheme", labels, values, "hicolor"); + _page_theme.add_line(false, _("Change icon theme:"), _icon_theme, "", "", false); + } + + _dark_theme.init(_("Use dark theme"), "/theme/darkTheme", true); + _page_theme.add_line(true, "", _dark_theme, "", _("Use dark theme"), true); + _symbolic_icons.init(_("Use symbolic icons"), "/theme/symbolicIcons", true); + _page_theme.add_line(true, "", _symbolic_icons, "", "", true), + _symbolic_color.init(_("Color for symbolic icons:"), "/theme/symbolicColor", 0x000000ff); + _page_theme.add_line(false, _("Color for symbolic icons:"), _symbolic_color, "", "", true); + { + Glib::ustring sizeLabels[] = {C_("Icon size", "Larger"), C_("Icon size", "Large"), C_("Icon size", "Small"), C_("Icon size", "Smaller")}; + int sizeValues[] = {3, 0, 1, 2}; + // "Larger" is 3 to not break existing preference files. Should fix in GTK3 + + _misc_small_tools.init( "/toolbox/tools/small", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 0 ); + _page_theme.add_line( false, _("Toolbox icon size:"), _misc_small_tools, "", + _("Set the size for the tool icons (requires restart)"), false); + + _misc_small_toolbar.init( "/toolbox/small", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 0 ); + _page_theme.add_line( false, _("Control bar icon size:"), _misc_small_toolbar, "", + _("Set the size for the icons in tools' control bars to use (requires restart)"), false); + + _misc_small_secondary.init( "/toolbox/secondary", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 1 ); + _page_theme.add_line( false, _("Secondary toolbar icon size:"), _misc_small_secondary, "", + _("Set the size for the icons in secondary toolbars to use (requires restart)"), false); + } + Glib::ustring const label = _("Now"); + Glib::ustring const tooltip = _("A bit slow process"); + _apply_theme = new UI::Widget::Button(label,tooltip); + _page_theme.add_line( false, _("Apply theme"), *_apply_theme, "", + _("Apply theme"), false); + _apply_theme->signal_clicked().connect(sigc::ptr_fun(sp_ui_reload)); + this->AddPage(_page_theme, _("Theme"), iter_ui, PREFS_PAGE_UI_THEME); // Windows _win_save_geom.init ( _("Save and restore window geometry for each document"), "/options/savewindowgeometry/value", PREFS_WINDOW_GEOMETRY_FILE, true, nullptr); _win_save_geom_prefs.init ( _("Remember and use last window's geometry"), "/options/savewindowgeometry/value", PREFS_WINDOW_GEOMETRY_LAST, false, &_win_save_geom); @@ -2004,13 +2157,11 @@ void InkscapePreferences::initPageSystem() _misc_latency_skew.init("/debug/latency/skew", 0.5, 2.0, 0.01, 0.10, 1.0, false, false); _page_system.add_line( false, _("Latency _skew:"), _misc_latency_skew, _("(requires restart)"), _("Factor by which the event clock is skewed from the actual time (0.9766 on some systems)"), false); - + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); _misc_namedicon_delay.init( _("Pre-render named icons"), "/options/iconrender/named_nodelay", false); _page_system.add_line( false, "", _misc_namedicon_delay, "", _("When on, named icons will be rendered before displaying the ui. This is for working around bugs in GTK+ named icon notification"), true); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - _page_system.add_group_header( _("System info")); _sys_user_config.set_text((char const *)Inkscape::IO::Resource::profile_path("")); diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h index 3a1105b11..f705d8e29 100644 --- a/src/ui/dialog/inkscape-preferences.h +++ b/src/ui/dialog/inkscape-preferences.h @@ -70,6 +70,7 @@ enum { PREFS_PAGE_TOOLS_CONNECTOR, PREFS_PAGE_TOOLS_LPETOOL, PREFS_PAGE_UI, + PREFS_PAGE_UI_THEME, PREFS_PAGE_UI_WINDOWS, PREFS_PAGE_UI_GRIDS, PREFS_PAGE_UI_KEYBOARD_SHORTCUTS, @@ -160,6 +161,7 @@ protected: UI::Widget::DialogPage _page_eraser; UI::Widget::DialogPage _page_ui; + UI::Widget::DialogPage _page_theme; UI::Widget::DialogPage _page_windows; UI::Widget::DialogPage _page_grids; @@ -238,6 +240,16 @@ protected: UI::Widget::PrefCheckButton _t_node_delete_preserves_shape; UI::Widget::PrefColorPicker _t_node_pathoutline_color; + UI::Widget::PrefCombo _theme; + UI::Widget::PrefCombo _icon_theme; + UI::Widget::PrefCheckButton _dark_theme; + UI::Widget::PrefCheckButton _symbolic_icons; + UI::Widget::PrefColorPicker _symbolic_color; + UI::Widget::PrefCombo _misc_small_toolbar; + UI::Widget::PrefCombo _misc_small_secondary; + UI::Widget::PrefCombo _misc_small_tools; + UI::Widget::Button *_apply_theme; + UI::Widget::PrefRadioButton _win_dockable; UI::Widget::PrefRadioButton _win_floating; UI::Widget::PrefRadioButton _win_native; @@ -357,9 +369,6 @@ protected: // UI page UI::Widget::PrefCombo _ui_languages; - UI::Widget::PrefCombo _misc_small_toolbar; - UI::Widget::PrefCombo _misc_small_secondary; - UI::Widget::PrefCombo _misc_small_tools; UI::Widget::PrefCheckButton _ui_colorsliders_top; UI::Widget::PrefSpinButton _misc_recent; UI::Widget::PrefCheckButton _ui_partialdynamic; diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp index fe528d34d..bfd0e05e3 100644 --- a/src/ui/dialog/layers.cpp +++ b/src/ui/dialog/layers.cpp @@ -30,11 +30,13 @@ #include "verbs.h" #include "helper/action.h" +#include "helper/icon-loader.h" #include "object/sp-root.h" #include "svg/css-ostringstream.h" +#include "helper/icon-loader.h" #include "ui/icon-names.h" #include "ui/tools/tool-base.h" #include "ui/widget/imagetoggler.h" @@ -85,7 +87,7 @@ void LayersPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned i bool set = false; if ( iconName ) { - GtkWidget *child = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_SMALL_TOOLBAR ); + GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); btn.set_relief(Gtk::RELIEF_NONE); @@ -97,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_image_new_from_icon_name( action->image, GTK_ICON_SIZE_SMALL_TOOLBAR ); + GtkWidget *child = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); set = true; @@ -121,8 +123,7 @@ Gtk::MenuItem& LayersPanel::_addPopupItem( SPDesktop *desktop, unsigned int code const char* label = nullptr; if ( iconName ) { - iconWidget = Gtk::manage(new Gtk::Image()); - iconWidget->set_from_icon_name( iconName, Gtk::ICON_SIZE_MENU ); + iconWidget = Gtk::manage(sp_get_icon_image(iconName, Gtk::ICON_SIZE_MENU)); } if ( desktop ) { @@ -130,8 +131,7 @@ Gtk::MenuItem& LayersPanel::_addPopupItem( SPDesktop *desktop, unsigned int code if ( verb ) { SPAction *action = verb->get_action(Inkscape::ActionContext(desktop)); if ( !iconWidget && action && action->image ) { - iconWidget = Gtk::manage(new Gtk::Image()); - iconWidget->set_from_icon_name( action->image, Gtk::ICON_SIZE_MENU ); + iconWidget = Gtk::manage(sp_get_icon_image(action->image, Gtk::ICON_SIZE_MENU)); } if ( action ) { diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp index dd019cfba..ccd71a171 100644 --- a/src/ui/dialog/livepatheffect-editor.cpp +++ b/src/ui/dialog/livepatheffect-editor.cpp @@ -30,6 +30,7 @@ #include "verbs.h" #include "helper/action.h" +#include "helper/icon-loader.h" #include "live_effects/effect.h" #include "live_effects/lpeobject-reference.h" @@ -73,7 +74,7 @@ void lpeeditor_selection_modified (Inkscape::Selection * selection, guint /*flag static void lpe_style_button(Gtk::Button& btn, char const* iconName) { - GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); 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 397f5690e..2bcde597f 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -33,6 +33,7 @@ #include "verbs.h" #include "helper/action.h" +#include "helper/icon-loader.h" #include "object/filters/blend.h" #include "object/filters/gaussian-blur.h" @@ -230,7 +231,7 @@ public: */ void ObjectsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_SMALL_TOOLBAR ); + GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); btn.set_relief(Gtk::RELIEF_NONE); @@ -252,8 +253,7 @@ Gtk::MenuItem& ObjectsPanel::_addPopupItem( SPDesktop *desktop, unsigned int cod const char* label = nullptr; if ( iconName ) { - iconWidget = Gtk::manage(new Gtk::Image()); - iconWidget->set_from_icon_name( iconName, Gtk::ICON_SIZE_MENU ); + iconWidget = Gtk::manage(sp_get_icon_image(iconName, Gtk::ICON_SIZE_MENU)); } if ( desktop ) { @@ -261,8 +261,7 @@ Gtk::MenuItem& ObjectsPanel::_addPopupItem( SPDesktop *desktop, unsigned int cod if ( verb ) { SPAction *action = verb->get_action(Inkscape::ActionContext(desktop)); if ( !iconWidget && action && action->image ) { - iconWidget = Gtk::manage(new Gtk::Image()); - iconWidget->set_from_icon_name( action->image, Gtk::ICON_SIZE_MENU ); + iconWidget = Gtk::manage(sp_get_icon_image(action->image, Gtk::ICON_SIZE_MENU)); } if ( action ) { diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp index 2c457b6d0..ffa535b78 100644 --- a/src/ui/dialog/ocaldialogs.cpp +++ b/src/ui/dialog/ocaldialogs.cpp @@ -18,12 +18,13 @@ #include "ocaldialogs.h" -#include "path-prefix.h" #include "filedialogimpl-gtkmm.h" -#include "ui/interface.h" +#include "helper/icon-loader.h" #include "inkgc/gc-core.h" #include "io/sys.h" +#include "path-prefix.h" #include "preferences.h" +#include "ui/interface.h" #include <gtkmm/notebook.h> #include <gtkmm/spinner.h> @@ -462,8 +463,7 @@ bool PreviewWidget::_on_draw(const Cairo::RefPtr<Cairo::Context>& cr) StatusWidget::StatusWidget() : Gtk::HBox(false, 6) { - image = new Gtk::Image(); - image->set_from_icon_name("dialog-error", Gtk::ICON_SIZE_MENU); + image = sp_get_icon_image("dialog-error", Gtk::ICON_SIZE_MENU); spinner = new Gtk::Spinner(); label = new Gtk::Label(); @@ -488,7 +488,7 @@ void StatusWidget::set_info(Glib::ustring text) spinner->hide(); image->show(); label->show(); - image->set_from_icon_name("dialog-information", Gtk::ICON_SIZE_MENU); + image = sp_get_icon_image("dialog-information", Gtk::ICON_SIZE_MENU); label->set_text(text); } @@ -497,7 +497,7 @@ void StatusWidget::set_error(Glib::ustring text) spinner->hide(); image->show(); label->show(); - image->set_from_icon_name("dialog-error", Gtk::ICON_SIZE_MENU); + image = sp_get_icon_image("dialog-error", Gtk::ICON_SIZE_MENU); label->set_text(text); } diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp index 9171dd9ce..e978667ef 100644 --- a/src/ui/dialog/styledialog.cpp +++ b/src/ui/dialog/styledialog.cpp @@ -18,7 +18,7 @@ #include "inkscape.h" #include "document-undo.h" - +#include "helper/icon-loader.h" #include "ui/widget/addtoicon.h" #include "xml/attribute-record.h" @@ -1518,7 +1518,7 @@ bool StyleDialog::_delProperty(GdkEventButton *event) void StyleDialog::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); 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 578562a79..cc5434318 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -28,6 +28,7 @@ #include "io/resource.h" #include "display/cairo-utils.h" +#include "helper/icon-loader.h" #include "ui/cache/svg_preview_cache.h" #include "ui/clipboard.h" #include "ui/icon-names.h" @@ -272,8 +273,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : scroller->set_hexpand(); table->attach(*Gtk::manage(tools),0,row,2,1); - auto add_symbol_image = Gtk::manage(new Gtk::Image()); - add_symbol_image->set_from_icon_name("symbol-add", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto add_symbol_image = Gtk::manage(sp_get_icon_image("symbol-add", Gtk::ICON_SIZE_SMALL_TOOLBAR)); add_symbol = Gtk::manage(new Gtk::Button()); add_symbol->add(*add_symbol_image); @@ -283,8 +283,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : add_symbol->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::insertSymbol)); tools->pack_start(* add_symbol, Gtk::PACK_SHRINK); - auto remove_symbolImage = Gtk::manage(new Gtk::Image()); - remove_symbolImage->set_from_icon_name("symbol-remove", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto remove_symbolImage = Gtk::manage(sp_get_icon_image("symbol-remove", Gtk::ICON_SIZE_SMALL_TOOLBAR)); remove_symbol = Gtk::manage(new Gtk::Button()); remove_symbol->add(*remove_symbolImage); @@ -300,8 +299,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : // Pack size (controls display area) pack_size = 2; // Default 32px - auto packMoreImage = Gtk::manage(new Gtk::Image()); - packMoreImage->set_from_icon_name("pack-more", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto packMoreImage = Gtk::manage(sp_get_icon_image("pack-more", Gtk::ICON_SIZE_SMALL_TOOLBAR)); more = Gtk::manage(new Gtk::Button()); more->add(*packMoreImage); @@ -311,8 +309,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : more->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::packmore)); tools->pack_start(* more, Gtk::PACK_SHRINK); - auto packLessImage = Gtk::manage(new Gtk::Image()); - packLessImage->set_from_icon_name("pack-less", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto packLessImage = Gtk::manage(sp_get_icon_image("pack-less", Gtk::ICON_SIZE_SMALL_TOOLBAR)); fewer = Gtk::manage(new Gtk::Button()); fewer->add(*packLessImage); @@ -323,8 +320,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : tools->pack_start(* fewer, Gtk::PACK_SHRINK); // Toggle scale to fit on/off - auto fit_symbolImage = Gtk::manage(new Gtk::Image()); - fit_symbolImage->set_from_icon_name("symbol-fit", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto fit_symbolImage = Gtk::manage(sp_get_icon_image("symbol-fit", Gtk::ICON_SIZE_SMALL_TOOLBAR)); fit_symbol = Gtk::manage(new Gtk::ToggleButton()); fit_symbol->add(*fit_symbolImage); @@ -337,8 +333,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : // Render size (scales symbols within display area) scale_factor = 0; // Default 1:1 * pack_size/pack_size default - auto zoom_outImage = Gtk::manage(new Gtk::Image()); - zoom_outImage->set_from_icon_name("symbol-smaller", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto zoom_outImage = Gtk::manage(sp_get_icon_image("symbol-smaller", Gtk::ICON_SIZE_SMALL_TOOLBAR)); zoom_out = Gtk::manage(new Gtk::Button()); zoom_out->add(*zoom_outImage); @@ -349,8 +344,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : zoom_out->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::zoomout)); tools->pack_start(* zoom_out, Gtk::PACK_SHRINK); - auto zoom_inImage = Gtk::manage(new Gtk::Image()); - zoom_inImage->set_from_icon_name("symbol-bigger", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto zoom_inImage = Gtk::manage(sp_get_icon_image("symbol-bigger", Gtk::ICON_SIZE_SMALL_TOOLBAR)); zoom_in = Gtk::manage(new Gtk::Button()); zoom_in->add(*zoom_inImage); @@ -471,20 +465,24 @@ void SymbolsDialog::rebuild() { void SymbolsDialog::showOverlay() { #if GTKMM_CHECK_VERSION(3,14,0) Glib::ustring current = Glib::Markup::escape_text(symbol_set->get_active_text()); - overlay_icon->set_from_icon_name("none", iconsize); + overlay_icon = sp_get_icon_image("none", iconsize); if (current == ALLDOCS && !l.size()) { if (!all_docs_processed ) { - overlay_icon->set_from_icon_name("searching", iconsize); - overlay_title->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"large\">") + Glib::ustring(_("Search in all symbol sets...")) + Glib::ustring("</span>")); - overlay_desc->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"small\">") + Glib::ustring(_("First search can be slow.")) + Glib::ustring("</span>")); + overlay_icon = sp_get_icon_image("searching", iconsize); + overlay_title->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"large\">") + + Glib::ustring(_("Search in all symbol sets...")) + Glib::ustring("</span>")); + overlay_desc->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"small\">") + + Glib::ustring(_("First search can be slow.")) + Glib::ustring("</span>")); } else if (!icons_found && !search_str.empty()) { overlay_title->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"large\">") + Glib::ustring(_("No results found")) + Glib::ustring("</span>")); overlay_desc->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"small\">") + Glib::ustring(_("Try a different search term.")) + Glib::ustring("</span>")); } else { - overlay_icon->set_from_icon_name("searching", iconsize); - overlay_title->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"large\">") + Glib::ustring(_("Search in all symbol sets...")) + Glib::ustring("</span>")); - overlay_desc->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"small\">") + Glib::ustring("</span>")); + overlay_icon = sp_get_icon_image("searching", iconsize); + overlay_title->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"large\">") + + Glib::ustring(_("Search in all symbol sets...")) + Glib::ustring("</span>")); + overlay_desc->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"small\">") + + Glib::ustring("</span>")); } } else if (!number_symbols && (current != CURRENTDOC || !search_str.empty())) { overlay_title->set_markup(Glib::ustring("<span foreground=\"#333333\" size=\"large\">") + Glib::ustring(_("No results found")) + Glib::ustring("</span>")); diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index ed8c00c61..d27a320a7 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -18,21 +18,23 @@ #include <gtkmm/imagemenuitem.h> #include <glibmm/main.h> -#include "desktop.h" #include "desktop-style.h" -#include "document.h" +#include "desktop.h" #include "document-undo.h" +#include "document.h" #include "helper/action.h" +#include "helper/icon-loader.h" #include "inkscape.h" #include "layer-fns.h" #include "layer-manager.h" +#include "helper/icon-loader.h" #include "svg/css-ostringstream.h" -#include "ui/widget/layertypeicon.h" +#include "ui/tools/tool-base.h" //"event-context.h" #include "ui/widget/addtoicon.h" +#include "ui/widget/layertypeicon.h" #include "verbs.h" #include "xml/node-observer.h" -#include "ui/tools/tool-base.h" //"event-context.h" //#include "dialogs/dialog-events.h" #include "ui/widget/color-notebook.h" #include "filter-chemistry.h" @@ -125,7 +127,7 @@ public: void TagsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *child = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); gtk_widget_show(child); btn.add(*manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); @@ -139,7 +141,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, const char* label = nullptr; if ( iconName ) { - iconWidget = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_MENU ); + iconWidget = GTK_WIDGET(sp_get_icon_image(iconName, GTK_ICON_SIZE_MENU)->gobj()); } if ( desktop ) { @@ -147,7 +149,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_image_new_from_icon_name( action->image, GTK_ICON_SIZE_MENU ); + iconWidget = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU)->gobj()); } if ( action ) { diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index 9a0e4ddf4..14ddc9044 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -29,6 +29,7 @@ #include "transformation.h" #include "verbs.h" +#include "helper/icon-loader.h" #include "object/sp-item-transform.h" #include "object/sp-namedview.h" @@ -280,16 +281,14 @@ void Transformation::layoutPageRotate() _scalar_rotate.setDigits(3); _scalar_rotate.setIncrements(0.1, 1.0); - auto object_rotate_left_icon = Gtk::manage(new Gtk::Image()); - object_rotate_left_icon->set_from_icon_name("object-rotate-left", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto object_rotate_left_icon = Gtk::manage(sp_get_icon_image("object-rotate-left", Gtk::ICON_SIZE_SMALL_TOOLBAR)); _counterclockwise_rotate.add(*object_rotate_left_icon); _counterclockwise_rotate.set_mode(false); _counterclockwise_rotate.set_relief(Gtk::RELIEF_NONE); _counterclockwise_rotate.set_tooltip_text(_("Rotate in a counterclockwise direction")); - auto object_rotate_right_icon = Gtk::manage(new Gtk::Image()); - object_rotate_right_icon->set_from_icon_name("object-rotate-right", Gtk::ICON_SIZE_SMALL_TOOLBAR); + auto object_rotate_right_icon = Gtk::manage(sp_get_icon_image("object-rotate-right", Gtk::ICON_SIZE_SMALL_TOOLBAR)); _clockwise_rotate.add(*object_rotate_right_icon); _clockwise_rotate.set_mode(false); diff --git a/src/ui/dialog/undo-history.cpp b/src/ui/dialog/undo-history.cpp index e95724435..c480624fd 100644 --- a/src/ui/dialog/undo-history.cpp +++ b/src/ui/dialog/undo-history.cpp @@ -17,14 +17,14 @@ #include "undo-history.h" -#include "document.h" #include "document-undo.h" +#include "document.h" +#include "helper/icon-loader.h" #include "inkscape.h" - #include "util/signal-blocker.h" #include "desktop.h" -#include <gtkmm/icontheme.h> + namespace Inkscape { namespace UI { @@ -45,14 +45,13 @@ void CellRendererSPIcon::render_vfunc(const Cairo::RefPtr<Cairo::Context>& cr, Glib::ustring image_name = Inkscape::Verb::get(_property_event_type)->get_image(); Gtk::Image* icon = Gtk::manage(new Gtk::Image()); - icon->set_from_icon_name(image_name, Gtk::ICON_SIZE_MENU); + icon = sp_get_icon_image(image_name, Gtk::ICON_SIZE_MENU); if (icon) { // check icon type (inkscape, gtk, none) if ( GTK_IS_IMAGE(icon->gobj()) ) { - auto icon_theme = Gtk::IconTheme::get_default(); - _property_icon = icon_theme->load_icon(image_name, 16); + _property_icon = sp_get_icon_pixbuf(image_name, 16); } else { delete icon; return; diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp index c7c5424eb..647e0beed 100644 --- a/src/ui/dialog/xml-tree.cpp +++ b/src/ui/dialog/xml-tree.cpp @@ -35,6 +35,7 @@ #include "object/sp-root.h" #include "object/sp-string.h" +#include "helper/icon-loader.h" #include "ui/dialog-events.h" #include "ui/icon-names.h" #include "ui/interface.h" @@ -113,24 +114,21 @@ XmlTree::XmlTree() : tree_toolbar.set_toolbar_style(Gtk::TOOLBAR_ICONS); - auto xml_element_new_icon = Gtk::manage(new Gtk::Image()); - xml_element_new_icon->set_from_icon_name("xml-element-new", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto xml_element_new_icon = Gtk::manage(sp_get_icon_image("xml-element-new", Gtk::ICON_SIZE_LARGE_TOOLBAR)); xml_element_new_button.set_icon_widget(*xml_element_new_icon); xml_element_new_button.set_tooltip_text(_("New element node")); xml_element_new_button.set_sensitive(false); tree_toolbar.add(xml_element_new_button); - auto xml_text_new_icon = Gtk::manage(new Gtk::Image()); - xml_text_new_icon->set_from_icon_name("xml-text-new", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto xml_text_new_icon = Gtk::manage(sp_get_icon_image("xml-text-new", Gtk::ICON_SIZE_LARGE_TOOLBAR)); xml_text_new_button.set_icon_widget(*xml_text_new_icon); xml_text_new_button.set_tooltip_text(_("New text node")); xml_text_new_button.set_sensitive(false); tree_toolbar.add(xml_text_new_button); - auto xml_node_duplicate_icon = Gtk::manage(new Gtk::Image()); - xml_node_duplicate_icon->set_from_icon_name("xml-node-duplicate", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto xml_node_duplicate_icon = Gtk::manage(sp_get_icon_image("xml-node-duplicate", Gtk::ICON_SIZE_LARGE_TOOLBAR)); xml_node_duplicate_button.set_icon_widget(*xml_node_duplicate_icon); xml_node_duplicate_button.set_tooltip_text(_("Duplicate node")); @@ -139,8 +137,7 @@ XmlTree::XmlTree() : tree_toolbar.add(separator); - auto xml_node_delete_icon = Gtk::manage(new Gtk::Image()); - xml_node_delete_icon->set_from_icon_name("xml-node-delete", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto xml_node_delete_icon = Gtk::manage(sp_get_icon_image("xml-node-delete", Gtk::ICON_SIZE_LARGE_TOOLBAR)); xml_node_delete_button.set_icon_widget(*xml_node_delete_icon); xml_node_delete_button.set_tooltip_text(Q_("nodeAsInXMLdialogTooltip|Delete node")); @@ -149,8 +146,7 @@ XmlTree::XmlTree() : tree_toolbar.add(separator2); - auto format_indent_less_icon = Gtk::manage(new Gtk::Image()); - format_indent_less_icon->set_from_icon_name("format-indent-less", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto format_indent_less_icon = Gtk::manage(sp_get_icon_image("format-indent-less", Gtk::ICON_SIZE_LARGE_TOOLBAR)); unindent_node_button.set_icon_widget(*format_indent_less_icon); unindent_node_button.set_label(_("Unindent node")); @@ -158,8 +154,7 @@ XmlTree::XmlTree() : unindent_node_button.set_sensitive(false); tree_toolbar.add(unindent_node_button); - auto format_indent_more_icon = Gtk::manage(new Gtk::Image()); - format_indent_more_icon->set_from_icon_name("format-indent-more", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto format_indent_more_icon = Gtk::manage(sp_get_icon_image("format-indent-more", Gtk::ICON_SIZE_LARGE_TOOLBAR)); indent_node_button.set_icon_widget(*format_indent_more_icon); indent_node_button.set_label(_("Indent node")); @@ -167,8 +162,7 @@ XmlTree::XmlTree() : indent_node_button.set_sensitive(false); tree_toolbar.add(indent_node_button); - auto go_up_icon = Gtk::manage(new Gtk::Image()); - go_up_icon->set_from_icon_name("go-up", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto go_up_icon = Gtk::manage(sp_get_icon_image("go-up", Gtk::ICON_SIZE_LARGE_TOOLBAR)); raise_node_button.set_icon_widget(*go_up_icon); raise_node_button.set_label(_("Raise node")); @@ -176,8 +170,7 @@ XmlTree::XmlTree() : raise_node_button.set_sensitive(false); tree_toolbar.add(raise_node_button); - auto go_down_icon = Gtk::manage(new Gtk::Image()); - go_down_icon->set_from_icon_name("go-down", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto go_down_icon = Gtk::manage(sp_get_icon_image("go-down", Gtk::ICON_SIZE_LARGE_TOOLBAR)); lower_node_button.set_icon_widget(*go_down_icon); lower_node_button.set_label(_("Lower node")); @@ -204,8 +197,8 @@ XmlTree::XmlTree() : attr_toolbar.set_toolbar_style(Gtk::TOOLBAR_ICONS); - auto xml_attribute_delete_icon = Gtk::manage(new Gtk::Image()); - xml_attribute_delete_icon->set_from_icon_name("xml-attribute-delete", Gtk::ICON_SIZE_LARGE_TOOLBAR); + auto xml_attribute_delete_icon = + Gtk::manage(sp_get_icon_image("xml-attribute-delete", Gtk::ICON_SIZE_LARGE_TOOLBAR)); xml_attribute_delete_button.set_icon_widget(*xml_attribute_delete_icon); xml_attribute_delete_button.set_tooltip_text(_("Delete attribute")); xml_attribute_delete_button.set_sensitive(false); diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index 7e64e876b..9f5d2d38c 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -51,6 +51,7 @@ #include "extension/input.h" #include "helper/action.h" +#include "helper/icon-loader.h" #include "helper/window.h" #include "io/sys.h" @@ -262,6 +263,52 @@ sp_ui_new_view() sp_namedview_update_layers_from_document(static_cast<SPDesktop*>(dtw->view)); } +void +sp_ui_reload() +{ + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + int window_geometry = prefs->getInt("/options/savewindowgeometry/value", PREFS_WINDOW_GEOMETRY_NONE); + g_object_set (gtk_settings_get_default (), "gtk-theme-name", prefs->getString("/theme/theme").c_str(), NULL); + g_object_set (gtk_settings_get_default (), "gtk-application-prefer-dark-theme", prefs->getBool("/theme/darkTheme", false), NULL); + prefs->setInt("/options/savewindowgeometry/value", PREFS_WINDOW_GEOMETRY_LAST); + prefs->save(); + std::list<SPDesktop *> desktops; + INKSCAPE.get_all_desktops(desktops); + std::list<SPDesktop *>::iterator i = desktops.begin(); + while (i != desktops.end()) + { + SPDesktop * dt = *i; + if (dt == nullptr) { + ++i; + continue; + } + dt->storeDesktopPosition(); + + SPDocument *document; + SPViewWidget *dtw; + + document = dt->getDocument(); + if (!document) { + ++i; + continue; + } + + dtw = sp_desktop_widget_new(sp_document_namedview(document, nullptr)); + if (dtw == nullptr) { + ++i; + continue; + } + sp_create_window(dtw, TRUE); + sp_namedview_window_from_document(static_cast<SPDesktop*>(dtw->view)); + sp_namedview_update_layers_from_document(static_cast<SPDesktop*>(dtw->view)); + dt->destroyWidget(); + i++; + } + INKSCAPE.add_style_sheet(); + prefs->setInt("/options/savewindowgeometry/value", window_geometry); +} + void sp_ui_new_view_preview() { SPDocument *document = SP_ACTIVE_DOCUMENT; @@ -467,7 +514,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 not, give the label a bit more space if(show_icon && action->image) { - icon = gtk_image_new_from_icon_name(action->image, GTK_ICON_SIZE_MENU); + icon = GTK_WIDGET(sp_get_icon_image(action->image, GTK_ICON_SIZE_MENU)->gobj()); } else { icon = gtk_label_new(nullptr); // A fake icon just to act as a placeholder diff --git a/src/ui/interface.h b/src/ui/interface.h index 83788ca1b..90d86bea7 100644 --- a/src/ui/interface.h +++ b/src/ui/interface.h @@ -45,6 +45,8 @@ void sp_ui_close_view (GtkWidget *widget); void sp_ui_new_view (); +void sp_ui_reload (); + /** * @todo TODO: not yet working. To be re-enabled (by adding to menu) once it works. */ diff --git a/src/ui/view/edit-widget-interface.h b/src/ui/view/edit-widget-interface.h index f2e34b534..7004fea95 100644 --- a/src/ui/view/edit-widget-interface.h +++ b/src/ui/view/edit-widget-interface.h @@ -83,6 +83,9 @@ struct EditWidgetInterface virtual void destroy() = 0; + /// Store window position to prefs + virtual void storeDesktopPosition() = 0; + /// Queue a redraw request with the canvas virtual void requestCanvasUpdate() = 0; diff --git a/src/ui/widget/addtoicon.cpp b/src/ui/widget/addtoicon.cpp index e5119fc60..4542333b5 100644 --- a/src/ui/widget/addtoicon.cpp +++ b/src/ui/widget/addtoicon.cpp @@ -14,11 +14,10 @@ #include "ui/widget/addtoicon.h" -#include <gtkmm/icontheme.h> - -#include "widgets/toolbox.h" -#include "ui/icon-names.h" +#include "helper/icon-loader.h" #include "layertypeicon.h" +#include "ui/icon-names.h" +#include "widgets/toolbox.h" namespace Inkscape { namespace UI { @@ -33,9 +32,6 @@ AddToIcon::AddToIcon() : { property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - gint width, height; - gtk_icon_size_lookup(GTK_ICON_SIZE_BUTTON, &width, &height); - phys = width; // Assumes that we have a square icon? // Glib::RefPtr<Gtk::IconTheme> icon_theme = Gtk::IconTheme::get_default(); // @@ -103,11 +99,7 @@ bool AddToIcon::activate_vfunc(GdkEvent* /*event*/, void AddToIcon::set_pixbuf() { bool active = property_active().get_value(); - - auto icon_theme = Gtk::IconTheme::get_default(); - - property_pixbuf() = icon_theme->load_icon(active ? "list-add" : "edit-delete", - phys); + property_pixbuf() = sp_get_icon_pixbuf((active ? "list-add" : "edit-delete"), GTK_ICON_SIZE_BUTTON); } diff --git a/src/ui/widget/addtoicon.h b/src/ui/widget/addtoicon.h index 60c773e84..c17ae907a 100644 --- a/src/ui/widget/addtoicon.h +++ b/src/ui/widget/addtoicon.h @@ -54,7 +54,6 @@ protected: private: - int phys; ///< Physical size of the icon (px) // Glib::ustring _pixAddName; diff --git a/src/ui/widget/alignment-selector.cpp b/src/ui/widget/alignment-selector.cpp index c6c95f097..9256a08bd 100644 --- a/src/ui/widget/alignment-selector.cpp +++ b/src/ui/widget/alignment-selector.cpp @@ -5,6 +5,7 @@ */ #include "ui/widget/alignment-selector.h" +#include "helper/icon-loader.h" #include "ui/icon-names.h" #include <gtkmm/image.h> @@ -14,8 +15,7 @@ namespace UI { namespace Widget { void AlignmentSelector::setupButton(const Glib::ustring& icon, Gtk::Button& button) { - Gtk::Image* buttonIcon = Gtk::manage(new Gtk::Image()); - buttonIcon->set_from_icon_name(icon, Gtk::ICON_SIZE_SMALL_TOOLBAR); + Gtk::Image *buttonIcon = Gtk::manage(sp_get_icon_image(icon, Gtk::ICON_SIZE_SMALL_TOOLBAR)); buttonIcon->show(); button.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index 52768b7f1..fc7c15f21 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -6,8 +6,8 @@ * * Released under GNU GPL. Read the file 'COPYING' for more information. */ - #include "ui/widget/anchor-selector.h" +#include "helper/icon-loader.h" #include "ui/icon-names.h" #include <gtkmm/image.h> @@ -17,9 +17,8 @@ namespace UI { namespace Widget { void AnchorSelector::setupButton(const Glib::ustring& icon, Gtk::ToggleButton& button) { - Gtk::Image* buttonIcon = Gtk::manage(new Gtk::Image()); - buttonIcon->set_from_icon_name(icon, Gtk::ICON_SIZE_SMALL_TOOLBAR); - buttonIcon->show(); + Gtk::Image *buttonIcon = Gtk::manage(sp_get_icon_image(icon, Gtk::ICON_SIZE_SMALL_TOOLBAR)); + buttonIcon->show(); button.set_relief(Gtk::RELIEF_NONE); button.show(); diff --git a/src/ui/widget/clipmaskicon.cpp b/src/ui/widget/clipmaskicon.cpp index 509e218a9..704b5c653 100644 --- a/src/ui/widget/clipmaskicon.cpp +++ b/src/ui/widget/clipmaskicon.cpp @@ -13,11 +13,10 @@ #include "ui/widget/clipmaskicon.h" -#include <gtkmm/icontheme.h> - -#include "widgets/toolbox.h" -#include "ui/icon-names.h" +#include "helper/icon-loader.h" #include "layertypeicon.h" +#include "ui/icon-names.h" +#include "widgets/toolbox.h" namespace Inkscape { namespace UI { @@ -37,14 +36,9 @@ ClipMaskIcon::ClipMaskIcon() : property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - gint width, height; - gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); - phys = width; - - Glib::RefPtr<Gtk::IconTheme> icon_theme = Gtk::IconTheme::get_default(); - _property_pixbuf_clip = icon_theme->load_icon(_pixClipName, phys, (Gtk::IconLookupFlags)0); - _property_pixbuf_mask = icon_theme->load_icon(_pixMaskName, phys, (Gtk::IconLookupFlags)0); - _property_pixbuf_both = icon_theme->load_icon(_pixBothName, phys, (Gtk::IconLookupFlags)0); + _property_pixbuf_clip = sp_get_icon_pixbuf(_pixClipName, GTK_ICON_SIZE_MENU); + _property_pixbuf_mask = sp_get_icon_pixbuf(_pixMaskName, GTK_ICON_SIZE_MENU); + _property_pixbuf_both = sp_get_icon_pixbuf(_pixBothName, GTK_ICON_SIZE_MENU); property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>(nullptr); } diff --git a/src/ui/widget/color-notebook.cpp b/src/ui/widget/color-notebook.cpp index 5b0f12e51..2d8dcc310 100644 --- a/src/ui/widget/color-notebook.cpp +++ b/src/ui/widget/color-notebook.cpp @@ -30,6 +30,7 @@ #include "preferences.h" #include "profile-manager.h" +#include "helper/icon-loader.h" #include "object/color-profile.h" #include "svg/svg-icc-color.h" @@ -159,21 +160,22 @@ void ColorNotebook::_initUI() #if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) /* Create color management icons */ _box_colormanaged = gtk_event_box_new(); - GtkWidget *colormanaged = gtk_image_new_from_icon_name("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *colormanaged = + GTK_WIDGET(sp_get_icon_image("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); 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_image_new_from_icon_name("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *outofgamut = GTK_WIDGET(sp_get_icon_image("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); 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_image_new_from_icon_name("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *toomuchink = GTK_WIDGET(sp_get_icon_image("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); 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 +184,7 @@ void ColorNotebook::_initUI() /* Color picker */ - GtkWidget *picker = gtk_image_new_from_icon_name("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR); + GtkWidget *picker = GTK_WIDGET(sp_get_icon_image("color-picker", GTK_ICON_SIZE_SMALL_TOOLBAR)->gobj()); _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/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp index 7cd841d88..c85abd6de 100644 --- a/src/ui/widget/dock-item.cpp +++ b/src/ui/widget/dock-item.cpp @@ -10,11 +10,11 @@ #include "ui/widget/dock.h" #include "desktop.h" +#include "helper/icon-loader.h" #include "inkscape.h" #include "ui/icon-names.h" - -#include <gtkmm/icontheme.h> #include <glibmm/exceptionhandler.h> +#include <gtkmm/icontheme.h> namespace Inkscape { namespace UI { @@ -31,6 +31,7 @@ DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& l _grab_focus_on_realize(false), _gdl_dock_item(nullptr) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); GdlDockItemBehavior gdl_dock_behavior = (prefs->getBool("/options/dock/cancenterdock", true) ? @@ -39,17 +40,7 @@ DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& l if (!icon_name.empty()) { - Glib::RefPtr<Gtk::IconTheme> iconTheme = Gtk::IconTheme::get_default(); - - int width = 0; - int height = 0; - Gtk::IconSize::lookup(Gtk::ICON_SIZE_MENU, width, height); - try { - _icon_pixbuf = iconTheme->load_icon(icon_name, width); - } - catch (const Gtk::IconThemeError& e) { - std::cerr << "DocItem::DocItem(): " << e.what() << std::endl; - } + _icon_pixbuf = sp_get_icon_pixbuf(icon_name, "/toolbox/secondary"); } if ( _icon_pixbuf ) { diff --git a/src/ui/widget/imagetoggler.cpp b/src/ui/widget/imagetoggler.cpp index 1200144f1..76b48fbbe 100644 --- a/src/ui/widget/imagetoggler.cpp +++ b/src/ui/widget/imagetoggler.cpp @@ -11,10 +11,9 @@ #include "ui/widget/imagetoggler.h" -#include <gtkmm/icontheme.h> - -#include "widgets/toolbox.h" +#include "helper/icon-loader.h" #include "ui/icon-names.h" +#include "widgets/toolbox.h" #include <iostream> @@ -34,18 +33,8 @@ ImageToggler::ImageToggler( char const* on, char const* off) : { property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - gint width, height; - gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); - int phys = width; - - Glib::RefPtr<Gtk::IconTheme> icon_theme = Gtk::IconTheme::get_default(); - try { - _property_pixbuf_on = icon_theme->load_icon(_pixOnName, phys, (Gtk::IconLookupFlags)0); - _property_pixbuf_off = icon_theme->load_icon(_pixOffName, phys, (Gtk::IconLookupFlags)0); - } - catch (const Gtk::IconThemeError& e) { - std::cerr << "ImageToggler::ImageToggler(): " << e.what() << std::endl; - } + _property_pixbuf_on = sp_get_icon_pixbuf(_pixOnName, GTK_ICON_SIZE_MENU); + _property_pixbuf_off = sp_get_icon_pixbuf(_pixOffName, GTK_ICON_SIZE_MENU); property_pixbuf() = _property_pixbuf_off.get_value(); } diff --git a/src/ui/widget/insertordericon.cpp b/src/ui/widget/insertordericon.cpp index d402aca37..1343786a1 100644 --- a/src/ui/widget/insertordericon.cpp +++ b/src/ui/widget/insertordericon.cpp @@ -8,12 +8,11 @@ */ #include "ui/widget/insertordericon.h" - -#include <gtkmm/icontheme.h> -#include "widgets/toolbox.h" -#include "ui/icon-names.h" +#include "helper/icon-loader.h" #include "layertypeicon.h" +#include "ui/icon-names.h" +#include "widgets/toolbox.h" namespace Inkscape { namespace UI { @@ -31,13 +30,8 @@ InsertOrderIcon::InsertOrderIcon() : property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - gint width, height; - gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); - phys=width; - - Glib::RefPtr<Gtk::IconTheme> icon_theme = Gtk::IconTheme::get_default(); - _property_pixbuf_top = icon_theme->load_icon(_pixTopName, phys, (Gtk::IconLookupFlags)0); - _property_pixbuf_bottom = icon_theme->load_icon(_pixBottomName, phys, (Gtk::IconLookupFlags)0); + _property_pixbuf_top = sp_get_icon_pixbuf(_pixTopName, GTK_ICON_SIZE_MENU); + _property_pixbuf_bottom = sp_get_icon_pixbuf(_pixBottomName, GTK_ICON_SIZE_MENU); property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>(nullptr); } diff --git a/src/ui/widget/labelled.cpp b/src/ui/widget/labelled.cpp index 2e9840035..6ee2b752f 100644 --- a/src/ui/widget/labelled.cpp +++ b/src/ui/widget/labelled.cpp @@ -12,8 +12,8 @@ # include <config.h> #endif +#include "helper/icon-loader.h" #include "labelled.h" - #include <gtkmm/image.h> #include <gtkmm/label.h> @@ -32,8 +32,7 @@ Labelled::Labelled(Glib::ustring const &label, Glib::ustring const &tooltip, { g_assert(g_utf8_validate(icon.c_str(), -1, nullptr)); if (icon != "") { - _icon = Gtk::manage(new Gtk::Image()); - _icon->set_from_icon_name(icon, Gtk::ICON_SIZE_LARGE_TOOLBAR); + _icon = Gtk::manage(sp_get_icon_image(icon, Gtk::ICON_SIZE_LARGE_TOOLBAR)); pack_start(*_icon, Gtk::PACK_SHRINK); } pack_start(*Gtk::manage(_label), Gtk::PACK_EXPAND_WIDGET, 6); diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index b86222404..c8aefa656 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -17,10 +17,11 @@ #include <cstring> #include <string> +#include "helper/icon-loader.h" #include "ui/dialog/layer-properties.h" -#include <glibmm/i18n.h> #include <boost/range/adaptor/filtered.hpp> #include <boost/range/adaptor/reversed.hpp> +#include <glibmm/i18n.h> #include "desktop.h" @@ -46,14 +47,12 @@ public: { set_name("AlternateIcons"); if (!a.empty()) { - _a = Gtk::manage(new Gtk::Image()); - _a->set_from_icon_name(a, size); + _a = Gtk::manage(sp_get_icon_image(a, size)); _a->set_no_show_all(true); add(*_a); } if (!b.empty()) { - _b = Gtk::manage(new Gtk::Image()); - _b->set_from_icon_name(b, size); + _b = Gtk::manage(sp_get_icon_image(b, size)); _b->set_no_show_all(true); add(*_b); } diff --git a/src/ui/widget/layertypeicon.cpp b/src/ui/widget/layertypeicon.cpp index 278bd317b..356531620 100644 --- a/src/ui/widget/layertypeicon.cpp +++ b/src/ui/widget/layertypeicon.cpp @@ -13,10 +13,9 @@ #include "ui/widget/layertypeicon.h" -#include <gtkmm/icontheme.h> - -#include "widgets/toolbox.h" +#include "helper/icon-loader.h" #include "ui/icon-names.h" +#include "widgets/toolbox.h" namespace Inkscape { namespace UI { @@ -36,14 +35,10 @@ LayerTypeIcon::LayerTypeIcon() : { property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - gint width, height; - gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); - int phys = width; - - Glib::RefPtr<Gtk::IconTheme> icon_theme = Gtk::IconTheme::get_default(); - _property_pixbuf_layer = icon_theme->load_icon(_pixLayerName, phys, (Gtk::IconLookupFlags)0); - _property_pixbuf_group = icon_theme->load_icon(_pixGroupName, phys, (Gtk::IconLookupFlags)0); - _property_pixbuf_path = icon_theme->load_icon(_pixPathName, phys, (Gtk::IconLookupFlags)0); + + _property_pixbuf_layer = sp_get_icon_pixbuf(_pixLayerName, GTK_ICON_SIZE_MENU); + _property_pixbuf_group = sp_get_icon_pixbuf(_pixGroupName, GTK_ICON_SIZE_MENU); + _property_pixbuf_path = sp_get_icon_pixbuf(_pixPathName, GTK_ICON_SIZE_MENU); property_pixbuf() = _property_pixbuf_path.get_value(); } diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp index fee392632..09656a800 100644 --- a/src/ui/widget/preferences-widget.cpp +++ b/src/ui/widget/preferences-widget.cpp @@ -34,6 +34,7 @@ #include "io/sys.h" +#include "helper/icon-loader.h" #include "ui/dialog/filedialog.h" #include "ui/widget/preferences-widget.h" @@ -633,6 +634,58 @@ void PrefCombo::init(Glib::ustring const &prefs_path, this->set_active(row); } +void PrefCombo::init(Glib::ustring const &prefs_path, + std::vector<Glib::ustring> labels, std::vector<int> values, int default_value) +{ + size_t labels_size = labels.size(); + size_t values_size = values.size(); + if (values_size != labels_size) { + std::cout << "PrefCombo::" << "Diferent number of values/labels in " << prefs_path << std::endl; + return; + } + _prefs_path = prefs_path; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + int row = 0; + int value = prefs->getInt(_prefs_path, default_value); + + for (int i = 0 ; i < labels_size; ++i) + { + this->append(labels[i]); + _values.push_back(values[i]); + if (value == values[i]) + row = i; + } + this->set_active(row); +} + +void PrefCombo::init(Glib::ustring const &prefs_path, + std::vector<Glib::ustring> labels, std::vector<Glib::ustring> values, Glib::ustring default_value) +{ + size_t labels_size = labels.size(); + size_t values_size = values.size(); + if (values_size != labels_size) { + std::cout << "PrefCombo::" << "Diferent number of values/labels in " << prefs_path << std::endl; + return; + } + _prefs_path = prefs_path; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + int row = 0; + Glib::ustring value = prefs->getString(_prefs_path); + if(value.empty()) + { + value = default_value; + } + + for (int i = 0 ; i < labels_size; ++i) + { + this->append(labels[i]); + _ustr_values.push_back(values[i]); + if (value == values[i]) + row = i; + } + this->set_active(row); +} + void PrefCombo::on_changed() { if (this->get_visible()) //only take action if user changed value @@ -705,9 +758,7 @@ void PrefEntryFileButtonHBox::init(Glib::ustring const &prefs_path, relatedButton = new Gtk::Button(); Gtk::HBox* pixlabel = new Gtk::HBox(false, 3); - Gtk::Image *im = new Gtk::Image(); - im->set_from_icon_name("applications-graphics", - Gtk::ICON_SIZE_BUTTON); + Gtk::Image *im = sp_get_icon_image("applications-graphics", Gtk::ICON_SIZE_BUTTON); pixlabel->pack_start(*im); Gtk::Label *l = new Gtk::Label(); l->set_markup_with_mnemonic(_("_Browse...")); diff --git a/src/ui/widget/preferences-widget.h b/src/ui/widget/preferences-widget.h index 8e1602ff9..f75079c77 100644 --- a/src/ui/widget/preferences-widget.h +++ b/src/ui/widget/preferences-widget.h @@ -181,6 +181,16 @@ public: */ void init(Glib::ustring const &prefs_path, Glib::ustring labels[], Glib::ustring values[], int num_items, Glib::ustring default_value); + /** + * Initialize a combo box. + * with vectors. + */ + void init(Glib::ustring const &prefs_path, + std::vector<Glib::ustring> labels, std::vector<int> values, int default_value); + + void init(Glib::ustring const &prefs_path, + std::vector<Glib::ustring> labels, std::vector<Glib::ustring> values, Glib::ustring default_value); + protected: Glib::ustring _prefs_path; std::vector<int> _values; diff --git a/src/ui/widget/random.cpp b/src/ui/widget/random.cpp index 237144c7c..3bda641d7 100644 --- a/src/ui/widget/random.cpp +++ b/src/ui/widget/random.cpp @@ -14,8 +14,8 @@ #endif +#include "helper/icon-loader.h" #include "random.h" - #include <glibmm/i18n.h> #include <gtkmm/button.h> @@ -70,8 +70,7 @@ void Random::setStartSeed(long newseed) void Random::addReseedButton() { - Gtk::Image* pIcon = Gtk::manage(new Gtk::Image()); - pIcon->set_from_icon_name( "randomize", Gtk::ICON_SIZE_BUTTON); + Gtk::Image *pIcon = Gtk::manage(sp_get_icon_image("randomize", Gtk::ICON_SIZE_BUTTON)); Gtk::Button * pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); |
