diff options
| author | Alexander Valavanis <valavanisalex@gmail.com> | 2019-02-10 14:20:08 +0000 |
|---|---|---|
| committer | Alexander Valavanis <valavanisalex@gmail.com> | 2019-02-10 14:20:08 +0000 |
| commit | bef3ac7c63137da8228946e803f65cb850455459 (patch) | |
| tree | 3c0ff7992d2526c6a91d6b358003dd20d5859fad /src | |
| parent | Toolbox: Move deprecated VerbAction to separate file (diff) | |
| download | inkscape-bef3ac7c63137da8228946e803f65cb850455459.tar.gz inkscape-bef3ac7c63137da8228946e803f65cb850455459.zip | |
SprayToolbar: GtkAction migration
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/toolbar/spray-toolbar.cpp | 694 | ||||
| -rw-r--r-- | src/ui/toolbar/spray-toolbar.h | 74 | ||||
| -rw-r--r-- | src/ui/tools/spray-tool.cpp | 10 | ||||
| -rw-r--r-- | src/widgets/toolbox.cpp | 2 |
4 files changed, 325 insertions, 455 deletions
diff --git a/src/ui/toolbar/spray-toolbar.cpp b/src/ui/toolbar/spray-toolbar.cpp index 1a69af8b8..a2c9f2b55 100644 --- a/src/ui/toolbar/spray-toolbar.cpp +++ b/src/ui/toolbar/spray-toolbar.cpp @@ -28,33 +28,28 @@ #include "spray-toolbar.h" +#include <glibmm/i18n.h> + +#include <gtkmm/radiotoolbutton.h> +#include <gtkmm/separatortoolitem.h> #include "desktop.h" #include "inkscape.h" -#include "widgets/ege-adjustment-action.h" -#include "widgets/ink-toggle-action.h" -#include "widgets/toolbox.h" + +#include "ui/icon-names.h" +#include "ui/simple-pref-pusher.h" + #include "ui/dialog/clonetiler.h" #include "ui/dialog/dialog-manager.h" #include "ui/dialog/panel-dialog.h" -#include "ui/pref-pusher.h" -#include "ui/widget/ink-select-one-action.h" -#include "ui/icon-names.h" - -#include <glibmm/i18n.h> -using Inkscape::UI::ToolboxFactory; -using Inkscape::UI::PrefPusher; +#include "ui/widget/spin-button-tool-item.h" // Disabled in 0.91 because of Bug #1274831 (crash, spraying an object // with the mode: spray object in single path) // Please enable again when working on 1.0 #define ENABLE_SPRAY_MODE_SINGLE_PATH -//######################## -//## Spray ## -//######################## - Inkscape::UI::Dialog::CloneTiler *get_clone_tiler_panel(SPDesktop *desktop) { if (Inkscape::UI::Dialog::PanelDialogBase *panel_dialog = @@ -69,348 +64,306 @@ Inkscape::UI::Dialog::CloneTiler *get_clone_tiler_panel(SPDesktop *desktop) return nullptr; } - namespace Inkscape { namespace UI { namespace Toolbar { SprayToolbar::SprayToolbar(SPDesktop *desktop) : Toolbar(desktop) -{} - -GtkWidget * -SprayToolbar::prep(SPDesktop *desktop, GtkActionGroup* mainActions) { - auto holder = new SprayToolbar(desktop); - - GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - { - /* Width */ - gchar const* labels[] = {_("(narrow spray)"), nullptr, nullptr, nullptr, _("(default)"), nullptr, nullptr, nullptr, nullptr, _("(broad spray)")}; - gdouble values[] = {1, 3, 5, 10, 15, 20, 30, 50, 75, 100}; - EgeAdjustmentAction *eact = create_adjustment_action( "SprayWidthAction", - _("Width"), _("Width:"), _("The width of the spray area (relative to the visible canvas area)"), - "/tools/spray/width", 15, - true, "altx-spray", - 1, 100, 1.0, 10.0, - labels, values, G_N_ELEMENTS(labels), - nullptr /*unit tracker*/, 1, 0 ); - ege_adjustment_action_set_focuswidget(eact, GTK_WIDGET(desktop->canvas)); - holder->_width_adj = Glib::wrap(ege_adjustment_action_get_adjustment(eact)); - holder->_width_adj->signal_value_changed().connect(sigc::mem_fun(*holder, &SprayToolbar::width_value_changed)); - ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); - gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); - gtk_action_set_sensitive( GTK_ACTION(eact), true ); - } - - /* Use Pressure Width button */ - { - InkToggleAction* act = ink_toggle_action_new( "SprayPressureWidthAction", - _("Pressure"), - _("Use the pressure of the input device to alter the width of spray area"), - INKSCAPE_ICON("draw-use-pressure"), - GTK_ICON_SIZE_MENU ); - gtk_action_group_add_action( mainActions, GTK_ACTION(act) ); - holder->_usepressurewidth_pusher.reset(new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/spray/usepressurewidth")); - } - - { - /* Mean */ - gchar const* labels[] = {_("(default)"), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, _("(maximum mean)")}; - gdouble values[] = {0, 5, 10, 20, 30, 50, 70, 100}; - EgeAdjustmentAction *eact = create_adjustment_action( "SprayMeanAction", - _("Focus"), _("Focus:"), _("0 to spray a spot; increase to enlarge the ring radius"), - "/tools/spray/mean", 0, - true, "spray-mean", - 0, 100, 1.0, 10.0, - labels, values, G_N_ELEMENTS(labels), - nullptr /*unit tracker*/, 1, 0 ); - ege_adjustment_action_set_focuswidget(eact, GTK_WIDGET(desktop->canvas)); - holder->_mean_adj = Glib::wrap(ege_adjustment_action_get_adjustment(eact)); - holder->_mean_adj->signal_value_changed().connect(sigc::mem_fun(*holder, &SprayToolbar::mean_value_changed)); - ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); - gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); - gtk_action_set_sensitive( GTK_ACTION(eact), true ); - } - - { - /* Standard_deviation */ - gchar const* labels[] = {_("(minimum scatter)"), nullptr, nullptr, nullptr, nullptr, nullptr, _("(default)"), _("(maximum scatter)")}; - gdouble values[] = {1, 5, 10, 20, 30, 50, 70, 100}; - EgeAdjustmentAction *eact = create_adjustment_action( "SprayStandard_deviationAction", - C_("Spray tool", "Scatter"), C_("Spray tool", "Scatter:"), _("Increase to scatter sprayed objects"), - "/tools/spray/standard_deviation", 70, - true, "spray-standard_deviation", - 1, 100, 1.0, 10.0, - labels, values, G_N_ELEMENTS(labels), - nullptr /*unit tracker*/, 1, 0 ); - ege_adjustment_action_set_focuswidget(eact, GTK_WIDGET(desktop->canvas)); - holder->_sd_adj = Glib::wrap(ege_adjustment_action_get_adjustment(eact)); - holder->_sd_adj->signal_value_changed().connect(sigc::mem_fun(*holder, &SprayToolbar::standard_deviation_value_changed)); - ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); - gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); - gtk_action_set_sensitive( GTK_ACTION(eact), true ); - } /* Mode */ { - InkSelectOneActionColumns columns; + add_label(_("Mode:")); - Glib::RefPtr<Gtk::ListStore> store = Gtk::ListStore::create(columns); + Gtk::RadioToolButton::Group mode_group; - Gtk::TreeModel::Row row; + auto copy_mode_btn = Gtk::manage(new Gtk::RadioToolButton(mode_group, _("Spray with copies"))); + copy_mode_btn->set_tooltip_text(_("Spray copies of the initial selection")); + copy_mode_btn->set_icon_name(INKSCAPE_ICON("spray-mode-copy")); + _mode_buttons.push_back(copy_mode_btn); - row = *(store->append()); - row[columns.col_label ] = _("Spray with copies"); - row[columns.col_tooltip ] = _("Spray copies of the initial selection"); - row[columns.col_icon ] = INKSCAPE_ICON("spray-mode-copy"); - row[columns.col_sensitive] = true; - - row = *(store->append()); - row[columns.col_label ] = _("Spray with clones"); - row[columns.col_tooltip ] = _("Spray clones of the initial selection"); - row[columns.col_icon ] = INKSCAPE_ICON("spray-mode-clone"); - row[columns.col_sensitive] = true; + auto clone_mode_btn = Gtk::manage(new Gtk::RadioToolButton(mode_group, _("Spray with clones"))); + clone_mode_btn->set_tooltip_text(_("Spray clones of the initial selection")); + clone_mode_btn->set_icon_name(INKSCAPE_ICON("spray-mode-clone")); + _mode_buttons.push_back(clone_mode_btn); #ifdef ENABLE_SPRAY_MODE_SINGLE_PATH - row = *(store->append()); - row[columns.col_label ] = _("Spray single path"); - row[columns.col_tooltip ] = _("Spray objects in a single path"); - row[columns.col_icon ] = INKSCAPE_ICON("spray-mode-union"); - row[columns.col_sensitive] = true; + auto union_mode_btn = Gtk::manage(new Gtk::RadioToolButton(mode_group, _("Spray single path"))); + union_mode_btn->set_tooltip_text(_("Spray objects in a single path")); + union_mode_btn->set_icon_name(INKSCAPE_ICON("spray-mode-union")); + _mode_buttons.push_back(union_mode_btn); #endif - row = *(store->append()); - row[columns.col_label ] = _("Delete sprayed items"); - row[columns.col_tooltip ] = _("Delete sprayed items from selection"); - row[columns.col_icon ] = INKSCAPE_ICON("draw-eraser"); - row[columns.col_sensitive] = true; - - holder->_spray_tool_mode = - InkSelectOneAction::create( "SprayModeAction", // Name - _("Mode"), // Label - "", // Tooltip - "Not Used", // Icon - store ); // Tree store - - holder->_spray_tool_mode->use_radio( true ); - holder->_spray_tool_mode->use_group_label( true ); - gint mode = prefs->getInt("/tools/spray/mode", 1); - holder->_spray_tool_mode->set_active( mode ); - gtk_action_group_add_action( mainActions, GTK_ACTION( holder->_spray_tool_mode->gobj() )); - holder->_spray_tool_mode->signal_changed().connect(sigc::mem_fun(*holder, &SprayToolbar::mode_changed)); + auto eraser_mode_btn = Gtk::manage(new Gtk::RadioToolButton(mode_group, _("Delete sprayed items"))); + eraser_mode_btn->set_tooltip_text(_("Delete sprayed items from selection")); + eraser_mode_btn->set_icon_name(INKSCAPE_ICON("draw-eraser")); + _mode_buttons.push_back(eraser_mode_btn); + + int btn_idx = 0; + for (auto btn : _mode_buttons) { + btn->set_sensitive(true); + add(*btn); + btn->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::mode_changed), btn_idx++)); + } + } + + add(* Gtk::manage(new Gtk::SeparatorToolItem())); + + { + /* Width */ + std::vector<Glib::ustring> labels = {_("(narrow spray)"), "", "", "", _("(default)"), "", "", "", "", _("(broad spray)")}; + std::vector<double> values = { 1, 3, 5, 10, 15, 20, 30, 50, 75, 100}; + auto width_val = prefs->getDouble("/tools/spray/width", 15); + _width_adj = Gtk::Adjustment::create(width_val, 1, 100, 1.0, 10.0); + auto width_item = Gtk::manage(new UI::Widget::SpinButtonToolItem("spray-width", _("Width:"), _width_adj, 1, 0)); + width_item->set_tooltip_text(_("The width of the spray area (relative to the visible canvas area)")); + width_item->set_custom_numeric_menu_data(values, labels); + width_item->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _width_adj->signal_value_changed().connect(sigc::mem_fun(*this, &SprayToolbar::width_value_changed)); + // ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); + add(*width_item); + width_item->set_sensitive(true); + } + + /* Use Pressure Width button */ + { + auto pressure_item = add_toggle_button(_("Pressure"), + _("Use the pressure of the input device to alter the width of spray area")); + pressure_item->set_icon_name(INKSCAPE_ICON("draw-use-pressure")); + _usepressurewidth_pusher.reset(new UI::SimplePrefPusher(pressure_item, "/tools/spray/usepressurewidth")); + pressure_item->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + pressure_item, + "/tools/spray/usepressurewidth")); } { /* Population */ - gchar const* labels[] = {_("(low population)"), nullptr, nullptr, nullptr, _("(default)"), nullptr, _("(high population)")}; - gdouble values[] = {5, 20, 35, 50, 70, 85, 100}; - holder->_spray_population = create_adjustment_action( "SprayPopulationAction", - _("Amount"), _("Amount:"), - _("Adjusts the number of items sprayed per click"), - "/tools/spray/population", 70, - true, "spray-population", - 1, 100, 1.0, 10.0, - labels, values, G_N_ELEMENTS(labels), - nullptr /*unit tracker*/, 1, 0 ); - ege_adjustment_action_set_focuswidget(holder->_spray_population, GTK_WIDGET(desktop->canvas)); - holder->_population_adj = Glib::wrap(ege_adjustment_action_get_adjustment(holder->_spray_population)); - holder->_population_adj->signal_value_changed().connect(sigc::mem_fun(*holder, &SprayToolbar::population_value_changed)); - ege_adjustment_action_set_appearance( holder->_spray_population, TOOLBAR_SLIDER_HINT ); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_spray_population) ); - gtk_action_set_sensitive( GTK_ACTION(holder->_spray_population), true ); + std::vector<Glib::ustring> labels = {_("(low population)"), "", "", "", _("(default)"), "", _("(high population)")}; + std::vector<double> values = { 5, 20, 35, 50, 70, 85, 100}; + auto population_val = prefs->getDouble("/tools/spray/population", 70); + _population_adj = Gtk::Adjustment::create(population_val, 1, 100, 1.0, 10.0); + _spray_population = Gtk::manage(new UI::Widget::SpinButtonToolItem("spray-population", _("Amount:"), _population_adj, 1, 0)); + _spray_population->set_tooltip_text(_("Adjusts the number of items sprayed per click")); + _spray_population->set_custom_numeric_menu_data(values, labels); + _spray_population->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _population_adj->signal_value_changed().connect(sigc::mem_fun(*this, &SprayToolbar::population_value_changed)); + //ege_adjustment_action_set_appearance( holder->_spray_population, TOOLBAR_SLIDER_HINT ); + add(*_spray_population); + _spray_population->set_sensitive(true); } /* Use Pressure Population button */ { - InkToggleAction* act = ink_toggle_action_new( "SprayPressurePopulationAction", - _("Pressure"), - _("Use the pressure of the input device to alter the amount of sprayed objects"), - INKSCAPE_ICON("draw-use-pressure"), - GTK_ICON_SIZE_MENU ); - gtk_action_group_add_action( mainActions, GTK_ACTION(act) ); - holder->_usepressurepopulation_pusher.reset(new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/spray/usepressurepopulation")); + auto pressure_population_item = add_toggle_button(_("Pressure"), + _("Use the pressure of the input device to alter the amount of sprayed objects")); + pressure_population_item->set_icon_name(INKSCAPE_ICON("draw-use-pressure")); + _usepressurepopulation_pusher.reset(new UI::SimplePrefPusher(pressure_population_item, "/tools/spray/usepressurepopulation")); + pressure_population_item->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + pressure_population_item, + "/tools/spray/usepressurepopulation")); } + add(* Gtk::manage(new Gtk::SeparatorToolItem())); + { /* Rotation */ - gchar const* labels[] = {_("(default)"), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, _("(high rotation variation)")}; - gdouble values[] = {0, 10, 25, 35, 50, 60, 80, 100}; - holder->_spray_rotation = create_adjustment_action( "SprayRotationAction", - _("Rotation"), _("Rotation:"), - // xgettext:no-c-format - _("Variation of the rotation of the sprayed objects; 0% for the same rotation than the original object"), - "/tools/spray/rotation_variation", 0, - true, "spray-rotation", - 0, 100, 1.0, 10.0, - labels, values, G_N_ELEMENTS(labels), - nullptr /*unit tracker*/, 1, 0 ); - ege_adjustment_action_set_focuswidget(holder->_spray_rotation, GTK_WIDGET(desktop->canvas)); - holder->_rotation_adj = Glib::wrap(ege_adjustment_action_get_adjustment(holder->_spray_rotation)); - holder->_rotation_adj->signal_value_changed().connect(sigc::mem_fun(*holder, &SprayToolbar::rotation_value_changed)); - ege_adjustment_action_set_appearance(holder->_spray_rotation, TOOLBAR_SLIDER_HINT ); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_spray_rotation) ); - gtk_action_set_sensitive( GTK_ACTION(holder->_spray_rotation), true ); + std::vector<Glib::ustring> labels = {_("(default)"), "", "", "", "", "", "", _("(high rotation variation)")}; + std::vector<double> values = { 0, 10, 25, 35, 50, 60, 80, 100}; + auto rotation_val = prefs->getDouble("/tools/spray/rotation_variation", 0); + _rotation_adj = Gtk::Adjustment::create(rotation_val, 0, 100, 1.0, 10.0); + _spray_rotation = Gtk::manage(new UI::Widget::SpinButtonToolItem("spray-rotation", _("Rotation:"), _rotation_adj, 1, 0)); + // xgettext:no-c-format + _spray_rotation->set_tooltip_text(_("Variation of the rotation of the sprayed objects; 0% for the same rotation than the original object")); + _spray_rotation->set_custom_numeric_menu_data(values, labels); + _spray_rotation->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _rotation_adj->signal_value_changed().connect(sigc::mem_fun(*this, &SprayToolbar::rotation_value_changed)); + // ege_adjustment_action_set_appearance(holder->_spray_rotation, TOOLBAR_SLIDER_HINT ); + add(*_spray_rotation); + _spray_rotation->set_sensitive(); } { /* Scale */ - gchar const* labels[] = {_("(default)"), nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, _("(high scale variation)")}; - gdouble values[] = {0, 10, 25, 35, 50, 60, 80, 100}; - holder->_spray_scale = create_adjustment_action( "SprayScaleAction", - C_("Spray tool", "Scale"), C_("Spray tool", "Scale:"), - // xgettext:no-c-format - _("Variation in the scale of the sprayed objects; 0% for the same scale than the original object"), - "/tools/spray/scale_variation", 0, - true, "spray-scale", - 0, 100, 1.0, 10.0, - labels, values, G_N_ELEMENTS(labels), - nullptr /*unit tracker*/, 1, 0 ); - ege_adjustment_action_set_focuswidget(holder->_spray_scale, GTK_WIDGET(desktop->canvas)); - holder->_scale_adj = Glib::wrap(ege_adjustment_action_get_adjustment(holder->_spray_scale)); - holder->_scale_adj->signal_value_changed().connect(sigc::mem_fun(*holder, &SprayToolbar::scale_value_changed)); - ege_adjustment_action_set_appearance( holder->_spray_scale, TOOLBAR_SLIDER_HINT ); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_spray_scale) ); - gtk_action_set_sensitive( GTK_ACTION(holder->_spray_scale), true ); + std::vector<Glib::ustring> labels = {_("(default)"), "", "", "", "", "", "", _("(high scale variation)")}; + std::vector<double> values = { 0, 10, 25, 35, 50, 60, 80, 100}; + auto scale_val = prefs->getDouble("/tools/spray/scale_variation", 0); + _scale_adj = Gtk::Adjustment::create(scale_val, 0, 100, 1.0, 10.0); + _spray_scale = Gtk::manage(new UI::Widget::SpinButtonToolItem("spray-scale", C_("Spray tool", "Scale:"), _scale_adj, 1, 0)); + // xgettext:no-c-format + _spray_scale->set_tooltip_text(_("Variation in the scale of the sprayed objects; 0% for the same scale than the original object")); + _spray_scale->set_custom_numeric_menu_data(values, labels); + _spray_scale->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _scale_adj->signal_value_changed().connect(sigc::mem_fun(*this, &SprayToolbar::scale_value_changed)); + // ege_adjustment_action_set_appearance( holder->_spray_scale, TOOLBAR_SLIDER_HINT ); + add(*_spray_scale); + _spray_scale->set_sensitive(true); } /* Use Pressure Scale button */ { - holder->_usepressurescale = ink_toggle_action_new( "SprayPressureScaleAction", - _("Pressure"), - _("Use the pressure of the input device to alter the scale of new items"), - INKSCAPE_ICON("draw-use-pressure"), - GTK_ICON_SIZE_MENU); - gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(holder->_usepressurescale), prefs->getBool("/tools/spray/usepressurescale", false)); - g_signal_connect(G_OBJECT(holder->_usepressurescale), "toggled", G_CALLBACK(&SprayToolbar::toggle_pressure_scale), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_usepressurescale) ); + _usepressurescale = add_toggle_button(_("Pressure"), + _("Use the pressure of the input device to alter the scale of new items")); + _usepressurescale->set_icon_name(INKSCAPE_ICON("draw-use-pressure")); + _usepressurescale->set_active(prefs->getBool("/tools/spray/usepressurescale", false)); + _usepressurescale->signal_toggled().connect(sigc::mem_fun(*this, &SprayToolbar::toggle_pressure_scale)); } - /* Picker */ - { - holder->_picker = ink_toggle_action_new( "SprayPickColorAction", - _("Pick color from the drawing. You can use clonetiler trace dialog for advanced effects. In clone mode original fill or stroke colors must be unset."), - _("Pick color from the drawing. You can use clonetiler trace dialog for advanced effects. In clone mode original fill or stroke colors must be unset."), - INKSCAPE_ICON("color-picker"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_picker), prefs->getBool("/tools/spray/picker", false) ); - g_signal_connect(G_OBJECT(holder->_picker), "toggled", G_CALLBACK(&SprayToolbar::toggle_picker), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_picker) ); - } - - /* Pick from center */ + add(* Gtk::manage(new Gtk::SeparatorToolItem())); + { - holder->_pick_center = ink_toggle_action_new( "SprayPickCenterAction", - _("Pick from center instead average area."), - _("Pick from center instead average area."), - INKSCAPE_ICON("snap-bounding-box-center"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_pick_center), prefs->getBool("/tools/spray/pick_center", true) ); - g_signal_connect(G_OBJECT(holder->_pick_center), "toggled", G_CALLBACK(&SprayToolbar::toggle_pick_center), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_pick_center) ); + /* Standard_deviation */ + std::vector<Glib::ustring> labels = {_("(minimum scatter)"), "", "", "", "", "", _("(default)"), _("(maximum scatter)")}; + std::vector<double> values = { 1, 5, 10, 20, 30, 50, 70, 100}; + auto sd_val = prefs->getDouble("/tools/spray/standard_deviation", 70); + _sd_adj = Gtk::Adjustment::create(sd_val, 1, 100, 1.0, 10.0); + auto sd_item = Gtk::manage(new UI::Widget::SpinButtonToolItem("spray-standard-deviation", C_("Spray tool", "Scatter:"), _sd_adj, 1, 0)); + sd_item->set_tooltip_text(_("Increase to scatter sprayed objects")); + sd_item->set_custom_numeric_menu_data(values, labels); + sd_item->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _sd_adj->signal_value_changed().connect(sigc::mem_fun(*this, &SprayToolbar::standard_deviation_value_changed)); + // ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); + add(*sd_item); + sd_item->set_sensitive(true); } - /* Inverse Value Size */ { - holder->_pick_inverse_value = ink_toggle_action_new( "SprayPickInverseValueAction", - _("Inverted pick value, retaining color in advanced trace mode"), - _("Inverted pick value, retaining color in advanced trace mode"), - INKSCAPE_ICON("object-tweak-shrink"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_pick_inverse_value), prefs->getBool("/tools/spray/pick_inverse_value", false) ); - g_signal_connect(G_OBJECT(holder->_pick_inverse_value), "toggled", G_CALLBACK(&SprayToolbar::toggle_pick_inverse_value), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_pick_inverse_value) ); + /* Mean */ + std::vector<Glib::ustring> labels = {_("(default)"), "", "", "", "", "", "", _("(maximum mean)")}; + std::vector<double> values = { 0, 5, 10, 20, 30, 50, 70, 100}; + auto mean_val = prefs->getDouble("/tools/spray/mean", 0); + _mean_adj = Gtk::Adjustment::create(mean_val, 0, 100, 1.0, 10.0); + auto mean_item = Gtk::manage(new UI::Widget::SpinButtonToolItem("spray-mean", _("Focus:"), _mean_adj, 1, 0)); + mean_item->set_tooltip_text(_("0 to spray a spot; increase to enlarge the ring radius")); + mean_item->set_custom_numeric_menu_data(values, labels); + mean_item->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _mean_adj->signal_value_changed().connect(sigc::mem_fun(*this, &SprayToolbar::mean_value_changed)); + // ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); + add(*mean_item); + mean_item->set_sensitive(true); } - /* Pick Fill */ + add(* Gtk::manage(new Gtk::SeparatorToolItem())); + + /* Over No Transparent */ { - holder->_pick_fill = ink_toggle_action_new( "SprayPickFillAction", - _("Apply picked color to fill"), - _("Apply picked color to fill"), - INKSCAPE_ICON("paint-solid"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_pick_fill), prefs->getBool("/tools/spray/pick_fill", false) ); - g_signal_connect(G_OBJECT(holder->_pick_fill), "toggled", G_CALLBACK(&SprayToolbar::toggle_pick_fill), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_pick_fill) ); + _over_no_transparent = add_toggle_button(_("Apply over no transparent areas"), + _("Apply over no transparent areas")); + _over_no_transparent->set_icon_name(INKSCAPE_ICON("object-visible")); + _over_no_transparent->set_active(prefs->getBool("/tools/spray/over_no_transparent", true)); + _over_no_transparent->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + _over_no_transparent, + "/tools/spray/over_no_transparent")); } - /* Pick Stroke */ + /* Over Transparent */ { - holder->_pick_stroke = ink_toggle_action_new( "SprayPickStrokeAction", - _("Apply picked color to stroke"), - _("Apply picked color to stroke"), - INKSCAPE_ICON("no-marker"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_pick_stroke), prefs->getBool("/tools/spray/pick_stroke", false) ); - g_signal_connect(G_OBJECT(holder->_pick_stroke), "toggled", G_CALLBACK(&SprayToolbar::toggle_pick_stroke), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_pick_stroke) ); + _over_transparent = add_toggle_button(_("Apply over transparent areas"), + _("Apply over transparent areas")); + _over_transparent->set_icon_name(INKSCAPE_ICON("object-hidden")); + _over_transparent->set_active(prefs->getBool("/tools/spray/over_transparent", true)); + _over_transparent->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + _over_transparent, + "/tools/spray/over_transparent")); } /* Pick No Overlap */ { - holder->_pick_no_overlap = ink_toggle_action_new( "SprayPickNoOverlapAction", - _("No overlap between colors"), - _("No overlap between colors"), - INKSCAPE_ICON("symbol-bigger"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_pick_no_overlap), prefs->getBool("/tools/spray/pick_no_overlap", false) ); - g_signal_connect(G_OBJECT(holder->_pick_no_overlap), "toggled", G_CALLBACK(&SprayToolbar::toggle_pick_no_overlap), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_pick_no_overlap) ); + _pick_no_overlap = add_toggle_button(_("No overlap between colors"), + _("No overlap between colors")); + _pick_no_overlap->set_icon_name(INKSCAPE_ICON("symbol-bigger")); + _pick_no_overlap->set_active(prefs->getBool("/tools/spray/pick_no_overlap", false)); + _pick_no_overlap->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + _pick_no_overlap, + "/tools/spray/pick_no_overlap")); } - /* Over Transparent */ + /* Overlap */ { - holder->_over_transparent = ink_toggle_action_new( "SprayOverTransparentAction", - _("Apply over transparent areas"), - _("Apply over transparent areas"), - INKSCAPE_ICON("object-hidden"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_over_transparent), prefs->getBool("/tools/spray/over_transparent", true) ); - g_signal_connect(G_OBJECT(holder->_over_transparent), "toggled", G_CALLBACK(&SprayToolbar::toggle_over_transparent), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_over_transparent) ); + _no_overlap = add_toggle_button(_("Prevent overlapping objects"), + _("Prevent overlapping objects")); + _no_overlap->set_icon_name(INKSCAPE_ICON("distribute-randomize")); + _no_overlap->set_active(prefs->getBool("/tools/spray/no_overlap", false)); + _no_overlap->signal_toggled().connect(sigc::mem_fun(*this, &SprayToolbar::toggle_no_overlap)); } - /* Over No Transparent */ + /* Offset */ { - holder->_over_no_transparent = ink_toggle_action_new( "SprayOverNoTransparentAction", - _("Apply over no transparent areas"), - _("Apply over no transparent areas"), - INKSCAPE_ICON("object-visible"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_over_no_transparent), prefs->getBool("/tools/spray/over_no_transparent", true) ); - g_signal_connect(G_OBJECT(holder->_over_no_transparent), "toggled", G_CALLBACK(&SprayToolbar::toggle_over_no_transparent), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_over_no_transparent) ); + std::vector<Glib::ustring> labels = {_("(minimum offset)"), "", "", "", _("(default)"), "", "", _("(maximum offset)")}; + std::vector<double> values = { 0, 25, 50, 75, 100, 150, 200, 1000}; + auto offset_val = prefs->getDouble("/tools/spray/offset", 100); + _offset_adj = Gtk::Adjustment::create(offset_val, 0, 1000, 1, 4); + _offset = Gtk::manage(new UI::Widget::SpinButtonToolItem("spray-offset", _("Offset %:"), _offset_adj, 0, 0)); + _offset->set_tooltip_text(_("Increase to segregate objects more (value in percent)")); + _offset->set_custom_numeric_menu_data(values, labels); + _offset->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _offset_adj->signal_value_changed().connect(sigc::mem_fun(*this, &SprayToolbar::offset_value_changed)); + add(*_offset); } - /* Overlap */ + add(* Gtk::manage(new Gtk::SeparatorToolItem())); + + /* Picker */ { - holder->_no_overlap = ink_toggle_action_new( "SprayNoOverlapAction", - _("Prevent overlapping objects"), - _("Prevent overlapping objects"), - INKSCAPE_ICON("distribute-randomize"), - secondarySize ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(holder->_no_overlap), prefs->getBool("/tools/spray/no_overlap", false) ); - g_signal_connect(G_OBJECT(holder->_no_overlap), "toggled", G_CALLBACK(&SprayToolbar::toggle_no_overlap), holder); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_no_overlap) ); + _picker = add_toggle_button(_("Pick color from the drawing. You can use clonetiler trace dialog for advanced effects. In clone mode original fill or stroke colors must be unset."), + _("Pick color from the drawing. You can use clonetiler trace dialog for advanced effects. In clone mode original fill or stroke colors must be unset.")); + _picker->set_icon_name(INKSCAPE_ICON("color-picker")); + _picker->set_active(prefs->getBool("/tools/spray/picker", false)); + _picker->signal_toggled().connect(sigc::mem_fun(*this, &SprayToolbar::toggle_picker)); } - /* Offset */ + /* Pick Fill */ + { + _pick_fill = add_toggle_button(_("Apply picked color to fill"), + _("Apply picked color to fill")); + _pick_fill->set_icon_name(INKSCAPE_ICON("paint-solid")); + _pick_fill->set_active(prefs->getBool("/tools/spray/pick_fill", false)); + _pick_fill->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + _pick_fill, + "/tools/spray/pick_fill")); + } + + /* Pick Stroke */ + { + _pick_stroke = add_toggle_button(_("Apply picked color to stroke"), + _("Apply picked color to stroke")); + _pick_stroke->set_icon_name(INKSCAPE_ICON("no-marker")); + _pick_stroke->set_active(prefs->getBool("/tools/spray/pick_stroke", false)); + _pick_stroke->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + _pick_stroke, + "/tools/spray/pick_stroke")); + } + + /* Inverse Value Size */ { - gchar const* labels[] = {_("(minimum offset)"), nullptr, nullptr, nullptr, _("(default)"), nullptr, nullptr, _("(maximum offset)")}; - gdouble values[] = {0, 25, 50, 75, 100, 150, 200, 1000}; - holder->_offset = create_adjustment_action( "SprayToolOffsetAction", - _("Offset %"), _("Offset %:"), - _("Increase to segregate objects more (value in percent)"), - "/tools/spray/offset", 100, - FALSE, nullptr, - 0, 1000, 1, 4, - labels, values, G_N_ELEMENTS(labels), - nullptr, 0 , 0); - ege_adjustment_action_set_focuswidget(holder->_offset, GTK_WIDGET(desktop->canvas)); - holder->_offset_adj = Glib::wrap(ege_adjustment_action_get_adjustment(holder->_offset)); - holder->_offset_adj->signal_value_changed().connect(sigc::mem_fun(*holder, &SprayToolbar::offset_value_changed)); - gtk_action_group_add_action( mainActions, GTK_ACTION(holder->_offset) ); + _pick_inverse_value = add_toggle_button(_("Inverted pick value, retaining color in advanced trace mode"), + _("Inverted pick value, retaining color in advanced trace mode")); + _pick_inverse_value->set_icon_name(INKSCAPE_ICON("object-tweak-shrink")); + _pick_inverse_value->set_active(prefs->getBool("/tools/spray/pick_inverse_value", false)); + _pick_inverse_value->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + _pick_inverse_value, + "/tools/spray/pick_inverse_value")); } - holder->init(); - return GTK_WIDGET(holder->gobj()); + /* Pick from center */ + { + _pick_center = add_toggle_button(_("Pick from center instead of average area."), + _("Pick from center instead of average area.")); + _pick_center->set_icon_name(INKSCAPE_ICON("snap-bounding-box-center")); + _pick_center->set_active(prefs->getBool("/tools/spray/pick_center", true)); + _pick_center->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &SprayToolbar::on_pref_toggled), + _pick_center, + "/tools/spray/pick_center")); + } + + gint mode = prefs->getInt("/tools/spray/mode", 1); + _mode_buttons[mode]->set_active(); + init(); + show_all(); +} + +GtkWidget * +SprayToolbar::create(SPDesktop *desktop) +{ + auto toolbar = new SprayToolbar(desktop); + return GTK_WIDGET(toolbar->gobj()); } void @@ -454,24 +407,24 @@ SprayToolbar::init(){ if(mode == 3 || mode == 2){ show = false; } - gtk_action_set_visible( GTK_ACTION(_no_overlap), show ); - gtk_action_set_visible( GTK_ACTION(_over_no_transparent), show ); - gtk_action_set_visible( GTK_ACTION(_over_transparent), show ); - gtk_action_set_visible( GTK_ACTION(_pick_no_overlap), show ); - gtk_action_set_visible( GTK_ACTION(_pick_stroke), show ); - gtk_action_set_visible( GTK_ACTION(_pick_fill), show ); - gtk_action_set_visible( GTK_ACTION(_pick_inverse_value), show ); - gtk_action_set_visible( GTK_ACTION(_pick_center), show ); - gtk_action_set_visible( GTK_ACTION(_picker), show ); - gtk_action_set_visible( GTK_ACTION(_offset), show ); - gtk_action_set_visible( GTK_ACTION(_pick_fill), show ); - gtk_action_set_visible( GTK_ACTION(_pick_stroke), show ); - gtk_action_set_visible( GTK_ACTION(_pick_inverse_value), show ); - gtk_action_set_visible( GTK_ACTION(_pick_center), show ); + _no_overlap->set_visible(show); + _over_no_transparent->set_visible(show); + _over_transparent->set_visible(show); + _pick_no_overlap->set_visible(show); + _pick_stroke->set_visible(show); + _pick_fill->set_visible(show); + _pick_inverse_value->set_visible(show); + _pick_center->set_visible(show); + _picker->set_visible(show); + _offset->set_visible(show); + _pick_fill->set_visible(show); + _pick_stroke->set_visible(show); + _pick_inverse_value->set_visible(show); + _pick_center->set_visible(show); if(mode == 2){ show = true; } - gtk_action_set_visible( GTK_ACTION(_spray_rotation), show ); + _spray_rotation->set_visible(show); update_widgets(); } @@ -496,42 +449,29 @@ SprayToolbar::update_widgets() { _offset_adj->set_value(100.0); - if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(_no_overlap)) && - gtk_action_get_visible(GTK_ACTION(_no_overlap))) - { - gtk_action_set_visible( GTK_ACTION(_offset), true ); - } else { - gtk_action_set_visible( GTK_ACTION(_offset), false ); - } - if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(_usepressurescale))) { + bool no_overlap_is_active = _no_overlap->get_active() && _no_overlap->get_visible(); + _offset->set_visible(no_overlap_is_active); + if (_usepressurescale->get_active()) { _scale_adj->set_value(0.0); - gtk_action_set_sensitive( GTK_ACTION(_spray_scale), false ); - } else { - gtk_action_set_sensitive( GTK_ACTION(_spray_scale), true ); - } - if(gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(_picker)) && - gtk_action_get_visible(GTK_ACTION(_picker))){ - gtk_action_set_visible( GTK_ACTION(_pick_fill), true ); - gtk_action_set_visible( GTK_ACTION(_pick_stroke), true ); - gtk_action_set_visible( GTK_ACTION(_pick_inverse_value), true ); - gtk_action_set_visible( GTK_ACTION(_pick_center), true ); + _spray_scale->set_sensitive(false); } else { - gtk_action_set_visible( GTK_ACTION(_pick_fill), false ); - gtk_action_set_visible( GTK_ACTION(_pick_stroke), false ); - gtk_action_set_visible( GTK_ACTION(_pick_inverse_value), false ); - gtk_action_set_visible( GTK_ACTION(_pick_center), false ); + _spray_scale->set_sensitive(true); } + + bool picker_is_active = _picker->get_active() && _picker->get_visible(); + _pick_fill->set_visible(picker_is_active); + _pick_stroke->set_visible(picker_is_active); + _pick_inverse_value->set_visible(picker_is_active); + _pick_center->set_visible(picker_is_active); } void -SprayToolbar::toggle_no_overlap(GtkToggleAction *toggleaction, - gpointer user_data) +SprayToolbar::toggle_no_overlap() { - auto toolbar = reinterpret_cast<SprayToolbar *>(user_data); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); + auto prefs = Inkscape::Preferences::get(); + bool active = _no_overlap->get_active(); prefs->setBool("/tools/spray/no_overlap", active); - toolbar->update_widgets(); + update_widgets(); } void @@ -551,44 +491,22 @@ SprayToolbar::offset_value_changed() } void -SprayToolbar::toggle_pressure_scale(GtkToggleAction *toggleaction, - gpointer user_data) +SprayToolbar::toggle_pressure_scale() { - auto toolbar = reinterpret_cast<SprayToolbar *>(user_data); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); + auto prefs = Inkscape::Preferences::get(); + bool active = _usepressurescale->get_active(); prefs->setBool("/tools/spray/usepressurescale", active); if(active){ prefs->setDouble("/tools/spray/scale_variation", 0); } - toolbar->update_widgets(); -} - -void -SprayToolbar::toggle_over_no_transparent(GtkToggleAction *toggleaction, - gpointer /* user_data */) -{ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); - prefs->setBool("/tools/spray/over_no_transparent", active); -} - -void -SprayToolbar::toggle_over_transparent(GtkToggleAction *toggleaction, - gpointer /* user_data */) -{ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); - prefs->setBool("/tools/spray/over_transparent", active); + update_widgets(); } void -SprayToolbar::toggle_picker(GtkToggleAction *toggleaction, - gpointer user_data) +SprayToolbar::toggle_picker() { - auto toolbar = reinterpret_cast<SprayToolbar *>(user_data); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); + auto prefs = Inkscape::Preferences::get(); + bool active = _picker->get_active(); prefs->setBool("/tools/spray/picker", active); if(active){ prefs->setBool("/dialogs/clonetiler/dotrace", false); @@ -598,52 +516,16 @@ SprayToolbar::toggle_picker(GtkToggleAction *toggleaction, ct->show_page_trace(); } } - toolbar->update_widgets(); -} - -void -SprayToolbar::toggle_pick_center(GtkToggleAction *toggleaction, - gpointer /* user_data */) -{ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); - prefs->setBool("/tools/spray/pick_center", active); -} - -void -SprayToolbar::toggle_pick_fill(GtkToggleAction *toggleaction, - gpointer /* user_data */) -{ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); - prefs->setBool("/tools/spray/pick_fill", active); -} - -void -SprayToolbar::toggle_pick_stroke(GtkToggleAction *toggleaction, - gpointer /* user_data */) -{ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); - prefs->setBool("/tools/spray/pick_stroke", active); -} - -void -SprayToolbar::toggle_pick_no_overlap(GtkToggleAction *toggleaction, - gpointer /* user_data */) -{ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); - prefs->setBool("/tools/spray/pick_no_overlap", active); + update_widgets(); } void -SprayToolbar::toggle_pick_inverse_value(GtkToggleAction *toggleaction, - gpointer /* user_data */) +SprayToolbar::on_pref_toggled(Gtk::ToggleToolButton *btn, + const Glib::ustring& path) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean active = gtk_toggle_action_get_active(toggleaction); - prefs->setBool("/tools/spray/pick_inverse_value", active); + auto prefs = Inkscape::Preferences::get(); + bool active = btn->get_active(); + prefs->setBool(path, active); } } diff --git a/src/ui/toolbar/spray-toolbar.h b/src/ui/toolbar/spray-toolbar.h index 7d6cad56d..8c8d9172b 100644 --- a/src/ui/toolbar/spray-toolbar.h +++ b/src/ui/toolbar/spray-toolbar.h @@ -32,16 +32,19 @@ #include <gtkmm/adjustment.h> -class InkSelectOneAction; class SPDesktop; -typedef struct _EgeAdjustmentAction EgeAdjustmentAction; -typedef struct _GtkActionGroup GtkActionGroup; -typedef struct _InkToggleAction InkToggleAction; +namespace Gtk { +class RadioToolButton; +} namespace Inkscape { namespace UI { -class PrefPusher; +class SimplePrefPusher; + +namespace Widget { +class SpinButtonToolItem; +} namespace Toolbar { class SprayToolbar : public Toolbar { @@ -54,24 +57,24 @@ private: Glib::RefPtr<Gtk::Adjustment> _offset_adj; Glib::RefPtr<Gtk::Adjustment> _scale_adj; - std::unique_ptr<PrefPusher> _usepressurewidth_pusher; - std::unique_ptr<PrefPusher> _usepressurepopulation_pusher; + std::unique_ptr<SimplePrefPusher> _usepressurewidth_pusher; + std::unique_ptr<SimplePrefPusher> _usepressurepopulation_pusher; - InkSelectOneAction *_spray_tool_mode; - EgeAdjustmentAction *_spray_population; - EgeAdjustmentAction *_spray_rotation; - EgeAdjustmentAction *_spray_scale; - InkToggleAction * _usepressurescale; - InkToggleAction *_picker; - InkToggleAction *_pick_center; - InkToggleAction *_pick_inverse_value; - InkToggleAction *_pick_fill; - InkToggleAction *_pick_stroke; - InkToggleAction *_pick_no_overlap; - InkToggleAction *_over_transparent; - InkToggleAction *_over_no_transparent; - InkToggleAction *_no_overlap; - EgeAdjustmentAction *_offset; + std::vector<Gtk::RadioToolButton *> _mode_buttons; + UI::Widget::SpinButtonToolItem *_spray_population; + UI::Widget::SpinButtonToolItem *_spray_rotation; + UI::Widget::SpinButtonToolItem *_spray_scale; + Gtk::ToggleToolButton *_usepressurescale; + Gtk::ToggleToolButton *_picker; + Gtk::ToggleToolButton *_pick_center; + Gtk::ToggleToolButton *_pick_inverse_value; + Gtk::ToggleToolButton *_pick_fill; + Gtk::ToggleToolButton *_pick_stroke; + Gtk::ToggleToolButton *_pick_no_overlap; + Gtk::ToggleToolButton *_over_transparent; + Gtk::ToggleToolButton *_over_no_transparent; + Gtk::ToggleToolButton *_no_overlap; + UI::Widget::SpinButtonToolItem *_offset; void width_value_changed(); void mean_value_changed(); @@ -83,32 +86,17 @@ private: void update_widgets(); void scale_value_changed(); void offset_value_changed(); - static void toggle_no_overlap (GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_pressure_scale (GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_over_no_transparent(GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_over_transparent (GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_picker (GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_pick_center (GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_pick_fill (GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_pick_stroke (GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_pick_no_overlap (GtkToggleAction *toggleaction, - gpointer user_data); - static void toggle_pick_inverse_value (GtkToggleAction *toggleaction, - gpointer user_data); + void on_pref_toggled(Gtk::ToggleToolButton *btn, + const Glib::ustring& path); + void toggle_no_overlap(); + void toggle_pressure_scale(); + void toggle_picker(); protected: SprayToolbar(SPDesktop *desktop); public: - static GtkWidget * prep(SPDesktop *desktop, GtkActionGroup* mainActions); + static GtkWidget * create(SPDesktop *desktop); }; } } diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index 907b04a9a..4ae36ed23 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -1422,7 +1422,7 @@ bool SprayTool::root_handler(GdkEvent* event) { this->width = 1.0; } // The same spinbutton is for alt+x - desktop->setToolboxAdjustmentValue("altx-spray", this->width * 100); + desktop->setToolboxAdjustmentValue("spray-width", this->width * 100); sp_spray_update_area(this); ret = TRUE; } @@ -1434,7 +1434,7 @@ bool SprayTool::root_handler(GdkEvent* event) { if (this->width < 0.01) { this->width = 0.01; } - desktop->setToolboxAdjustmentValue("altx-spray", this->width * 100); + desktop->setToolboxAdjustmentValue("spray-width", this->width * 100); sp_spray_update_area(this); ret = TRUE; } @@ -1442,21 +1442,21 @@ bool SprayTool::root_handler(GdkEvent* event) { case GDK_KEY_Home: case GDK_KEY_KP_Home: this->width = 0.01; - desktop->setToolboxAdjustmentValue("altx-spray", this->width * 100); + desktop->setToolboxAdjustmentValue("spray-width", this->width * 100); sp_spray_update_area(this); ret = TRUE; break; case GDK_KEY_End: case GDK_KEY_KP_End: this->width = 1.0; - desktop->setToolboxAdjustmentValue("altx-spray", this->width * 100); + desktop->setToolboxAdjustmentValue("spray-width", this->width * 100); sp_spray_update_area(this); ret = TRUE; break; case GDK_KEY_x: case GDK_KEY_X: if (MOD__ALT_ONLY(event)) { - desktop->setToolboxFocusTo("altx-spray"); + desktop->setToolboxFocusTo("spray-width"); ret = TRUE; } break; diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 472a2c11b..61aadf202 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -195,7 +195,7 @@ static struct { SP_VERB_INVALID, nullptr, nullptr}, { "/tools/tweak", "tweak_toolbox", Inkscape::UI::Toolbar::TweakToolbar::create, nullptr, "TweakToolbar", SP_VERB_CONTEXT_TWEAK_PREFS, "/tools/tweak", N_("Color/opacity used for color tweaking")}, - { "/tools/spray", "spray_toolbox", nullptr, Inkscape::UI::Toolbar::SprayToolbar::prep, "SprayToolbar", + { "/tools/spray", "spray_toolbox", Inkscape::UI::Toolbar::SprayToolbar::create, nullptr, "SprayToolbar", SP_VERB_INVALID, nullptr, nullptr}, { "/tools/zoom", "zoom_toolbox", Inkscape::UI::Toolbar::ZoomToolbar::create, nullptr, "ZoomToolbar", SP_VERB_INVALID, nullptr, nullptr}, |
