diff --git a/share/icons/Dash/symbolic/actions/show-distance-symbolic.svg b/share/icons/Dash/symbolic/actions/show-distance-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..44bf0a162e27d0e50ec6c69f86c379ccb35ea746 --- /dev/null +++ b/share/icons/Dash/symbolic/actions/show-distance-symbolic.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/share/icons/hicolor/scalable/actions/show-distance.svg b/share/icons/hicolor/scalable/actions/show-distance.svg new file mode 100644 index 0000000000000000000000000000000000000000..164e566e482bb60400d33d951930fee23b7c25fa --- /dev/null +++ b/share/icons/hicolor/scalable/actions/show-distance.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/hicolor/symbolic/actions/show-distance-symbolic.svg b/share/icons/hicolor/symbolic/actions/show-distance-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..65661bec124fab46179195e75139997680cd4023 --- /dev/null +++ b/share/icons/hicolor/symbolic/actions/show-distance-symbolic.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/multicolor/symbolic/actions/show-distance-symbolic.svg b/share/icons/multicolor/symbolic/actions/show-distance-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..1e2368aa8563ac4e3fc5d3f9886f85b1823e1914 --- /dev/null +++ b/share/icons/multicolor/symbolic/actions/show-distance-symbolic.svg @@ -0,0 +1,193 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/ui/toolbar-pencil.ui b/share/ui/toolbar-pencil.ui index 0af5fe22209d988f8d00a2160755bbe7bca7033f..bfabe89833211deacf4cd2ce4de19582aa7836ee 100644 --- a/share/ui/toolbar-pencil.ui +++ b/share/ui/toolbar-pencil.ui @@ -244,6 +244,26 @@ + + + + + + + + + 5 + center + True + False + True + Show distance to previous node above cursor + False + show-distance + + + + diff --git a/src/ui/toolbar/pencil-toolbar.cpp b/src/ui/toolbar/pencil-toolbar.cpp index df5a20bcb5be0a9c46473b7f1e9e7af49cf34daa..441008f6e325d56fdbfa6494f194400e5cca6a5e 100644 --- a/src/ui/toolbar/pencil-toolbar.cpp +++ b/src/ui/toolbar/pencil-toolbar.cpp @@ -67,6 +67,7 @@ PencilToolbar::PencilToolbar(Glib::RefPtr const &builder, bool pen , _flatten_simplify_btn(get_widget(builder, "_flatten_simplify_btn")) , _shapescale_box(get_widget(builder, "_shapescale_box")) , _shapescale_item(get_derived_widget(builder, "_shapescale_item")) + , _distance_info_btn(get_widget(builder, "_distance_info_btn")) { auto prefs = Preferences::get(); @@ -124,6 +125,9 @@ PencilToolbar::PencilToolbar(Glib::RefPtr const &builder, bool pen // Configure LPE simplify flatten button. _flatten_simplify_btn.signal_clicked().connect([this] { _flattenLPE(); }); + } else { + _distance_info_btn.set_active(prefs->getBool("/tools/freehand/pen/show_distance", true)); + _distance_info_btn.signal_toggled().connect(sigc::mem_fun(*this, &PencilToolbar::show_distance)); } // Advanced shape options. @@ -217,7 +221,8 @@ void PencilToolbar::hide_extra_widgets(Glib::RefPtr const &builder { auto const pen_only_items = std::vector{ &get_widget(builder, "zigzag_btn"), - &get_widget(builder, "paraxial_btn") + &get_widget(builder, "paraxial_btn"), + &get_widget(builder, "pen_only_box") }; auto const pencil_only_items = std::vector{ @@ -436,6 +441,12 @@ void PencilToolbar::simplify_lpe() _flatten_simplify_btn.set_visible(simplify); } +void PencilToolbar::show_distance() +{ + bool show_distance = _distance_info_btn.get_active(); + Preferences::get()->setBool(freehand_tool_name() + "/show_distance", show_distance); +} + template void PencilToolbar::_flattenLPE() { diff --git a/src/ui/toolbar/pencil-toolbar.h b/src/ui/toolbar/pencil-toolbar.h index 03740e28fefbf6a8101b038a13f14cb1f20a5a04..d0286dd68e8f44cc02e1b7ff1ea1ba57560e39b9 100644 --- a/src/ui/toolbar/pencil-toolbar.h +++ b/src/ui/toolbar/pencil-toolbar.h @@ -78,6 +78,9 @@ private: UI::Widget::ComboToolItem *_shape_item; Gtk::Box &_shapescale_box; UI::Widget::SpinButton &_shapescale_item; + + Gtk::ToggleButton &_distance_info_btn; + bool _set_shape = false; OperationBlocker _blocker; @@ -99,6 +102,7 @@ private: void change_cap(int cap); void simplify_lpe(); void simplify_flatten(); + void show_distance(); template void _flattenLPE(); }; diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp index 718b77cffe7d76d6a63589d1d1c0eee06a6fb9b2..26f64b3e34b04665bcde7404d49a2d377ff64c38 100644 --- a/src/ui/tools/pen-tool.cpp +++ b/src/ui/tools/pen-tool.cpp @@ -27,6 +27,7 @@ #include "display/control/canvas-item-bpath.h" #include "display/control/canvas-item-ctrl.h" #include "display/control/canvas-item-curve.h" +#include "display/control/canvas-item-text.h" #include "object/sp-path.h" @@ -1641,6 +1642,33 @@ void PenTool::_setSubsequentPoint(Geom::Point const p, bool statusbar, unsigned this->_setAngleDistanceStatusMessage(p, 0, message); } } + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool show_distance = prefs->getBool("/tools/freehand/pen/show_distance", true); + indicator_tmp_items.clear(); + if (show_distance) { + _show_distance(p); + } +} + +void PenTool::_show_distance(Geom::Point const p) +{ + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + + Geom::Point tooltip_pos = p; + double fontsize = prefs->getDouble("/tools/measure/fontsize", 10.0); + tooltip_pos += _desktop->w2d(Geom::Point(0, -2*fontsize)); + + Geom::Point rel = p - p_array[0]; + Inkscape::Util::Quantity q = Inkscape::Util::Quantity(Geom::L2(rel), "px"); + Glib::ustring dist = q.string(_desktop->getNamedView()->display_units); + + auto canvas_tooltip = new Inkscape::CanvasItemText(_desktop->getCanvasTemp(), tooltip_pos, dist); + canvas_tooltip->set_fontsize(fontsize); + canvas_tooltip->set_fill(0xffffffff); + canvas_tooltip->set_background(0x33337f80); + + indicator_tmp_items.emplace_back(canvas_tooltip); } void PenTool::_setCtrl(Geom::Point const q, unsigned const state) @@ -1881,6 +1909,7 @@ void PenTool::_finish(bool const closed) this->green_anchor.reset(); _redo_stack.clear(); + indicator_tmp_items.clear(); this->_enableEvents(); } diff --git a/src/ui/tools/pen-tool.h b/src/ui/tools/pen-tool.h index e5dd1c8e77ceb40f9794782a62b6a9dbe2074efb..920c18df38c8c96ebe4fb85051db21e7e7ae32bc 100644 --- a/src/ui/tools/pen-tool.h +++ b/src/ui/tools/pen-tool.h @@ -135,6 +135,8 @@ private: void _resetColors(); + void _show_distance(Geom::Point const p); + void _disableEvents(); void _enableEvents(); @@ -162,6 +164,8 @@ private: Util::ActionAccel _acc_to_line; Util::ActionAccel _acc_to_curve; Util::ActionAccel _acc_to_guides; + + std::vector> indicator_tmp_items; }; } // namespace Inkscape:UI::Tools