summaryrefslogtreecommitdiffstats
path: root/src/display/snap-indicator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/display/snap-indicator.cpp')
-rw-r--r--src/display/snap-indicator.cpp29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/display/snap-indicator.cpp b/src/display/snap-indicator.cpp
index 3ee00c9d1..e08fc06d6 100644
--- a/src/display/snap-indicator.cpp
+++ b/src/display/snap-indicator.cpp
@@ -15,6 +15,7 @@
#include "desktop.h"
#include "desktop-handles.h"
+#include "sp-namedview.h"
#include "display/sodipodi-ctrl.h"
#include "knot.h"
@@ -22,8 +23,8 @@ namespace Inkscape {
namespace Display {
SnapIndicator::SnapIndicator(SPDesktop * desktop)
- : tempitem(NULL),
- desktop(desktop)
+ : _tempitem(NULL),
+ _desktop(desktop)
{
}
@@ -37,11 +38,16 @@ void
SnapIndicator::set_new_snappoint(Inkscape::SnappedPoint const p)
{
remove_snappoint();
-
- bool enabled = true; // TODO add preference for snap indicator.
- if (enabled) {
+
+ g_assert(_desktop != NULL);
+ SPNamedView *nv = sp_desktop_namedview(_desktop);
+
+ if (nv->snapindicator) {
// TODO add many different kinds of snap indicator :-)
- SPCanvasItem * canvasitem = sp_canvas_item_new( sp_desktop_tempgroup (desktop),
+ // For this we should use p->getTarget() to find out what has snapped
+ // and adjust the shape of the snapindicator accordingly, e.g. a cross
+ // when snapping to an intersection, a circle when snapping to a node, etc.
+ SPCanvasItem * canvasitem = sp_canvas_item_new( sp_desktop_tempgroup (_desktop),
SP_TYPE_CTRL,
"anchor", GTK_ANCHOR_CENTER,
"size", 10.0,
@@ -49,20 +55,19 @@ SnapIndicator::set_new_snappoint(Inkscape::SnappedPoint const p)
"stroke_color", 0xf000f0ff,
"mode", SP_KNOT_MODE_XOR,
"shape", SP_KNOT_SHAPE_CROSS,
- NULL );
-
+ NULL );
SP_CTRL(canvasitem)->moveto(p.getPoint());
- tempitem = desktop->add_temporary_canvasitem(canvasitem, 1000); // TODO add preference for snap indicator timeout
+ _tempitem = _desktop->add_temporary_canvasitem(canvasitem, 1000); // TODO add preference for snap indicator timeout
}
}
void
SnapIndicator::remove_snappoint()
{
- if (tempitem) {
- desktop->remove_temporary_canvasitem(tempitem);
- tempitem = NULL;
+ if (_tempitem) {
+ _desktop->remove_temporary_canvasitem(_tempitem);
+ _tempitem = NULL;
}
}