1/****************************************************************************** 2 * $Id: InfoTabButtonCell.m 13251 2012-03-13 02:52:11Z livings124 $ 3 * 4 * Copyright (c) 2007-2012 Transmission authors and contributors 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 * and/or sell copies of the Software, and to permit persons to whom the 11 * Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 *****************************************************************************/ 24 25#import "InfoTabButtonCell.h" 26 27@implementation InfoTabButtonCell 28 29- (void) awakeFromNib 30{ 31 [(NSMatrix *)[self controlView] setToolTip: [self title] forCell: self]; 32 33 NSNotificationCenter * nc = [NSNotificationCenter defaultCenter]; 34 [nc addObserver: self selector: @selector(updateControlTint:) 35 name: NSControlTintDidChangeNotification object: NSApp]; 36 37 fSelected = NO; 38 39 //expects the icon to currently be set as the image 40 fIcon = [[self image] retain]; 41 [self setSelectedTab: fSelected]; 42} 43 44- (void) dealloc 45{ 46 [[NSNotificationCenter defaultCenter] removeObserver: self]; 47 48 [fIcon release]; 49 [super dealloc]; 50} 51 52- (void) setSelectedTab: (BOOL) selected 53{ 54 fSelected = selected; 55 56 NSInteger row, col; 57 [(NSMatrix *)[self controlView] getRow: &row column: &col ofCell: self]; 58 NSRect tabRect = [(NSMatrix *)[self controlView] cellFrameAtRow: row column: col]; 59 tabRect.origin.x = 0.0; 60 tabRect.origin.y = 0.0; 61 62 NSImage * tabImage = [[NSImage alloc] initWithSize: tabRect.size]; 63 64 [tabImage lockFocus]; 65 66 NSGradient * gradient; 67 if (fSelected) 68 { 69 NSColor * lightColor = [NSColor colorForControlTint: [NSColor currentControlTint]]; 70 NSColor * darkColor = [lightColor blendedColorWithFraction: 0.2 ofColor: [NSColor blackColor]]; 71 gradient = [[NSGradient alloc] initWithStartingColor: lightColor endingColor: darkColor]; 72 } 73 else 74 { 75 NSColor * lightColor = [NSColor colorWithCalibratedRed: 245.0/255.0 green: 245.0/255.0 blue: 245.0/255.0 alpha: 1.0]; 76 NSColor * darkColor = [NSColor colorWithCalibratedRed: 215.0/255.0 green: 215.0/255.0 blue: 215.0/255.0 alpha: 1.0]; 77 gradient = [[NSGradient alloc] initWithStartingColor: lightColor endingColor: darkColor]; 78 } 79 80 [[NSColor grayColor] set]; 81 NSRectFill(NSMakeRect(0.0, 0.0, NSWidth(tabRect), 1.0)); 82 NSRectFill(NSMakeRect(0.0, NSHeight(tabRect) - 1.0, NSWidth(tabRect), 1.0)); 83 NSRectFill(NSMakeRect(NSWidth(tabRect) - 1.0, 1.0, NSWidth(tabRect) - 1.0, NSHeight(tabRect) - 2.0)); 84 85 tabRect = NSMakeRect(0.0, 1.0, NSWidth(tabRect) - 1.0, NSHeight(tabRect) - 2.0); 86 87 [gradient drawInRect: tabRect angle: 270.0]; 88 [gradient release]; 89 90 if (fIcon) 91 { 92 const NSSize iconSize = [fIcon size]; 93 94 const NSRect iconRect = NSMakeRect(NSMinX(tabRect) + floor((NSWidth(tabRect) - iconSize.width) * 0.5), 95 NSMinY(tabRect) + floor((NSHeight(tabRect) - iconSize.height) * 0.5), 96 iconSize.width, iconSize.height); 97 98 [fIcon drawInRect: iconRect fromRect: NSZeroRect operation: NSCompositeSourceOver fraction: 1.0]; 99 } 100 101 [tabImage unlockFocus]; 102 103 [self setImage: tabImage]; 104 [tabImage release]; 105} 106 107- (void) updateControlTint: (NSNotification *) notification 108{ 109 if (fSelected) 110 [self setSelectedTab: YES]; 111} 112 113@end 114