From 3f9f064c09e3b68c9dee9c3ccdd687c2c5620077 Mon Sep 17 00:00:00 2001 From: Kaalleen Date: Sun, 26 Oct 2025 07:49:06 +0100 Subject: [PATCH 1/3] add pen tool distance tooltip --- src/ui/tools/pen-tool.cpp | 19 +++++++++++++++++++ src/ui/tools/pen-tool.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp index 718b77cffe..1af28767f7 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,24 @@ void PenTool::_setSubsequentPoint(Geom::Point const p, bool statusbar, unsigned this->_setAngleDistanceStatusMessage(p, 0, message); } } + + indicator_tmp_items.clear(); + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + Geom::Point tooltip_pos = p; + double 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) diff --git a/src/ui/tools/pen-tool.h b/src/ui/tools/pen-tool.h index e5dd1c8e77..7e9fe00f9a 100644 --- a/src/ui/tools/pen-tool.h +++ b/src/ui/tools/pen-tool.h @@ -162,6 +162,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 -- GitLab From c74685b98a3574e3d0416573c8a8149cf9f66021 Mon Sep 17 00:00:00 2001 From: Kaalleen Date: Sun, 9 Nov 2025 08:19:09 +0100 Subject: [PATCH 2/3] add toolbar button (still inoperative) --- share/ui/toolbar-pencil.ui | 19 +++++++++++++++++++ src/ui/toolbar/pencil-toolbar.cpp | 1 + src/ui/toolbar/pencil-toolbar.h | 3 +++ src/ui/tools/pen-tool.cpp | 2 +- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/share/ui/toolbar-pencil.ui b/share/ui/toolbar-pencil.ui index 0af5fe2220..b67ec37d5b 100644 --- a/share/ui/toolbar-pencil.ui +++ b/share/ui/toolbar-pencil.ui @@ -244,6 +244,25 @@ + + + + + + + + + center + True + False + True + Show distance to previous note above cursor + False + interactive_simplify + + + + diff --git a/src/ui/toolbar/pencil-toolbar.cpp b/src/ui/toolbar/pencil-toolbar.cpp index df5a20bcb5..a06fccc911 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(); diff --git a/src/ui/toolbar/pencil-toolbar.h b/src/ui/toolbar/pencil-toolbar.h index 03740e28fe..12f0b4371c 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; diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp index 1af28767f7..739c5f6140 100644 --- a/src/ui/tools/pen-tool.cpp +++ b/src/ui/tools/pen-tool.cpp @@ -1647,7 +1647,7 @@ void PenTool::_setSubsequentPoint(Geom::Point const p, bool statusbar, unsigned Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Geom::Point tooltip_pos = p; - double fontsize = 10.0; + 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]; -- GitLab From 7817123441be8f4b29b2361fbf04f47a2417e849 Mon Sep 17 00:00:00 2001 From: Kaalleen Date: Fri, 5 Dec 2025 17:01:54 +0100 Subject: [PATCH 3/3] make show distance button operational --- .../actions/show-distance-symbolic.svg | 6 + .../scalable/actions/show-distance.svg | 49 +++++ .../actions/show-distance-symbolic.svg | 19 ++ .../actions/show-distance-symbolic.svg | 193 ++++++++++++++++++ share/ui/toolbar-pencil.ui | 15 +- src/ui/toolbar/pencil-toolbar.cpp | 12 +- src/ui/toolbar/pencil-toolbar.h | 1 + src/ui/tools/pen-tool.cpp | 10 + src/ui/tools/pen-tool.h | 2 + 9 files changed, 299 insertions(+), 8 deletions(-) create mode 100644 share/icons/Dash/symbolic/actions/show-distance-symbolic.svg create mode 100644 share/icons/hicolor/scalable/actions/show-distance.svg create mode 100644 share/icons/hicolor/symbolic/actions/show-distance-symbolic.svg create mode 100644 share/icons/multicolor/symbolic/actions/show-distance-symbolic.svg 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 0000000000..44bf0a162e --- /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 0000000000..164e566e48 --- /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 0000000000..65661bec12 --- /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 0000000000..1e2368aa85 --- /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 b67ec37d5b..bfabe89833 100644 --- a/share/ui/toolbar-pencil.ui +++ b/share/ui/toolbar-pencil.ui @@ -245,20 +245,21 @@ - - - - - + + + + + + 5 center True False True - Show distance to previous note above cursor + Show distance to previous node above cursor False - interactive_simplify + show-distance diff --git a/src/ui/toolbar/pencil-toolbar.cpp b/src/ui/toolbar/pencil-toolbar.cpp index a06fccc911..441008f6e3 100644 --- a/src/ui/toolbar/pencil-toolbar.cpp +++ b/src/ui/toolbar/pencil-toolbar.cpp @@ -125,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. @@ -218,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{ @@ -437,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 12f0b4371c..d0286dd68e 100644 --- a/src/ui/toolbar/pencil-toolbar.h +++ b/src/ui/toolbar/pencil-toolbar.h @@ -102,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 739c5f6140..26f64b3e34 100644 --- a/src/ui/tools/pen-tool.cpp +++ b/src/ui/tools/pen-tool.cpp @@ -1643,9 +1643,18 @@ void PenTool::_setSubsequentPoint(Geom::Point const p, bool statusbar, unsigned } } + 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)); @@ -1900,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 7e9fe00f9a..920c18df38 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(); -- GitLab