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 @@
+
+
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 @@
+
+
+
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