diff options
Diffstat (limited to 'frontends/cocoa/ArrowBox.m')
-rw-r--r-- | frontends/cocoa/ArrowBox.m | 211 |
1 files changed, 104 insertions, 107 deletions
diff --git a/frontends/cocoa/ArrowBox.m b/frontends/cocoa/ArrowBox.m index 3eb7411a2..258a58cda 100644 --- a/frontends/cocoa/ArrowBox.m +++ b/frontends/cocoa/ArrowBox.m @@ -30,134 +30,131 @@ @synthesize arrowEdge; @synthesize cornerRadius; -- (void) setArrowEdge: (ArrowEdge)newEdge +- (void)setArrowEdge:(ArrowEdge)newEdge { - if (arrowEdge == newEdge) { - return; - } + if (arrowEdge == newEdge) { + return; + } - arrowEdge = newEdge; + arrowEdge = newEdge; - [self setNeedsDisplay: YES]; - updateShadow = YES; + [self setNeedsDisplay:YES]; + updateShadow = YES; } - -- (void) setArrowSize: (CGFloat)newSize +- (void)setArrowSize:(CGFloat)newSize { - arrowSize = newSize; - [self setNeedsDisplay: YES]; - updateShadow = YES; + arrowSize = newSize; + [self setNeedsDisplay:YES]; + updateShadow = YES; } - -- (void) setCornerRadius: (CGFloat)newRadius +- (void)setCornerRadius:(CGFloat)newRadius { - cornerRadius = newRadius; - [self setNeedsDisplay: YES]; - updateShadow = YES; + cornerRadius = newRadius; + [self setNeedsDisplay:YES]; + updateShadow = YES; } -- (void) setArrowPosition: (CGFloat)newPosition +- (void)setArrowPosition:(CGFloat)newPosition { - arrowPosition = newPosition; + arrowPosition = newPosition; - [self setNeedsDisplay: YES]; - updateShadow = YES; + [self setNeedsDisplay:YES]; + updateShadow = YES; } - - (id)initWithFrame:(NSRect)frame { - self = [super initWithFrame:frame]; - if (self) { - arrowPosition = 50; - cornerRadius = 10; - arrowSize = 15; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + arrowPosition = 50; + cornerRadius = 10; + arrowSize = 15; + } + return self; } - (void)drawRect:(NSRect)dirtyRect { - [[NSColor clearColor] set]; - [NSBezierPath fillRect: dirtyRect]; - - NSBezierPath *path = [NSBezierPath bezierPath]; - - NSRect bounds = [self.window convertRectToScreen: NSInsetRect( [self bounds], 2, 2 )]; - bounds.origin.x = floor( bounds.origin.x ); - bounds.origin.y = floor( bounds.origin.y ); - bounds.size.width = floor( bounds.size.width ); - bounds.size.height = floor( bounds.size.height ); - bounds = [self.window convertRectFromScreen: bounds]; - - const CGFloat right = bounds.size.width - arrowSize; - const CGFloat top = bounds.size.height - arrowSize; - const CGFloat left = arrowSize; - const CGFloat bottom = arrowSize; - - [path setLineJoinStyle:NSRoundLineJoinStyle]; - - [path moveToPoint: NSMakePoint( right - cornerRadius, top )]; - - if (arrowEdge == ArrowTopEdge) { - [path lineToPoint: NSMakePoint( arrowPosition + arrowSize, top )]; - [path lineToPoint: NSMakePoint( arrowPosition, top + arrowSize )]; - [path lineToPoint: NSMakePoint( arrowPosition - arrowSize, top )]; - } - - [path appendBezierPathWithArcFromPoint: NSMakePoint( left, top ) - toPoint: NSMakePoint( left, top - cornerRadius ) - radius: cornerRadius]; - - if (arrowEdge == ArrowLeftEdge) { - [path lineToPoint: NSMakePoint( left, bottom + arrowPosition + arrowSize )]; - [path lineToPoint: NSMakePoint( left - arrowSize, bottom + arrowPosition )]; - [path lineToPoint: NSMakePoint( left, bottom + arrowPosition - arrowSize )]; - } - - [path appendBezierPathWithArcFromPoint: NSMakePoint( left, bottom ) - toPoint: NSMakePoint( left + cornerRadius, bottom ) - radius: cornerRadius]; - - if (arrowEdge == ArrowBottomEdge) { - [path lineToPoint: NSMakePoint( arrowPosition - arrowSize, bottom )]; - [path lineToPoint: NSMakePoint( arrowPosition, bottom - arrowSize )]; - [path lineToPoint: NSMakePoint( arrowPosition + arrowSize, bottom )]; - } - - [path appendBezierPathWithArcFromPoint: NSMakePoint( right, bottom ) - toPoint: NSMakePoint( right, bottom + cornerRadius ) - radius: cornerRadius]; - - if (arrowEdge == ArrowRightEdge) { - [path lineToPoint: NSMakePoint( right, bottom + arrowPosition - arrowSize )]; - [path lineToPoint: NSMakePoint( right + arrowSize, bottom + arrowPosition )]; - [path lineToPoint: NSMakePoint( right, bottom + arrowPosition + arrowSize )]; - } - - [path appendBezierPathWithArcFromPoint: NSMakePoint( right, top ) - toPoint: NSMakePoint( right - cornerRadius, top ) - radius: cornerRadius]; - [path closePath]; - - [[NSColor colorWithDeviceWhite: 1.0 alpha: 0.4] set]; - [[NSColor colorWithDeviceWhite: 0.0 alpha: 0.75] setFill]; - - NSAffineTransform *transform = [NSAffineTransform transform]; - [transform translateXBy: bounds.origin.x yBy: bounds.origin.y]; - [transform concat]; - - [path setLineWidth: 2.0]; - [path fill]; - [path stroke]; - - if (updateShadow) { - [[self window] invalidateShadow]; - [[self window] update]; - updateShadow = NO; - } + [[NSColor clearColor] set]; + [NSBezierPath fillRect:dirtyRect]; + + NSBezierPath *path = [NSBezierPath bezierPath]; + + NSRect bounds = [self.window convertRectToScreen:NSInsetRect([self bounds], 2, 2)]; + bounds.origin.x = floor(bounds.origin.x); + bounds.origin.y = floor(bounds.origin.y); + bounds.size.width = floor(bounds.size.width); + bounds.size.height = floor(bounds.size.height); + bounds = [self.window convertRectFromScreen:bounds]; + + const CGFloat right = bounds.size.width - arrowSize; + const CGFloat top = bounds.size.height - arrowSize; + const CGFloat left = arrowSize; + const CGFloat bottom = arrowSize; + + [path setLineJoinStyle:NSRoundLineJoinStyle]; + + [path moveToPoint:NSMakePoint(right - cornerRadius, top)]; + + if (arrowEdge == ArrowTopEdge) { + [path lineToPoint:NSMakePoint(arrowPosition + arrowSize, top)]; + [path lineToPoint:NSMakePoint(arrowPosition, top + arrowSize)]; + [path lineToPoint:NSMakePoint(arrowPosition - arrowSize, top)]; + } + + [path appendBezierPathWithArcFromPoint:NSMakePoint(left, top) + toPoint:NSMakePoint(left, top - cornerRadius) + radius:cornerRadius]; + + if (arrowEdge == ArrowLeftEdge) { + [path lineToPoint:NSMakePoint(left, bottom + arrowPosition + arrowSize)]; + [path lineToPoint:NSMakePoint(left - arrowSize, bottom + arrowPosition)]; + [path lineToPoint:NSMakePoint(left, bottom + arrowPosition - arrowSize)]; + } + + [path appendBezierPathWithArcFromPoint:NSMakePoint(left, bottom) + toPoint:NSMakePoint(left + cornerRadius, bottom) + radius:cornerRadius]; + + if (arrowEdge == ArrowBottomEdge) { + [path lineToPoint:NSMakePoint(arrowPosition - arrowSize, bottom)]; + [path lineToPoint:NSMakePoint(arrowPosition, bottom - arrowSize)]; + [path lineToPoint:NSMakePoint(arrowPosition + arrowSize, bottom)]; + } + + [path appendBezierPathWithArcFromPoint:NSMakePoint(right, bottom) + toPoint:NSMakePoint(right, bottom + cornerRadius) + radius:cornerRadius]; + + if (arrowEdge == ArrowRightEdge) { + [path lineToPoint:NSMakePoint(right, bottom + arrowPosition - arrowSize)]; + [path lineToPoint:NSMakePoint(right + arrowSize, bottom + arrowPosition)]; + [path lineToPoint:NSMakePoint(right, bottom + arrowPosition + arrowSize)]; + } + + [path appendBezierPathWithArcFromPoint:NSMakePoint(right, top) + toPoint:NSMakePoint(right - cornerRadius, top) + radius:cornerRadius]; + [path closePath]; + + [[NSColor colorWithDeviceWhite:1.0 alpha:0.4] set]; + [[NSColor colorWithDeviceWhite:0.0 alpha:0.75] setFill]; + + NSAffineTransform *transform = [NSAffineTransform transform]; + [transform translateXBy:bounds.origin.x yBy:bounds.origin.y]; + [transform concat]; + + [path setLineWidth:2.0]; + [path fill]; + [path stroke]; + + if (updateShadow) { + [[self window] invalidateShadow]; + [[self window] update]; + updateShadow = NO; + } } @end |