aboutsummaryrefslogtreecommitdiffstats
path: root/Frameworks/BWToolkitFramework.framework/BWTokenAttachmentCell.m
diff options
context:
space:
mode:
Diffstat (limited to 'Frameworks/BWToolkitFramework.framework/BWTokenAttachmentCell.m')
-rw-r--r--Frameworks/BWToolkitFramework.framework/BWTokenAttachmentCell.m226
1 files changed, 226 insertions, 0 deletions
diff --git a/Frameworks/BWToolkitFramework.framework/BWTokenAttachmentCell.m b/Frameworks/BWToolkitFramework.framework/BWTokenAttachmentCell.m
new file mode 100644
index 00000000..1a3a8870
--- /dev/null
+++ b/Frameworks/BWToolkitFramework.framework/BWTokenAttachmentCell.m
@@ -0,0 +1,226 @@
+//
+// BWTokenAttachmentCell.m
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import "BWTokenAttachmentCell.h"
+
+static NSGradient *blueGradient, *blueStrokeGradient, *blueInsetGradient, *highlightedBlueGradient, *highlightedBlueStrokeGradient, *highlightedBlueInsetGradient, *arrowGradient;
+static NSShadow *textShadow;
+static NSColor *highlightedArrowColor;
+
+static float arrowWidth = 7.0;
+static float arrowHeight = 6.0;
+
+@interface NSTokenAttachmentCell (BWTACPrivate)
+- (NSDictionary *)_textAttributes;
+@end
+
+@interface BWTokenAttachmentCell (BWTACPrivate)
++ (NSImage *)arrowInHighlightedState:(BOOL)isHighlighted;
+@end
+
+@implementation BWTokenAttachmentCell
+
++ (void)initialize
+{
+ NSColor *blueTopColor = [NSColor colorWithCalibratedRed:217.0/255.0 green:228.0/255.0 blue:254.0/255.0 alpha:1];
+ NSColor *blueBottomColor = [NSColor colorWithCalibratedRed:195.0/255.0 green:212.0/255.0 blue:250.0/255.0 alpha:1];
+ blueGradient = [[NSGradient alloc] initWithStartingColor:blueTopColor endingColor:blueBottomColor];
+
+ NSColor *blueStrokeTopColor = [NSColor colorWithCalibratedRed:164.0/255.0 green:184.0/255.0 blue:230.0/255.0 alpha:1];
+ NSColor *blueStrokeBottomColor = [NSColor colorWithCalibratedRed:122.0/255.0 green:128.0/255.0 blue:199.0/255.0 alpha:1];
+ blueStrokeGradient = [[NSGradient alloc] initWithStartingColor:blueStrokeTopColor endingColor:blueStrokeBottomColor];
+
+ NSColor *blueInsetTopColor = [NSColor colorWithCalibratedRed:226.0/255.0 green:234.0/255.0 blue:254.0/255.0 alpha:1];
+ NSColor *blueInsetBottomColor = [NSColor colorWithCalibratedRed:206.0/255.0 green:221.0/255.0 blue:250.0/255.0 alpha:1];
+ blueInsetGradient = [[NSGradient alloc] initWithStartingColor:blueInsetTopColor endingColor:blueInsetBottomColor];
+
+ NSColor *highlightedBlueTopColor = [NSColor colorWithCalibratedRed:80.0/255.0 green:127.0/255.0 blue:251.0/255.0 alpha:1];
+ NSColor *highlightedBlueBottomColor = [NSColor colorWithCalibratedRed:65.0/255.0 green:107.0/255.0 blue:236.0/255.0 alpha:1];
+ highlightedBlueGradient = [[NSGradient alloc] initWithStartingColor:highlightedBlueTopColor endingColor:highlightedBlueBottomColor];
+
+ NSColor *highlightedBlueStrokeTopColor = [NSColor colorWithCalibratedRed:51.0/255.0 green:95.0/255.0 blue:248.0/255.0 alpha:1];
+ NSColor *highlightedBlueStrokeBottomColor = [NSColor colorWithCalibratedRed:42.0/255.0 green:47.0/255.0 blue:233.0/255.0 alpha:1];
+ highlightedBlueStrokeGradient = [[NSGradient alloc] initWithStartingColor:highlightedBlueStrokeTopColor endingColor:highlightedBlueStrokeBottomColor];
+
+ NSColor *highlightedBlueInsetTopColor = [NSColor colorWithCalibratedRed:92.0/255.0 green:137.0/255.0 blue:251.0/255.0 alpha:1];
+ NSColor *highlightedBlueInsetBottomColor = [NSColor colorWithCalibratedRed:76.0/255.0 green:116.0/255.0 blue:236.0/255.0 alpha:1];
+ highlightedBlueInsetGradient = [[NSGradient alloc] initWithStartingColor:highlightedBlueInsetTopColor endingColor:highlightedBlueInsetBottomColor];
+
+ NSColor *arrowGradientTopColor = [NSColor colorWithCalibratedRed:111.0/255.0 green:140.0/255.0 blue:222.0/255.0 alpha:1];
+ NSColor *arrowGradientBottomColor = [NSColor colorWithCalibratedRed:58.0/255.0 green:91.0/255.0 blue:203.0/255.0 alpha:1];
+ arrowGradient = [[NSGradient alloc] initWithStartingColor:arrowGradientTopColor endingColor:arrowGradientBottomColor];
+
+ textShadow = [[NSShadow alloc] init];
+ [textShadow setShadowOffset:NSMakeSize(0,1 / [[NSScreen mainScreen] userSpaceScaleFactor])];
+ [textShadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.3]];
+
+ highlightedArrowColor = [[NSColor colorWithCalibratedRed:246.0/255.0 green:249.0/255.0 blue:254.0/255.0 alpha:1] retain];
+}
+
+- (NSImage *)arrowInHighlightedState:(BOOL)isHighlighted
+{
+ float scaleFactor = [[NSScreen mainScreen] userSpaceScaleFactor];
+
+ NSImage *arrowImage = [[[NSImage alloc] init] autorelease];
+ [arrowImage setSize:NSMakeSize(arrowWidth, arrowHeight)];
+ [arrowImage setFlipped:YES];
+
+ [arrowImage lockFocus];
+
+ NSPoint p1 = NSMakePoint(0,0);
+ NSPoint p2 = NSMakePoint(arrowWidth,0);
+ NSPoint p3 = NSMakePoint(arrowWidth / 2, arrowHeight - 1 / scaleFactor);
+
+ NSBezierPath *triangle = [NSBezierPath bezierPath];
+ [triangle moveToPoint:p1];
+ [triangle lineToPoint:p2];
+ [triangle lineToPoint:p3];
+ [triangle lineToPoint:p1];
+
+ p1 = NSMakePoint(0, 1 / scaleFactor);
+ p2 = NSMakePoint(arrowWidth, 1 / scaleFactor);
+ p3 = NSMakePoint(arrowWidth / 2, arrowHeight);
+
+ NSBezierPath *triangle2 = [NSBezierPath bezierPath];
+ [triangle2 moveToPoint:p1];
+ [triangle2 lineToPoint:p2];
+ [triangle2 lineToPoint:p3];
+ [triangle2 lineToPoint:p1];
+
+ if (isHighlighted)
+ {
+ // Draw shadow
+ [[[NSColor blackColor] colorWithAlphaComponent:0.2] set];
+ [triangle fill];
+
+ // Draw arrow
+ [highlightedArrowColor set];
+ [triangle2 fill];
+ }
+ else
+ {
+ // Draw shadow
+ [[[NSColor whiteColor] colorWithAlphaComponent:0.75] set];
+ [triangle2 fill];
+
+ // Draw arrow
+ [arrowGradient drawInBezierPath:triangle angle:90];
+ }
+
+ [arrowImage unlockFocus];
+
+ return arrowImage;
+}
+
+- (void)drawTokenWithFrame:(NSRect)aRect inView:(NSView *)aView;
+{
+ float scaleFactor = [[NSScreen mainScreen] userSpaceScaleFactor];
+
+ NSRect drawingRect = [self drawingRectForBounds:aRect];
+ NSRect insetRect = NSInsetRect(drawingRect, 1 / scaleFactor, 1 / scaleFactor);
+ NSRect insetRect2 = NSInsetRect(insetRect, 1 / scaleFactor, 1 / scaleFactor);
+
+ if (scaleFactor < 0.99 || scaleFactor > 1.01)
+ {
+ drawingRect = [aView centerScanRect:drawingRect];
+ insetRect = [aView centerScanRect:insetRect];
+ insetRect2 = [aView centerScanRect:insetRect2];
+ }
+
+ NSBezierPath *drawingPath = [NSBezierPath bezierPathWithRoundedRect:drawingRect xRadius:0.5*drawingRect.size.height yRadius:0.5*drawingRect.size.height];
+ NSBezierPath *insetPath = [NSBezierPath bezierPathWithRoundedRect:insetRect xRadius:0.5*insetRect.size.height yRadius:0.5*insetRect.size.height];
+ NSBezierPath *insetPath2 = [NSBezierPath bezierPathWithRoundedRect:insetRect2 xRadius:0.5*insetRect2.size.height yRadius:0.5*insetRect2.size.height];
+
+ if (_tacFlags._selected == NO)
+ {
+ [blueStrokeGradient drawInBezierPath:drawingPath angle:90];
+ [blueInsetGradient drawInBezierPath:insetPath angle:90];
+ [blueGradient drawInBezierPath:insetPath2 angle:90];
+ }
+ else
+ {
+ [highlightedBlueStrokeGradient drawInBezierPath:drawingPath angle:90];
+ [highlightedBlueInsetGradient drawInBezierPath:insetPath angle:90];
+ [highlightedBlueGradient drawInBezierPath:insetPath2 angle:90];
+ }
+
+ // Darken on mouse over
+ CGFloat red, blue, green, alpha;
+ [[self tokenBackgroundColor] getRed:&red green:&green blue:&blue alpha:&alpha];
+
+ if (red > 0.427 && red < 0.428)
+ {
+ [[NSColor colorWithCalibratedRed:32.0/255.0 green:59.0/255.0 blue:167.0/255.0 alpha:0.1] set];
+
+ [NSGraphicsContext saveGraphicsState];
+ [[NSGraphicsContext currentContext] setCompositingOperation:NSCompositePlusDarker];
+ [drawingPath fill];
+ [NSGraphicsContext restoreGraphicsState];
+ }
+
+}
+
+- (int)interiorBackgroundStyle
+{
+ // If the token isn't selected, tell NSCell to draw a white shadow below the text
+ if (_tacFlags._selected == NO)
+ return NSBackgroundStyleRaised;
+
+ return [super interiorBackgroundStyle];
+}
+
+- (NSDictionary *)_textAttributes
+{
+ if (_tacFlags._selected)
+ {
+ NSMutableDictionary *attributes = [[[NSMutableDictionary alloc] init] autorelease];
+ [attributes addEntriesFromDictionary:[super _textAttributes]];
+ [attributes setObject:textShadow forKey:NSShadowAttributeName];
+
+ return attributes;
+ }
+
+ return [super _textAttributes];
+}
+
+- (id)pullDownImage
+{
+ NSImage *arrowImage;
+
+ if (_tacFlags._selected)
+ arrowImage = [self arrowInHighlightedState:YES];
+ else
+ arrowImage = [self arrowInHighlightedState:NO];
+
+ return arrowImage;
+}
+
+- (NSRect)pullDownRectForBounds:(NSRect)bounds
+{
+ NSRect pullDownRect = [super pullDownRectForBounds:bounds];
+
+ pullDownRect.origin.x--;
+
+ if (!_tacFlags._selected)
+ pullDownRect.origin.y++;
+
+ float scaleFactor = [[NSScreen mainScreen] userSpaceScaleFactor];
+
+ if (scaleFactor < 0.99 || scaleFactor > 1.01)
+ pullDownRect = [[self controlView] centerScanRect:pullDownRect];
+
+ return pullDownRect;
+}
+
+// --- For testing menu arrows ---
+//- (BOOL)_hasMenu
+//{
+// return YES;
+//}
+
+@end