diff options
author | randomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64> | 2012-01-17 18:39:31 +0000 |
---|---|---|
committer | randomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64> | 2012-01-17 18:39:31 +0000 |
commit | f90dd4ffc4b679e61a2a8cf43853b7d3c72c3e83 (patch) | |
tree | 15842d8311e621dc2776a77c9740bd72784f13f1 /tikzit/src/linux | |
parent | 18871fdd7bbfb43eb0971ee358554f321f789eee (diff) |
Calculate the head and tail of edges to be just where they contact the node (ie: behave more like tikz).
git-svn-id: https://tikzit.svn.sourceforge.net/svnroot/tikzit/trunk@388 7c02a99a-9b00-45e3-bf44-6f3dd7fddb64
Diffstat (limited to 'tikzit/src/linux')
-rw-r--r-- | tikzit/src/linux/Edge+Render.m | 8 | ||||
-rw-r--r-- | tikzit/src/linux/GraphRenderer.m | 8 | ||||
-rw-r--r-- | tikzit/src/linux/Node+Render.h | 4 | ||||
-rw-r--r-- | tikzit/src/linux/Node+Render.m | 31 |
4 files changed, 33 insertions, 18 deletions
diff --git a/tikzit/src/linux/Edge+Render.m b/tikzit/src/linux/Edge+Render.m index a6738b7..c64b35f 100644 --- a/tikzit/src/linux/Edge+Render.m +++ b/tikzit/src/linux/Edge+Render.m @@ -125,14 +125,14 @@ static const float cpLineWidth = 1.0; } - (void) createStrokePathInContext:(id<RenderContext>)context withTransformer:(Transformer*)transformer { - NSPoint c_source = [transformer toScreen:src]; + NSPoint c_head = [transformer toScreen:head]; NSPoint c_cp1 = [transformer toScreen:cp1]; NSPoint c_cp2 = [transformer toScreen:cp2]; - NSPoint c_target = [transformer toScreen:targ]; + NSPoint c_tail = [transformer toScreen:tail]; [context startPath]; - [context moveTo:c_source]; - [context curveTo:c_target withCp1:c_cp1 andCp2:c_cp2]; + [context moveTo:c_head]; + [context curveTo:c_tail withCp1:c_cp1 andCp2:c_cp2]; if ([self style] != nil) { // draw edge decoration diff --git a/tikzit/src/linux/GraphRenderer.m b/tikzit/src/linux/GraphRenderer.m index c964f1b..571390f 100644 --- a/tikzit/src/linux/GraphRenderer.m +++ b/tikzit/src/linux/GraphRenderer.m @@ -140,7 +140,7 @@ void graph_renderer_expose_event(GtkWidget *widget, GdkEventExpose *event); if (node == nil) { return; } - NSRect nodeRect = [node boundsWithLabelOnSurface:surface]; + NSRect nodeRect = [node renderBoundsWithLabelForSurface:surface]; nodeRect = NSInsetRect (nodeRect, -2.0f, -2.0f); [surface invalidateRect:nodeRect]; } @@ -170,7 +170,7 @@ void graph_renderer_expose_event(GtkWidget *widget, GdkEventExpose *event); } - (BOOL) point:(NSPoint)p fuzzyHitsNode:(Node*)node { - NSRect bounds = [node boundsOnSurface:surface]; + NSRect bounds = [node renderBoundsForSurface:surface]; return NSPointInRect(p, bounds); } @@ -307,13 +307,13 @@ void graph_renderer_expose_event(GtkWidget *widget, GdkEventExpose *event); - (void) invalidateHalfEdge { if (halfEdgeOrigin != nil) { NSRect invRect = NSRectAroundPoints(halfEdgeEnd, halfEdgeOriginPoint); - invRect = NSUnionRect(invRect, [halfEdgeOrigin boundsWithLabelOnSurface:surface]); + invRect = NSUnionRect(invRect, [halfEdgeOrigin renderBoundsWithLabelForSurface:surface]); NSEnumerator *enumerator = [doc nodeEnumerator]; Node *node; while ((node = [enumerator nextObject]) != nil) { if ([self point:halfEdgeEnd fuzzyHitsNode:node]) { - invRect = NSUnionRect(invRect, [node boundsWithLabelOnSurface:surface]); + invRect = NSUnionRect(invRect, [node renderBoundsWithLabelForSurface:surface]); } } [surface invalidateRect:NSInsetRect (invRect, -2.0f, -2.0f)]; diff --git a/tikzit/src/linux/Node+Render.h b/tikzit/src/linux/Node+Render.h index 49667e1..60d2573 100644 --- a/tikzit/src/linux/Node+Render.h +++ b/tikzit/src/linux/Node+Render.h @@ -30,8 +30,8 @@ enum NodeState { - (Transformer*) shapeTransformerForSurface:(id<Surface>)surface; // the total rendered bounds, excluding label -- (NSRect) boundsOnSurface:(id<Surface>)surface; -- (NSRect) boundsWithLabelOnSurface:(id<Surface>)surface; +- (NSRect) renderBoundsForSurface:(id<Surface>)surface; +- (NSRect) renderBoundsWithLabelForSurface:(id<Surface>)surface; - (NSString*) renderedLabel; - (NSSize) renderedLabelSizeInContext:(id<RenderContext>)context; - (void) renderLabelToSurface:(id<Surface>)surface withContext:(id<RenderContext>)context; diff --git a/tikzit/src/linux/Node+Render.m b/tikzit/src/linux/Node+Render.m index 7450dba..907d818 100644 --- a/tikzit/src/linux/Node+Render.m +++ b/tikzit/src/linux/Node+Render.m @@ -27,16 +27,31 @@ @implementation Node (Render) +- (Shape*) shapeToRender { + if (style) { + return [Shape shapeForName:[style shapeName]]; + } else { + return [Shape shapeForName:SHAPE_CIRCLE]; + } +} + - (Transformer*) shapeTransformerForSurface:(id<Surface>)surface { return [self shapeTransformerFromTransformer:[surface transformer]]; } -- (NSRect) boundsOnSurface:(id<Surface>)surface { - return [self boundsUsingShapeTransform:[self shapeTransformerForSurface:surface]]; +- (NSRect) renderBoundsUsingShapeTransform:(Transformer*)shapeTrans { + float strokeThickness = style ? [style strokeThickness] : [NodeStyle defaultStrokeThickness]; + NSRect screenBounds = [shapeTrans rectToScreen:[[self shapeToRender] boundingRect]]; + screenBounds = NSInsetRect(screenBounds, -strokeThickness, -strokeThickness); + return screenBounds; +} + +- (NSRect) renderBoundsForSurface:(id<Surface>)surface { + return [self renderBoundsUsingShapeTransform:[self shapeTransformerForSurface:surface]]; } -- (NSRect) boundsWithLabelOnSurface:(id<Surface>)surface { - NSRect nodeBounds = [self boundsOnSurface:surface]; +- (NSRect) renderBoundsWithLabelForSurface:(id<Surface>)surface { + NSRect nodeBounds = [self renderBoundsForSurface:surface]; NSRect labelRect = NSZeroRect; if (![label isEqual:@""]) { id<RenderContext> cr = [surface createRenderContext]; @@ -127,7 +142,7 @@ [context saveState]; - [[self shape] drawPathWithTransform:shapeTrans andContext:context]; + [[self shapeToRender] drawPathWithTransform:shapeTrans andContext:context]; [context setLineWidth:strokeThickness]; if (!style) { @@ -145,7 +160,7 @@ alpha = 0.25f; RColor selectionColor = MakeSolidRColor(0.61f, 0.735f, 1.0f); - [[self shape] drawPathWithTransform:shapeTrans andContext:context]; + [[self shapeToRender] drawPathWithTransform:shapeTrans andContext:context]; [context strokePathWithColor:selectionColor andFillWithColor:selectionColor usingAlpha:alpha]; } @@ -156,7 +171,7 @@ - (BOOL) hitByPoint:(NSPoint)p onSurface:(id<Surface>)surface { Transformer *shapeTrans = [self shapeTransformerForSurface:surface]; - NSRect screenBounds = [self boundsUsingShapeTransform:shapeTrans]; + NSRect screenBounds = [self renderBoundsUsingShapeTransform:shapeTrans]; if (!NSPointInRect(p, screenBounds)) { return NO; } @@ -164,7 +179,7 @@ float strokeThickness = style ? [style strokeThickness] : [NodeStyle defaultStrokeThickness]; id<RenderContext> ctx = [surface createRenderContext]; [ctx setLineWidth:strokeThickness]; - [[self shape] drawPathWithTransform:shapeTrans andContext:ctx]; + [[self shapeToRender] drawPathWithTransform:shapeTrans andContext:ctx]; return [ctx strokeIncludesPoint:p] || [ctx fillIncludesPoint:p]; } |