summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Merry <dev@randomguy3.me.uk>2012-12-07 00:28:18 +0000
committerAlex Merry <dev@randomguy3.me.uk>2012-12-07 00:28:18 +0000
commit9ff258a631d9118828768a4a0bcec4a7fb2004a3 (patch)
tree775ec9543ec7adb3541eaa9a651a6c975f556065
parent7aa6eda371eea746792dce412b97ed9799e3467e (diff)
Only discard selection when switching to another tool
Before, the selection was discarded even when another window grabbed the tool.
-rw-r--r--tikzit/src/gtk/GraphEditorPanel.m3
-rw-r--r--tikzit/src/gtk/SelectTool.m116
2 files changed, 61 insertions, 58 deletions
diff --git a/tikzit/src/gtk/GraphEditorPanel.m b/tikzit/src/gtk/GraphEditorPanel.m
index 6d98fa5..922322e 100644
--- a/tikzit/src/gtk/GraphEditorPanel.m
+++ b/tikzit/src/gtk/GraphEditorPanel.m
@@ -78,6 +78,9 @@
if (t == tool)
return;
+ [[[renderer document] pickSupport] deselectAllNodes];
+ [[[renderer document] pickSupport] deselectAllEdges];
+
BOOL hadOldTool = ([tool activeRenderer] == renderer);
id oldTool = tool;
diff --git a/tikzit/src/gtk/SelectTool.m b/tikzit/src/gtk/SelectTool.m
index 2501935..6e9bf9f 100644
--- a/tikzit/src/gtk/SelectTool.m
+++ b/tikzit/src/gtk/SelectTool.m
@@ -79,8 +79,6 @@ static const InputMask unionSelectMask = ShiftMask;
if (r == renderer)
return;
- [self deselectAll];
-
[r retain];
[renderer release];
renderer = r;
@@ -110,8 +108,7 @@ static const InputMask unionSelectMask = ShiftMask;
if (leaderNode != nil) {
BOOL alreadySelected = [[self doc] isNodeSelected:leaderNode];
if (!unionSelect && !alreadySelected) {
- [self deselectAllEdges];
- [self deselectAllNodes];
+ [self deselectAll];
}
if (unionSelect && alreadySelected) {
state = ToggleSelectState;
@@ -142,64 +139,13 @@ static const InputMask unionSelectMask = ShiftMask;
[self deselectAll];
}
[selectionBoxContents removeAllObjects];
+ [renderer clearHighlightedNodes];
state = SelectBoxState;
}
}
}
}
-- (void) mouseReleaseAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask {
- if (button != LeftButton)
- return;
-
- if (state == SelectBoxState) {
- BOOL shouldDeselect = !(mask & unionSelectMask);
- if (shouldDeselect) {
- [self deselectAllEdges];
- }
- [[[self doc] pickSupport] selectAllNodes:selectionBoxContents
- replacingSelection:shouldDeselect];
- [self clearSelectionBox];
- } else if (state == ToggleSelectState) {
- [[[self doc] pickSupport] deselectNode:leaderNode];
- leaderNode = nil;
- } else if (state == MoveSelectedNodesState) {
- if (NSEqualPoints (oldLeaderPos, [leaderNode point])) {
- [[self doc] cancelShiftNodes];
- } else {
- [[self doc] endShiftNodes];
- }
- leaderNode = nil;
- } else if (state == DragEdgeControlPoint1 || state == DragEdgeControlPoint2) {
- // FIXME: check if there was any real change
- [[self doc] endModifyEdge];
- }
-}
-
-- (void) mouseDoubleClickAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask {
- if (button != LeftButton)
- return;
-
- if (state != QuietState) {
- return;
- }
- // convert bend mode on edge under mouse cursor
- Edge *edge = [renderer anyEdgeAt:pos withFuzz:edgeFuzz];
- if (edge != nil) {
- [[self doc] startModifyEdge:edge];
- if ([edge bendMode]==EdgeBendModeBasic) {
- [edge convertBendToAngles];
- [edge setBendMode:EdgeBendModeInOut];
- } else {
- [edge setBendMode:EdgeBendModeBasic];
- }
- [[self doc] endModifyEdge];
-
- [self deselectAllEdges];
- [[[self doc] pickSupport] selectEdge:edge];
- }
-}
-
- (void) mouseMoveTo:(NSPoint)pos withButtons:(MouseButton)buttons andMask:(InputMask)mask {
if (!(buttons & LeftButton))
return;
@@ -222,12 +168,12 @@ static const InputMask unionSelectMask = ShiftMask;
if (NSPointInRect(nodePos, selectionBox)) {
if (![selectionBoxContents member:node]) {
[selectionBoxContents addObject:node];
- [renderer invalidateNode:node];
+ [renderer setNode:node highlighted:YES];
}
} else {
if ([selectionBoxContents member:node]) {
[selectionBoxContents removeObject:node];
- [renderer invalidateNode:node];
+ [renderer setNode:node highlighted:NO];
}
}
}
@@ -258,6 +204,58 @@ static const InputMask unionSelectMask = ShiftMask;
}
}
+- (void) mouseReleaseAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask {
+ if (button != LeftButton)
+ return;
+
+ if (state == SelectBoxState) {
+ BOOL shouldDeselect = !(mask & unionSelectMask);
+ if (shouldDeselect) {
+ [self deselectAllEdges];
+ }
+ [[[self doc] pickSupport] selectAllNodes:selectionBoxContents
+ replacingSelection:shouldDeselect];
+ [self clearSelectionBox];
+ } else if (state == ToggleSelectState) {
+ [[[self doc] pickSupport] deselectNode:leaderNode];
+ leaderNode = nil;
+ } else if (state == MoveSelectedNodesState) {
+ if (NSEqualPoints (oldLeaderPos, [leaderNode point])) {
+ [[self doc] cancelShiftNodes];
+ } else {
+ [[self doc] endShiftNodes];
+ }
+ leaderNode = nil;
+ } else if (state == DragEdgeControlPoint1 || state == DragEdgeControlPoint2) {
+ // FIXME: check if there was any real change
+ [[self doc] endModifyEdge];
+ }
+}
+
+- (void) mouseDoubleClickAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask {
+ if (button != LeftButton)
+ return;
+
+ if (state != QuietState) {
+ return;
+ }
+ // convert bend mode on edge under mouse cursor
+ Edge *edge = [renderer anyEdgeAt:pos withFuzz:edgeFuzz];
+ if (edge != nil) {
+ [[self doc] startModifyEdge:edge];
+ if ([edge bendMode]==EdgeBendModeBasic) {
+ [edge convertBendToAngles];
+ [edge setBendMode:EdgeBendModeInOut];
+ } else {
+ [edge setBendMode:EdgeBendModeBasic];
+ }
+ [[self doc] endModifyEdge];
+
+ [self deselectAllEdges];
+ [[[self doc] pickSupport] selectEdge:edge];
+ }
+}
+
- (void) renderWithContext:(id<RenderContext>)context onSurface:(id<Surface>)surface {
if (!NSIsEmptyRect (selectionBox)) {
[context saveState];
@@ -351,6 +349,8 @@ static const InputMask unionSelectMask = ShiftMask;
selectionBox = emptyRect;
[renderer invalidateRect:NSInsetRect (oldRect, -2, -2)];
+ [selectionBoxContents removeAllObjects];
+ [renderer clearHighlightedNodes];
}
- (BOOL) selectionBoxContainsNode:(Node*)node {