diff options
| author | Jabiertxof <jabier.arraiza@marker.es> | 2019-07-16 14:37:19 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-07-19 21:33:23 +0000 |
| commit | e2f4af7eb9d6a497308925930e89d2a403c3a5c9 (patch) | |
| tree | f1abd09c7996dc93dbb09d79b91e70e3a5f0847d /src/ui/toolbar | |
| parent | Fix maren pointed bugs (diff) | |
| download | inkscape-e2f4af7eb9d6a497308925930e89d2a403c3a5c9.tar.gz inkscape-e2f4af7eb9d6a497308925930e89d2a403c3a5c9.zip | |
Improvemets to power pencil
Diffstat (limited to 'src/ui/toolbar')
| -rw-r--r-- | src/ui/toolbar/pencil-toolbar.cpp | 195 | ||||
| -rw-r--r-- | src/ui/toolbar/pencil-toolbar.h | 11 |
2 files changed, 114 insertions, 92 deletions
diff --git a/src/ui/toolbar/pencil-toolbar.cpp b/src/ui/toolbar/pencil-toolbar.cpp index 54463336a..cce9fefc9 100644 --- a/src/ui/toolbar/pencil-toolbar.cpp +++ b/src/ui/toolbar/pencil-toolbar.cpp @@ -104,88 +104,76 @@ PencilToolbar::PencilToolbar(SPDesktop *desktop, add(* Gtk::manage(new Gtk::SeparatorToolItem())); - if (pencil_mode) { - /* Use pressure */ - { - _pressure_item = add_toggle_button(_("Use pressure input"), _("Use pressure input")); - _pressure_item->set_icon_name(INKSCAPE_ICON("draw-use-pressure")); - bool pressure = prefs->getBool(freehand_tool_name() + "/pressure", false); - _pressure_item->set_active(pressure); - _pressure_item->signal_toggled().connect(sigc::mem_fun(*this, &PencilToolbar::use_pencil_pressure)); - } - /* min pressure */ - { - auto minpressure_val = prefs->getDouble("/tools/freehand/pencil/minpressure", 10); - _minpressure_adj = Gtk::Adjustment::create(minpressure_val, 0, 100, 1, 0); - _minpressure = Gtk::manage(new UI::Widget::SpinButtonToolItem("pencil-minpressure", _("Min:"), _minpressure_adj, 0, 0)); - _minpressure->set_tooltip_text(_("Min percent of pressure")); - _minpressure->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); - _minpressure_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PencilToolbar::minpressure_value_changed)); - add(*_minpressure); - } - /* max pressure */ - { - auto maxpressure_val = prefs->getDouble("/tools/freehand/pencil/maxpressure", 40); - _maxpressure_adj = Gtk::Adjustment::create(maxpressure_val, 0, 100, 1, 0); - _maxpressure = Gtk::manage(new UI::Widget::SpinButtonToolItem("pencil-maxpressure", _("Max:"), _maxpressure_adj, 0, 0)); - _maxpressure->set_tooltip_text(_("Max percent of pressure")); - _maxpressure->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); - _maxpressure_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PencilToolbar::maxpressure_value_changed)); - add(*_maxpressure); - } - /* pressure steps */ - { - auto pressurestep_val = prefs->getDouble("/tools/freehand/pencil/pressurestep", 2.0); - _pressurestep_adj = Gtk::Adjustment::create(pressurestep_val, 0.0, 100.0, 1.0, 0.0); - _pressurestep = Gtk::manage( - new UI::Widget::SpinButtonToolItem("pencil-pressurestep", _("Knot gap:"), _pressurestep_adj, 1.0, 2)); - _pressurestep->set_tooltip_text(_("Pressure steps for new knot")); - _pressurestep->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); - _pressurestep_adj->signal_value_changed().connect( - sigc::mem_fun(*this, &PencilToolbar::pressurestep_value_changed)); - add(*_pressurestep); - } - + /* Use pressure */ + { + _pressure_item = add_toggle_button(_("Use pressure input"), _("Use pressure input")); + _pressure_item->set_icon_name(INKSCAPE_ICON("draw-use-pressure")); + bool pressure = prefs->getBool(freehand_tool_name() + "/pressure", false); + _pressure_item->set_active(pressure); + _pressure_item->signal_toggled().connect(sigc::mem_fun(*this, &PencilToolbar::use_pencil_pressure)); + } + /* min pressure */ + { + auto minpressure_val = prefs->getDouble("/tools/freehand/pencil/minpressure", 10); + _minpressure_adj = Gtk::Adjustment::create(minpressure_val, 0, 100, 1, 0); + _minpressure = Gtk::manage(new UI::Widget::SpinButtonToolItem("pencil-minpressure", _("Min:"), _minpressure_adj, 0, 0)); + _minpressure->set_tooltip_text(_("Min percent of pressure")); + _minpressure->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _minpressure_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PencilToolbar::minpressure_value_changed)); + add(*_minpressure); + } + /* max pressure */ + { + auto maxpressure_val = prefs->getDouble("/tools/freehand/pencil/maxpressure", 40); + _maxpressure_adj = Gtk::Adjustment::create(maxpressure_val, 0, 100, 1, 0); + _maxpressure = Gtk::manage(new UI::Widget::SpinButtonToolItem("pencil-maxpressure", _("Max:"), _maxpressure_adj, 0, 0)); + _maxpressure->set_tooltip_text(_("Max percent of pressure")); + _maxpressure->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _maxpressure_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PencilToolbar::maxpressure_value_changed)); + add(*_maxpressure); + } - add(* Gtk::manage(new Gtk::SeparatorToolItem())); + add(* Gtk::manage(new Gtk::SeparatorToolItem())); - /* Tolerance */ - { - std::vector<Glib::ustring> labels = {_("(many nodes, rough)"), _("(default)"), "", "", "", "", _("(few nodes, smooth)")}; - std::vector<double> values = { 1, 10, 20, 30, 50, 75, 100}; - auto tolerance_val = prefs->getDouble("/tools/freehand/pencil/tolerance", 3.0); - _tolerance_adj = Gtk::Adjustment::create(tolerance_val, 1, 100.0, 0.5, 1.0); - auto tolerance_item = Gtk::manage(new UI::Widget::SpinButtonToolItem("pencil-tolerance", _("Smoothing:"), _tolerance_adj, 1, 2)); - tolerance_item->set_tooltip_text(_("How much smoothing (simplifying) is applied to the line")); - tolerance_item->set_custom_numeric_menu_data(values, labels); - tolerance_item->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); - _tolerance_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PencilToolbar::tolerance_value_changed)); - // ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); - add(*tolerance_item); - } + /* Tolerance */ + { + std::vector<Glib::ustring> labels = {_("(many nodes, rough)"), _("(default)"), "", "", "", "", _("(few nodes, smooth)")}; + std::vector<double> values = { 1, 10, 20, 30, 50, 75, 100}; + auto tolerance_val = prefs->getDouble("/tools/freehand/pencil/tolerance", 3.0); + _tolerance_adj = Gtk::Adjustment::create(tolerance_val, 1, 100.0, 0.5, 1.0); + auto tolerance_item = Gtk::manage(new UI::Widget::SpinButtonToolItem("pencil-tolerance", _("Smoothing:"), _tolerance_adj, 1, 2)); + tolerance_item->set_tooltip_text(_("How much smoothing (simplifying) is applied to the line")); + tolerance_item->set_custom_numeric_menu_data(values, labels); + tolerance_item->set_focus_widget(Glib::wrap(GTK_WIDGET(desktop->canvas))); + _tolerance_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PencilToolbar::tolerance_value_changed)); + // ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); + add(*tolerance_item); + } - /* LPE simplify based tolerance */ - { - _simplify = add_toggle_button(_("LPE based interactive simplify"), - _("LPE based interactive simplify")); - _simplify->set_icon_name(INKSCAPE_ICON("interactive_simplify")); - _simplify->set_active(prefs->getInt("/tools/freehand/pencil/simplify", 0)); - _simplify->signal_toggled().connect(sigc::mem_fun(*this, &PencilToolbar::simplify_lpe)); - } + /* powerstoke */ + add_powerstroke_cap(pencil_mode); - /* LPE simplify flatten */ - { - _flatten_simplify = Gtk::manage(new Gtk::ToolButton(_("LPE simplify flatten"))); - _flatten_simplify->set_tooltip_text(_("LPE simplify flatten")); - _flatten_simplify->set_icon_name(INKSCAPE_ICON("flatten")); - _flatten_simplify->signal_clicked().connect(sigc::mem_fun(*this, &PencilToolbar::simplify_flatten)); - add(*_flatten_simplify); - } + /* LPE simplify based tolerance */ + { + _simplify = add_toggle_button(_("LPE based interactive simplify"), + _("LPE based interactive simplify")); + _simplify->set_icon_name(INKSCAPE_ICON("interactive_simplify")); + _simplify->set_active(prefs->getInt("/tools/freehand/pencil/simplify", 0)); + _simplify->signal_toggled().connect(sigc::mem_fun(*this, &PencilToolbar::simplify_lpe)); + } - add(* Gtk::manage(new Gtk::SeparatorToolItem())); + /* LPE simplify flatten */ + { + _flatten_simplify = Gtk::manage(new Gtk::ToolButton(_("LPE simplify flatten"))); + _flatten_simplify->set_tooltip_text(_("LPE simplify flatten")); + _flatten_simplify->set_icon_name(INKSCAPE_ICON("flatten")); + _flatten_simplify->signal_clicked().connect(sigc::mem_fun(*this, &PencilToolbar::simplify_flatten)); + add(*_flatten_simplify); } + add(* Gtk::manage(new Gtk::SeparatorToolItem())); + /* advanced shape options */ add_advanced_shape_options(pencil_mode); @@ -339,17 +327,6 @@ PencilToolbar::maxpressure_value_changed() prefs->setDouble( "/tools/freehand/pencil/maxpressure", _maxpressure_adj->get_value()); } -void PencilToolbar::pressurestep_value_changed() -{ - // quit if run by the attr_changed listener - if (_freeze) { - return; - } - - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setDouble("/tools/freehand/pencil/pressurestep", _pressurestep_adj->get_value()); -} - void PencilToolbar::use_pencil_pressure() { bool pressure = _pressure_item->get_active(); @@ -358,7 +335,7 @@ PencilToolbar::use_pencil_pressure() { if (pressure) { _minpressure->set_visible(true); _maxpressure->set_visible(true); - _pressurestep->set_visible(true); + _cap_item->set_visible(true); _shape_item->set_visible(false); _simplify->set_visible(false); _flatten_simplify->set_visible(false); @@ -371,7 +348,7 @@ PencilToolbar::use_pencil_pressure() { _minpressure->set_visible(false); _maxpressure->set_visible(false); - _pressurestep->set_visible(false); + _cap_item->set_visible(false); _shape_item->set_visible(true); _simplify->set_visible(true); _flatten_simplify->set_visible(true); @@ -434,6 +411,50 @@ PencilToolbar::change_shape() { } void +PencilToolbar::add_powerstroke_cap(bool tool_is_pencil) +{ + /*advanced shape options */ + _cap_item = Gtk::manage(new Gtk::ToolItem()); + auto hbox = Gtk::manage(new Gtk::Box()); + _cap_item->add(*hbox); + + auto label = Gtk::manage(new UI::Widget::LabelToolItem(_("Caps:"))); + hbox->add(*label); + + _cap_combo = Gtk::manage(new Gtk::ComboBoxText()); + + auto prefs = Inkscape::Preferences::get(); + + std::vector<gchar*> powerstroke_cap_items_list = { + const_cast<gchar *>(C_("Cap", "Butt")), + _("Square"), + _("Round"), + _("Peak"), + _("Zero width") + }; + for (auto item:powerstroke_cap_items_list) { + _cap_combo->append(item); + } + + _cap_combo->set_tooltip_text(_("Cap for powerstroke pressure")); + int cap = prefs->getInt( "/live_effects/powerstroke/powerpencilcap", 4); + _cap_combo->set_active( cap ); + + hbox->add(*_cap_combo); + + _cap_combo->signal_changed().connect(sigc::mem_fun(*this, &PencilToolbar::change_cap)); + + add(*_cap_item); +} + +void +PencilToolbar::change_cap() { + auto prefs = Inkscape::Preferences::get(); + auto cap = _cap_combo->get_active_row_number(); + prefs->setInt("/live_effects/powerstroke/powerpencilcap", cap); +} + +void PencilToolbar::simplify_lpe() { bool simplify = _simplify->get_active(); diff --git a/src/ui/toolbar/pencil-toolbar.h b/src/ui/toolbar/pencil-toolbar.h index 9022d32da..42cc64af9 100644 --- a/src/ui/toolbar/pencil-toolbar.h +++ b/src/ui/toolbar/pencil-toolbar.h @@ -53,7 +53,6 @@ private: Gtk::ToggleToolButton *_pressure_item; UI::Widget::SpinButtonToolItem *_minpressure; UI::Widget::SpinButtonToolItem *_maxpressure; - UI::Widget::SpinButtonToolItem *_pressurestep; XML::Node *_repr; Gtk::ToolButton *_flatten_spiro_bspline; @@ -62,6 +61,9 @@ private: Gtk::ToolItem *_shape_item; Gtk::ComboBoxText *_shape_combo; + Gtk::ToolItem *_cap_item; + Gtk::ComboBoxText *_cap_combo; + Gtk::ToggleToolButton *_simplify; @@ -69,7 +71,6 @@ private: Glib::RefPtr<Gtk::Adjustment> _minpressure_adj; Glib::RefPtr<Gtk::Adjustment> _maxpressure_adj; - Glib::RefPtr<Gtk::Adjustment> _pressurestep_adj; Glib::RefPtr<Gtk::Adjustment> _tolerance_adj; void add_freehand_mode_toggle(bool tool_is_pencil); @@ -77,18 +78,18 @@ private: Glib::ustring const freehand_tool_name(); void minpressure_value_changed(); void maxpressure_value_changed(); - void pressurestep_value_changed(); void use_pencil_pressure(); void tolerance_value_changed(); void add_advanced_shape_options(bool tool_is_pencil); + void add_powerstroke_cap(bool tool_is_pencil); void change_shape(); + void change_cap(); void simplify_lpe(); void simplify_flatten(); void flatten_spiro_bspline(); protected: - PencilToolbar(SPDesktop *desktop, - bool pencil_mode); + PencilToolbar(SPDesktop *desktop, bool pencil_mode); ~PencilToolbar() override; public: |
