index 3ee00c9d1067a54fb04f3665deb2717ac6d47ba8..59578123e12e4d9e754c1897a9cf422d21a11634 100644 (file)
#include "desktop.h"
#include "desktop-handles.h"
+#include "sp-namedview.h"
#include "display/sodipodi-ctrl.h"
#include "knot.h"
namespace Display {
SnapIndicator::SnapIndicator(SPDesktop * desktop)
- : tempitem(NULL),
- desktop(desktop)
+ : _tempitem(NULL),
+ _desktop(desktop)
{
}
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);
+
+ /* Commented out for now, because this might hide any snapping bug!
+ if (!p.getSnapped()) {
+ return; // If we haven't snapped, then it is of no use to draw a snapindicator
+ }
+ */
+
+ 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,
"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;
}
}