// // TitleBarView.m // 2Term // // Created by Kelvin Sherlock on 11/26/2011. // Copyright (c) 2011 __MyCompanyName__. All rights reserved. // #import "TitleBarView.h" #import @implementation TitleBarView @synthesize label = _label; @synthesize backgroundColor = _backgroundColor; @synthesize textColor = _textColor; -(id)initWithFrame:(NSRect)frameRect { if ((self = [super initWithFrame: frameRect])) { [self setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; [self awakeFromNib]; } return self; } -(void)awakeFromNib { _leftImage = [[NSImage imageNamed: @"titlebar-left"] retain]; _rightImage = [[NSImage imageNamed: @"titlebar-right"] retain]; _centerImage = [[NSImage imageNamed: @"titlebar-center"] retain]; [_label setStringValue: @""]; [_label setBackgroundColor: [NSColor clearColor]]; [_label setTextColor: [NSColor whiteColor]]; } -(void)dealloc { [_backgroundColor release]; [_textColor release]; [_leftImage release]; [_rightImage release]; [_centerImage release]; [_label release]; [super dealloc]; } -(void)setBackgroundColor:(NSColor *)backgroundColor { NSColor *tmp; if (_backgroundColor == backgroundColor) return; [_backgroundColor release]; _backgroundColor = [backgroundColor retain]; _dark = YES; tmp = [_backgroundColor colorUsingColorSpaceName: NSCalibratedWhiteColorSpace]; if (tmp) { if ([tmp whiteComponent] > 0.5) _dark = NO; } [self updateTitle]; } -(void)setTextColor: (NSColor *)textColor { if (_textColor == textColor) return; [_textColor release]; _textColor = [textColor retain]; [_label setTextColor: _textColor]; //[self updateTitle]; } -(void)setTitle:(NSString *)title { [_label setStringValue: title]; [self updateTitle]; } -(NSString *)title { return [_label stringValue]; } -(void)updateTitle { NSAttributedString *as; NSDictionary *attr; NSShadow *shadow; NSMutableParagraphStyle *ps; NSString *title; title = [_label stringValue]; if (![title length]) { return; } //[_label setTextColor: _dark ? [NSColor whiteColor] : [NSColor blackColor]]; shadow = [NSShadow new]; [shadow setShadowBlurRadius: 1.0]; [shadow setShadowColor: _dark ? [NSColor blackColor] : [NSColor whiteColor]]; [shadow setShadowOffset: _dark ? NSMakeSize(0.0, 1.0) : NSMakeSize(0.0, -1.0)]; ps = [NSMutableParagraphStyle new]; [ps setAlignment: NSCenterTextAlignment]; [ps setLineBreakMode: NSLineBreakByTruncatingMiddle]; attr = [NSDictionary dictionaryWithObjectsAndKeys: shadow, NSShadowAttributeName, ps, NSParagraphStyleAttributeName, nil]; as = [[NSAttributedString alloc] initWithString: title attributes: attr]; [_label setAttributedStringValue: as]; [as release]; [ps release]; [shadow release]; } -(BOOL)isFlipped { return YES; } #if 0 -(void)drawRect:(NSRect)dirtyRect { NSRect bounds; NSRect rect; bounds = [self bounds]; rect = NSMakeRect(0, 0, bounds.size.width, bounds.size.height); NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect: rect xRadius: 4.0 yRadius: 4.0]; [path addClip]; [_backgroundColor setFill]; NSRectFill(dirtyRect); rect = NSMakeRect(0, 0, bounds.size.width, 24.0); rect = NSInsetRect(rect, 1, 0); NSDrawThreePartImage(rect, _leftImage, _centerImage, _rightImage, NO, NSCompositeSourceOver /*NSCompositeDestinationOver*/, 1.0, YES); } #endif -(void)fadeIn { /* NSDictionary *dict; NSViewAnimation *anim; dict = [NSDictionary dictionaryWithObjectsAndKeys: self, NSViewAnimationTargetKey, NSViewAnimationFadeInEffect, NSViewAnimationEffectKey, nil]; anim = [NSViewAnimation new]; [anim setViewAnimations: [NSArray arrayWithObject: dict]]; [anim setDuration: 1.0]; [anim setAnimationCurve: NSAnimationEaseIn]; [anim startAnimation]; [anim release]; */ [self setContentFilters: [NSArray array]]; CABasicAnimation *anim; CALayer *layer; layer = [self layer]; [layer setOpacity: 1.0]; anim = [CABasicAnimation animationWithKeyPath: @"opacity"]; [anim setFromValue: [NSNumber numberWithDouble: 0.0]]; [anim setToValue: [NSNumber numberWithDouble: 1.0]]; [anim setDuration: 0.5]; [anim setRemovedOnCompletion: NO]; [layer addAnimation: anim forKey: @"opacity"]; } -(void)fadeOut { /* NSDictionary *dict; NSViewAnimation *anim; dict = [NSDictionary dictionaryWithObjectsAndKeys: self, NSViewAnimationTargetKey, NSViewAnimationFadeOutEffect, NSViewAnimationEffectKey, nil]; anim = [NSViewAnimation new]; [anim setViewAnimations: [NSArray arrayWithObject: dict]]; [anim setDuration: 1.0]; [anim setAnimationCurve: NSAnimationEaseIn]; [anim startAnimation]; [anim release]; */ CABasicAnimation *anim; CALayer *layer; layer = [self layer]; [layer setOpacity: 0.0]; anim = [CABasicAnimation animationWithKeyPath: @"opacity"]; [anim setFromValue: [NSNumber numberWithDouble: 1.0]]; [anim setToValue: [NSNumber numberWithDouble: 0.0]]; [anim setDuration: 0.5]; [anim setRemovedOnCompletion: NO]; [layer addAnimation: anim forKey: @"opacity"]; } @end