summaryrefslogtreecommitdiffstats
path: root/src/ui/toolbar
diff options
context:
space:
mode:
authorJabiertxof <jabier.arraiza@marker.es>2019-07-16 14:37:19 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-07-19 21:33:23 +0000
commite2f4af7eb9d6a497308925930e89d2a403c3a5c9 (patch)
treef1abd09c7996dc93dbb09d79b91e70e3a5f0847d /src/ui/toolbar
parentFix maren pointed bugs (diff)
downloadinkscape-e2f4af7eb9d6a497308925930e89d2a403c3a5c9.tar.gz
inkscape-e2f4af7eb9d6a497308925930e89d2a403c3a5c9.zip
Improvemets to power pencil
Diffstat (limited to 'src/ui/toolbar')
-rw-r--r--src/ui/toolbar/pencil-toolbar.cpp195
-rw-r--r--src/ui/toolbar/pencil-toolbar.h11
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: