summaryrefslogtreecommitdiffstats
path: root/src/knot.cpp
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2009-03-29 19:12:03 +0000
committerdvlierop2 <dvlierop2@users.sourceforge.net>2009-03-29 19:12:03 +0000
commite180a73c03c71c51b676cc345e92d9ff0e3115e4 (patch)
tree8f26521df08d79997a0e2c77e5df852e31476559 /src/knot.cpp
parentrevert part of 20988 to fix rendering of LPE on groups (diff)
downloadinkscape-e180a73c03c71c51b676cc345e92d9ff0e3115e4.tar.gz
inkscape-e180a73c03c71c51b676cc345e92d9ff0e3115e4.zip
- Move snap delay mechanism to the event context (used to be in SPCanvas)
- Rename lots of variables and methods to make them easier to understand - Add snapping to the connector tool (bzr r7589)
Diffstat (limited to 'src/knot.cpp')
-rw-r--r--src/knot.cpp100
1 files changed, 53 insertions, 47 deletions
diff --git a/src/knot.cpp b/src/knot.cpp
index fab622bbd..ae8a7f7c5 100644
--- a/src/knot.cpp
+++ b/src/knot.cpp
@@ -29,7 +29,6 @@
#include "message-context.h"
#include "event-context.h"
-
#define KNOT_EVENT_MASK (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | \
GDK_POINTER_MOTION_MASK | \
GDK_POINTER_MOTION_HINT_MASK | \
@@ -318,8 +317,8 @@ static int sp_knot_handler(SPCanvasItem */*item*/, GdkEvent *event, SPKnot *knot
if (event->button.button == 1 && !knot->desktop->event_context->space_panning) {
Geom::Point const p = knot->desktop->w2d(Geom::Point(event->button.x, event->button.y));
sp_knot_start_dragging(knot, p, (gint) event->button.x, (gint) event->button.y, event->button.time);
- if (knot->desktop->canvas->context_snap_delay_active == false) {
- sp_canvas_set_snap_delay_active(knot->desktop->canvas, true);
+ if (knot->desktop->event_context->_snap_window_open == false) {
+ sp_event_context_snap_window_open(knot->desktop->event_context);
snap_delay_temporarily_active = true;
}
consumed = TRUE;
@@ -327,7 +326,15 @@ static int sp_knot_handler(SPCanvasItem */*item*/, GdkEvent *event, SPKnot *knot
break;
case GDK_BUTTON_RELEASE:
if (event->button.button == 1 && !knot->desktop->event_context->space_panning) {
- knot->pressure = 0;
+ if (snap_delay_temporarily_active) {
+ if (knot->desktop->event_context->_snap_window_open == true) {
+ sp_event_context_snap_window_closed(knot->desktop->event_context);
+ }
+ snap_delay_temporarily_active = false;
+ }
+ sp_event_context_snap_watchdog_callback(knot->desktop->event_context->_delayed_snap_event);
+
+ knot->pressure = 0;
if (transform_escaped) {
transform_escaped = false;
consumed = TRUE;
@@ -353,13 +360,6 @@ static int sp_knot_handler(SPCanvasItem */*item*/, GdkEvent *event, SPKnot *knot
grabbed = FALSE;
moved = FALSE;
consumed = TRUE;
-
- if (snap_delay_temporarily_active) {
- if (knot->desktop->canvas->context_snap_delay_active == true) {
- sp_canvas_set_snap_delay_active(knot->desktop->canvas, false);
- }
- snap_delay_temporarily_active = false;
- }
}
}
break;
@@ -391,14 +391,8 @@ static int sp_knot_handler(SPCanvasItem */*item*/, GdkEvent *event, SPKnot *knot
SP_KNOT_DRAGGING,
TRUE);
}
- Geom::Point const motion_w(event->motion.x, event->motion.y);
- Geom::Point const motion_dt = knot->desktop->w2d(motion_w);
- Geom::Point p = motion_dt - knot->grabbed_rel_pos;
- sp_knot_request_position (knot, p, event->motion.state);
- knot->desktop->scroll_to_point (motion_dt);
- knot->desktop->set_coordinate_status(knot->pos); // display the coordinate of knot, not cursor - they may be different!
- if (event->motion.state & GDK_BUTTON1_MASK)
- gobble_motion_events(GDK_BUTTON1_MASK);
+ sp_event_context_snap_delay_handler(knot->desktop->event_context, NULL, knot, (GdkEventMotion *)event, DelayedSnapEvent::KNOT_HANDLER);
+ sp_knot_handler_request_position(event, knot);
moved = TRUE;
}
break;
@@ -428,35 +422,35 @@ static int sp_knot_handler(SPCanvasItem */*item*/, GdkEvent *event, SPKnot *knot
break;
case GDK_KEY_PRESS: // keybindings for knot
switch (get_group0_keyval(&event->key)) {
- case GDK_Escape:
- sp_knot_set_flag(knot, SP_KNOT_GRABBED, FALSE);
- if (!nograb) {
- sp_canvas_item_ungrab(knot->item, event->button.time);
- }
- if (moved) {
- sp_knot_set_flag(knot,
- SP_KNOT_DRAGGING,
- FALSE);
- g_signal_emit(knot,
- knot_signals[UNGRABBED], 0,
- event->button.state);
- sp_document_undo(sp_desktop_document(knot->desktop));
- knot->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Node or handle drag canceled."));
- transform_escaped = true;
- consumed = TRUE;
- }
- grabbed = FALSE;
- moved = FALSE;
- if (snap_delay_temporarily_active) {
- sp_canvas_set_snap_delay_active(knot->desktop->canvas, false);
- snap_delay_temporarily_active = false;
+ case GDK_Escape:
+ sp_knot_set_flag(knot, SP_KNOT_GRABBED, FALSE);
+ if (!nograb) {
+ sp_canvas_item_ungrab(knot->item, event->button.time);
+ }
+ if (moved) {
+ sp_knot_set_flag(knot,
+ SP_KNOT_DRAGGING,
+ FALSE);
+ g_signal_emit(knot,
+ knot_signals[UNGRABBED], 0,
+ event->button.state);
+ sp_document_undo(sp_desktop_document(knot->desktop));
+ knot->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Node or handle drag canceled."));
+ transform_escaped = true;
+ consumed = TRUE;
+ }
+ grabbed = FALSE;
+ moved = FALSE;
+ if (snap_delay_temporarily_active) {
+ sp_event_context_snap_window_closed(knot->desktop->event_context);
+ snap_delay_temporarily_active = false;
+ }
+ break;
+ default:
+ consumed = FALSE;
+ break;
}
- break;
- default:
- consumed = FALSE;
- break;
- }
- break;
+ break;
default:
break;
}
@@ -466,6 +460,18 @@ static int sp_knot_handler(SPCanvasItem */*item*/, GdkEvent *event, SPKnot *knot
return consumed;
}
+void sp_knot_handler_request_position(GdkEvent *event, SPKnot *knot)
+{
+ Geom::Point const motion_w(event->motion.x, event->motion.y);
+ Geom::Point const motion_dt = knot->desktop->w2d(motion_w);
+ Geom::Point p = motion_dt - knot->grabbed_rel_pos;
+ sp_knot_request_position (knot, p, event->motion.state);
+ knot->desktop->scroll_to_point (motion_dt);
+ knot->desktop->set_coordinate_status(knot->pos); // display the coordinate of knot, not cursor - they may be different!
+ if (event->motion.state & GDK_BUTTON1_MASK)
+ gobble_motion_events(GDK_BUTTON1_MASK);
+}
+
/**
* Return new knot object.
*/