diff options
author | Alex Merry <alex.merry@cs.ox.ac.uk> | 2012-06-14 17:14:30 +0100 |
---|---|---|
committer | Alex Merry <alex.merry@cs.ox.ac.uk> | 2012-06-14 17:14:30 +0100 |
commit | 04fe94210f4e17514631791760cbf3007a4d409a (patch) | |
tree | a951383cdb7fff245b95853d83265d936b8c2768 /tikzit/src/common/Edge.m | |
parent | a07317887d8aa2d9920a756a48fc8b6c4bbd97c7 (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.m | 33 |
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; |