diff options
Diffstat (limited to 'Frameworks/BWToolkitFramework.framework/BWSplitViewInspectorAutosizingButtonCell.m')
-rw-r--r-- | Frameworks/BWToolkitFramework.framework/BWSplitViewInspectorAutosizingButtonCell.m | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/Frameworks/BWToolkitFramework.framework/BWSplitViewInspectorAutosizingButtonCell.m b/Frameworks/BWToolkitFramework.framework/BWSplitViewInspectorAutosizingButtonCell.m new file mode 100644 index 00000000..f40b187e --- /dev/null +++ b/Frameworks/BWToolkitFramework.framework/BWSplitViewInspectorAutosizingButtonCell.m @@ -0,0 +1,158 @@ +// +// BWSplitViewInspectorAutosizingButtonCell.m +// BWToolkit +// +// Created by Brandon Walkin (www.brandonwalkin.com) +// All code is provided under the New BSD license. +// + +#import "BWSplitViewInspectorAutosizingButtonCell.h" +#import "BWSplitViewInspectorAutosizingView.h" +#import "NSColor+BWAdditions.h" +#import "NSImage+BWAdditions.h" +#import "NSApplication+BWAdditions.h" +#import "IBColor.h" + +static NSColor *insetColor, *borderColor, *viewColor, *lineColor, *insetLineColor; +static NSImage *blueArrowStart, *blueArrowEnd, *redArrowStart, *redArrowEnd, *redArrowFill; +static float interiorInset = 7.0; + +@implementation BWSplitViewInspectorAutosizingButtonCell + ++ (void)initialize +{ + insetColor = [IBColor customViewLightBorderColor]; + borderColor = [IBColor customViewDarkBorderColor]; + + // Note: These two colors are reversed in IBColor in 10.5 + if ([NSApplication isOnLeopard]) + viewColor = [IBColor containerCustomViewBackgroundColor]; + else + viewColor = [IBColor childlessCustomViewBackgroundColor]; + + lineColor = [[NSColor colorWithCalibratedRed:124.0/255.0 green:139.0/255.0 blue:159.0/255.0 alpha:1.0] retain]; + insetLineColor = [[[NSColor whiteColor] colorWithAlphaComponent:0.19] retain]; + + NSBundle *bundle = [NSBundle bundleForClass:[BWSplitViewInspectorAutosizingButtonCell class]]; + blueArrowStart = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"Inspector-SplitViewArrowBlueLeft.tif"]]; + blueArrowEnd = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"Inspector-SplitViewArrowBlueRight.tif"]]; + redArrowStart = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"Inspector-SplitViewArrowRedLeft.tif"]]; + redArrowFill = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"Inspector-SplitViewArrowRedFill.tif"]]; + redArrowEnd = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"Inspector-SplitViewArrowRedRight.tif"]]; +} + +- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView *)controlView +{ + [viewColor set]; + NSRectFillUsingOperation(frame,NSCompositeSourceOver); + + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:frame inView:controlView horizontal:NO flip:NO]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:frame inView:controlView horizontal:NO flip:YES]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:frame inView:controlView horizontal:YES flip:YES]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:frame inView:controlView horizontal:YES flip:NO]; + + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:frame inView:controlView horizontal:NO flip:NO]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:frame inView:controlView horizontal:NO flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:frame inView:controlView horizontal:YES flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:frame inView:controlView horizontal:YES flip:NO]; +} + +- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView +{ + BOOL isVertical = [(BWSplitViewInspectorAutosizingView *)[controlView superview] isVertical]; + NSImage *blueArrowStartCap, *blueArrowEndCap, *redArrowStartCap, *redArrowFillSlice, *redArrowEndCap; + + if (isVertical) + { + blueArrowStartCap = blueArrowStart; + blueArrowEndCap = blueArrowEnd; + redArrowStartCap = redArrowStart; + redArrowFillSlice = redArrowFill; + redArrowEndCap = redArrowEnd; + + [blueArrowStartCap setFlipped:YES]; + [blueArrowEndCap setFlipped:YES]; + } + else + { + blueArrowStartCap = [blueArrowStart rotateImage90DegreesClockwise:NO]; + blueArrowEndCap = [blueArrowEnd rotateImage90DegreesClockwise:NO]; + redArrowStartCap = [redArrowEnd rotateImage90DegreesClockwise:NO]; + redArrowFillSlice = [redArrowFill rotateImage90DegreesClockwise:NO]; + redArrowEndCap = [redArrowStart rotateImage90DegreesClockwise:NO]; + } + + float arrowHeight = [blueArrowStartCap size].height; + float arrowWidth = [blueArrowStartCap size].width; + + NSRect arrowRect = NSZeroRect; + + if (isVertical) + arrowRect = NSMakeRect(interiorInset, roundf(cellFrame.size.height / 2 - 0.5 * arrowHeight), roundf(cellFrame.size.width - interiorInset * 2), arrowHeight); + else + arrowRect = NSMakeRect(roundf(cellFrame.size.width / 2 - 0.5 * arrowWidth), interiorInset - 1, arrowWidth, roundf(cellFrame.size.height - (interiorInset - 1) * 2)); + + if ([self intValue] == 0) + { + NSPoint startArrowOrigin = arrowRect.origin; + NSPoint endArrowOrigin; + + if (isVertical) + endArrowOrigin = NSMakePoint(NSMaxX(arrowRect) - arrowWidth, arrowRect.origin.y); + else + endArrowOrigin = NSMakePoint(arrowRect.origin.x,NSMaxY(arrowRect) - arrowHeight); + + [blueArrowStartCap drawAtPoint:startArrowOrigin fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; + [blueArrowEndCap drawAtPoint:endArrowOrigin fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; + + NSPoint startPoint, endPoint; + + if (isVertical) + { + startPoint = NSMakePoint(arrowRect.origin.x + arrowWidth, arrowRect.origin.y + floorf(arrowHeight / 2) + 0.5); + endPoint = NSMakePoint(arrowRect.origin.x + arrowRect.size.width - arrowWidth, arrowRect.origin.y + floorf(arrowHeight / 2) + 0.5); + } + else + { + startPoint = NSMakePoint(arrowRect.origin.x + floorf(arrowWidth / 2) + 0.5, arrowRect.origin.y + arrowHeight); + endPoint = NSMakePoint(arrowRect.origin.x + floorf(arrowWidth / 2) + 0.5, NSMaxY(arrowRect) - arrowHeight); + } + + CGFloat array[2] = {3.0, 1.0}; + + // Draw dashed line + NSBezierPath *dashedLine = [NSBezierPath bezierPath]; + [dashedLine setLineWidth:1.0]; + [dashedLine setLineDash:array count:2 phase:3.0]; + [dashedLine moveToPoint:startPoint]; + [dashedLine lineToPoint:endPoint]; + [lineColor set]; + [dashedLine stroke]; + + // Draw white dashed inset line + NSBezierPath *dashedInsetLine = [NSBezierPath bezierPath]; + [dashedInsetLine setLineWidth:1.0]; + [dashedInsetLine setLineDash:array count:2 phase:3.0]; + if (isVertical) + { + [dashedInsetLine moveToPoint:NSMakePoint(startPoint.x, startPoint.y + 1)]; + [dashedInsetLine lineToPoint:NSMakePoint(endPoint.x, endPoint.y + 1)]; + } + else + { + [dashedInsetLine moveToPoint:NSMakePoint(startPoint.x + 1, startPoint.y)]; + [dashedInsetLine lineToPoint:NSMakePoint(endPoint.x + 1, endPoint.y)]; + } + [insetLineColor set]; + [dashedInsetLine stroke]; + } + else + { + if (isVertical) + NSDrawThreePartImage(arrowRect, redArrowStartCap, redArrowFillSlice, redArrowEndCap, NO, NSCompositeSourceOver, 1, YES); + else + NSDrawThreePartImage(arrowRect, redArrowStartCap, redArrowFillSlice, redArrowEndCap, YES, NSCompositeSourceOver, 1, YES); + } +} + +@end |