diff options
Diffstat (limited to 'Frameworks/BWToolkitFramework.framework/BWCustomView.m')
-rw-r--r-- | Frameworks/BWToolkitFramework.framework/BWCustomView.m | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/Frameworks/BWToolkitFramework.framework/BWCustomView.m b/Frameworks/BWToolkitFramework.framework/BWCustomView.m new file mode 100644 index 00000000..dff80f57 --- /dev/null +++ b/Frameworks/BWToolkitFramework.framework/BWCustomView.m @@ -0,0 +1,186 @@ +// +// BWGradientSplitViewSubview.m +// BWToolkit +// +// Created by Brandon Walkin (www.brandonwalkin.com) +// All code is provided under the New BSD license. +// + +#import "BWCustomView.h" +#import "NSColor+BWAdditions.h" +#import "NSWindow+BWAdditions.h" +#import "NSApplication+BWAdditions.h" +#import "IBColor.h" + +@interface BWCustomView (BWCVPrivate) +- (void)drawTextInRect:(NSRect)rect; +- (NSColor *)containerCustomViewBackgroundColor; +- (NSColor *)childlessCustomViewBackgroundColor; +- (NSColor *)customViewDarkTexturedBorderColor; +- (NSColor *)customViewDarkBorderColor; +- (NSColor *)customViewLightBorderColor; +@end + +@implementation BWCustomView + +- (void)drawRect:(NSRect)rect +{ + rect = self.bounds; + + NSColor *insetColor = [self customViewLightBorderColor]; + NSColor *borderColor; + + if ([[self window] isTextured]) + borderColor = [self customViewDarkTexturedBorderColor]; + else + borderColor = [self customViewDarkBorderColor]; + + // Note: These two colors are reversed in IBColor in 10.5 + if (self.subviews.count == 0) + { + if ([NSApplication isOnLeopard]) + [[self containerCustomViewBackgroundColor] set]; + else + [[self childlessCustomViewBackgroundColor] set]; + NSRectFillUsingOperation(rect,NSCompositeSourceOver); + } + else + { + if ([NSApplication isOnLeopard]) + [[self childlessCustomViewBackgroundColor] set]; + else + [[self containerCustomViewBackgroundColor] set]; + NSRectFillUsingOperation(rect,NSCompositeSourceOver); + } + + if ([[self superview] isKindOfClass:NSClassFromString(@"BWSplitView")] && [[self superview] subviews].count > 1) + { + isOnItsOwn = NO; + NSArray *subviews = [[self superview] subviews]; + + if ([subviews objectAtIndex:0] == self) + { + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + + if ([(NSSplitView *)[self superview] isVertical]) + { + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + [insetColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + } + else + { + [insetColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + } + + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + } + else if ([subviews lastObject] == self) + { + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + + if ([(NSSplitView *)[self superview] isVertical]) + { + [insetColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + } + else + { + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [insetColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + } + + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + } + else + { + if ([(NSSplitView *)[self superview] isVertical]) + { + [insetColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [insetColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + } + else + { + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + [insetColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + [insetColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + } + } + } + else + { + isOnItsOwn = YES; + + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + [insetColor drawPixelThickLineAtPosition:1 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:NO]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:NO flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:YES]; + [borderColor drawPixelThickLineAtPosition:0 withInset:0 inRect:rect inView:self horizontal:YES flip:NO]; + } + + if (rect.size.height > 16) + [self drawTextInRect:rect]; +} + +- (void)drawTextInRect:(NSRect)rect +{ + NSString *text; + + if (isOnItsOwn) + text = [NSString stringWithFormat:@"%d x %d pt",(int)rect.size.width,(int)rect.size.height]; + else if ([(NSSplitView *)[self superview] isVertical]) + text = [NSString stringWithFormat:@"%d pt",(int)rect.size.width]; + else + text = [NSString stringWithFormat:@"%d pt",(int)rect.size.height]; + + if (![self.className isEqualToString:@"NSView"]) + text = self.className; + + NSMutableDictionary *attributes = [[[NSMutableDictionary alloc] init] autorelease]; + [attributes setObject:[NSColor whiteColor] forKey:NSForegroundColorAttributeName]; + [attributes setObject:[NSFont boldSystemFontOfSize:12] forKey:NSFontAttributeName]; + + NSShadow *shadow = [[[NSShadow alloc] init] autorelease]; + [shadow setShadowOffset:NSMakeSize(0,-1)]; + [shadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.4]]; + [attributes setObject:shadow forKey:NSShadowAttributeName]; + + NSMutableAttributedString *string = [[[NSMutableAttributedString alloc] initWithString:text attributes:attributes] autorelease]; + + NSRect boundingRect = [string boundingRectWithSize:rect.size options:0]; + + NSPoint rectCenter; + rectCenter.x = rect.size.width / 2; + rectCenter.y = rect.size.height / 2; + + NSPoint drawPoint = rectCenter; + drawPoint.x -= boundingRect.size.width / 2; + drawPoint.y -= boundingRect.size.height / 2; + + drawPoint.x = roundf(drawPoint.x); + drawPoint.y = roundf(drawPoint.y); + + [string drawAtPoint:drawPoint]; +} + +@end
\ No newline at end of file |