diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-07-13 17:53:51 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-07-14 18:29:22 +0000 |
| commit | 6ff4da4367db057c78ee3bce2dc66bb3be99f0a4 (patch) | |
| tree | a49cff1af8e75cb37a39a73796fc5c1f8e875a5e /src/ui/toolbar/pencil-toolbar.cpp | |
| parent | Pre-Threading comment (diff) | |
| download | inkscape-6ff4da4367db057c78ee3bce2dc66bb3be99f0a4.tar.gz inkscape-6ff4da4367db057c78ee3bce2dc66bb3be99f0a4.zip | |
PoewePencil improvements
Diffstat (limited to 'src/ui/toolbar/pencil-toolbar.cpp')
| -rw-r--r-- | src/ui/toolbar/pencil-toolbar.cpp | 107 |
1 files changed, 63 insertions, 44 deletions
diff --git a/src/ui/toolbar/pencil-toolbar.cpp b/src/ui/toolbar/pencil-toolbar.cpp index 3ef896ccf..753d51cd5 100644 --- a/src/ui/toolbar/pencil-toolbar.cpp +++ b/src/ui/toolbar/pencil-toolbar.cpp @@ -105,42 +105,54 @@ 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 oldPressureMode = prefs->getIntLimited("/tools/freehand/pencil/freehand-mode", 0, 0, 3) == 3; + bool pressure = prefs->getBool(freehand_tool_name() + "/pressure", oldPressureMode); + if (oldPressureMode && pressure) { + prefs->setBool(freehand_tool_name() + "/pressure", true); + } + _pressure_item->set_active(pressure); + _pressure_item->signal_toggled().connect(sigc::mem_fun(*this, &PencilToolbar::use_pencil_pressure)); + // always show + add(*_pressure_item); + } /* min pressure */ { - auto minpressure_val = prefs->getDouble("/tools/freehand/pencil/minpressure", 0); + 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", 100); + 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); } - - /* Use pressure */ + /* pressure steps */ { - _pressure_item = add_toggle_button(_("Use pressure input"), - _("Use pressure input")); - _pressure_item->set_icon_name(INKSCAPE_ICON("draw-use-pressure")); - bool oldPressureMode = prefs->getIntLimited("/tools/freehand/pencil/freehand-mode", 0, 0, 3) == 3; - bool pressure = prefs->getBool(freehand_tool_name() + "/pressure", oldPressureMode); - if (oldPressureMode && pressure) { - prefs->setBool(freehand_tool_name() + "/pressure", true); - } - _pressure_item->set_active(pressure); - _pressure_item->signal_toggled().connect(sigc::mem_fun(*this, &PencilToolbar::use_pencil_pressure)); - - add(*_minpressure); - add(*_maxpressure); + auto pressurestep_val = prefs->getDouble("/tools/freehand/pencil/pressurestep", 5); + _pressurestep_adj = Gtk::Adjustment::create(pressurestep_val, 0., 100, 1.0, 0.0); + _pressurestep = Gtk::manage(new UI::Widget::SpinButtonToolItem("pencil-pressurestep", _("Knot gap:"), _pressurestep_adj, 0, 0)); + _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); } + + add(* Gtk::manage(new Gtk::SeparatorToolItem())); /* Tolerance */ @@ -154,7 +166,7 @@ PencilToolbar::PencilToolbar(SPDesktop *desktop, 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 ); + // ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); add(*tolerance_item); } @@ -165,7 +177,6 @@ PencilToolbar::PencilToolbar(SPDesktop *desktop, _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)); - } /* LPE simplify flatten */ @@ -192,27 +203,8 @@ PencilToolbar::PencilToolbar(SPDesktop *desktop, if (freehandMode != 1 && freehandMode != 2) { _flatten_spiro_bspline->set_visible(false); } - if (pencil_mode) { - /* Pressure */ - if (!prefs->getBool(freehand_tool_name() + "/pressure", false)) { - _minpressure->set_visible(false); - _maxpressure->set_visible(false); - } - - /* LPE simplify based tolerance */ - if (freehandMode == 2) { - _simplify->set_visible(false); - } - - /* LPE simplify flatten */ - if (freehandMode == 2 || !prefs->getInt("/tools/freehand/pencil/simplify", 0)) { - _flatten_simplify->set_visible(false); - } - if (!prefs->getBool(freehand_tool_name() + "/pressure", false)) { - /* Advanced shape options */ - _shape_item->set_visible(!prefs->getBool("/tools/freehand/pencil/pressure", false)); - } + use_pencil_pressure(); } } @@ -273,10 +265,8 @@ PencilToolbar::add_freehand_mode_toggle(bool tool_is_pencil) auto label = Gtk::manage(new UI::Widget::LabelToolItem(_("Mode:"))); label->set_tooltip_text(_("Mode of new lines drawn by this tool")); add(*label); - /* Freehand mode toggle buttons */ Gtk::RadioToolButton::Group mode_group; - auto bezier_mode_btn = Gtk::manage(new Gtk::RadioToolButton(mode_group, _("Bezier"))); bezier_mode_btn->set_tooltip_text(_("Create regular Bezier path")); bezier_mode_btn->set_icon_name(INKSCAPE_ICON("path-mode-bezier")); @@ -355,6 +345,18 @@ PencilToolbar::maxpressure_value_changed() } 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(); auto prefs = Inkscape::Preferences::get(); @@ -362,11 +364,29 @@ PencilToolbar::use_pencil_pressure() { if (pressure) { _minpressure->set_visible(true); _maxpressure->set_visible(true); - _shape_item->set_visible (false); + _pressurestep->set_visible(true); + _shape_item->set_visible(false); + _simplify->set_visible(false); + _flatten_simplify->set_visible(false); + _flatten_spiro_bspline->set_visible(false); + for (auto button : _mode_buttons) { + button->set_sensitive(false); + } } else { + guint freehandMode = prefs->getInt("/tools/freehand/pencil/freehand-mode", 0); + _minpressure->set_visible(false); _maxpressure->set_visible(false); - _shape_item->set_visible (true); + _pressurestep->set_visible(false); + _shape_item->set_visible(true); + _simplify->set_visible(true); + _flatten_simplify->set_visible(true); + if (freehandMode == 1 || freehandMode == 2) { + _flatten_spiro_bspline->set_visible(true); + } + for (auto button : _mode_buttons) { + button->set_sensitive(true); + } } } @@ -375,7 +395,6 @@ PencilToolbar::add_advanced_shape_options(bool tool_is_pencil) { /*advanced shape options */ _shape_item = Gtk::manage(new Gtk::ToolItem()); - auto hbox = Gtk::manage(new Gtk::Box()); _shape_item->add(*hbox); |
