summaryrefslogtreecommitdiff
path: root/tikzit/src/common/Edge.m
diff options
context:
space:
mode:
authorAlex Merry <alex.merry@cs.ox.ac.uk>2012-06-14 17:14:30 +0100
committerAlex Merry <alex.merry@cs.ox.ac.uk>2012-06-14 17:14:30 +0100
commit04fe94210f4e17514631791760cbf3007a4d409a (patch)
treea951383cdb7fff245b95853d83265d936b8c2768 /tikzit/src/common/Edge.m
parenta07317887d8aa2d9920a756a48fc8b6c4bbd97c7 (diff)
Re-render bend incident edges when node style changes
The node shape affects where edges terminate. This affects the shape of bent edges.
Diffstat (limited to 'tikzit/src/common/Edge.m')
-rw-r--r--tikzit/src/common/Edge.m33
1 files changed, 25 insertions, 8 deletions
diff --git a/tikzit/src/common/Edge.m b/tikzit/src/common/Edge.m
index ab1aea6..0da38db 100644
--- a/tikzit/src/common/Edge.m
+++ b/tikzit/src/common/Edge.m
@@ -308,6 +308,9 @@
- (Node*)source {return source;}
- (void)setSource:(Node *)s {
if (source != s) {
+ [source removeObserver:self
+ forKeyPath:@"style"];
+
[source release];
source = [s retain];
@@ -315,6 +318,11 @@
bendMode = EdgeBendModeInOut;
weight = 1.0f;
}
+
+ [source addObserver:self
+ forKeyPath:@"style"
+ options:NSKeyValueObservingOptionNew
+ context:NULL];
dirty = YES;
}
@@ -323,6 +331,9 @@
- (Node*)target {return target;}
- (void)setTarget:(Node *)t {
if (target != t) {
+ [target removeObserver:self
+ forKeyPath:@"style"];
+
[target release];
target = [t retain];
@@ -330,46 +341,52 @@
bendMode = EdgeBendModeInOut;
weight = 1.0f;
}
+
+ [target addObserver:self
+ forKeyPath:@"style"
+ options:NSKeyValueObservingOptionNew
+ context:NULL];
dirty = YES;
}
}
+- (void)observeValueForKeyPath:(NSString *)keyPath
+ ofObject:(id)object
+ change:(NSDictionary *)change
+ context:(void *)context
+
+{
+ dirty = YES;
+}
+
// edgeNode and hasEdgeNode use a bit of key-value observing to help the mac GUI keep up
- (Node*)edgeNode {return edgeNode;}
- (void)setEdgeNode:(Node *)n {
-#if defined (__APPLE__)
[self willChangeValueForKey:@"edgeNode"];
[self willChangeValueForKey:@"hasEdgeNode"];
-#endif
if (edgeNode != n) {
hasEdgeNode = (n != nil);
[edgeNode release];
edgeNode = [n retain];
// don't set dirty bit, because control points don't need update
}
-#if defined (__APPLE__)
[self didChangeValueForKey:@"edgeNode"];
[self didChangeValueForKey:@"hasEdgeNode"];
-#endif
}
- (BOOL)hasEdgeNode { return hasEdgeNode; }
- (void)setHasEdgeNode:(BOOL)b {
-#if defined (__APPLE__)
[self willChangeValueForKey:@"edgeNode"];
[self willChangeValueForKey:@"hasEdgeNode"];
-#endif
hasEdgeNode = b;
if (hasEdgeNode && edgeNode == nil) {
edgeNode = [[Node alloc] init];
}
-#if defined (__APPLE__)
[self didChangeValueForKey:@"edgeNode"];
[self didChangeValueForKey:@"hasEdgeNode"];
-#endif
}
@synthesize data;