transmission 2.51 update
[tomato.git] / release / src / router / transmission / macosx / InfoTabButtonCell.m
blob3d37acc3347d8a4701516c6c9ce32d4faf8adeb3
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  *****************************************************************************/
25 #import "InfoTabButtonCell.h"
27 @implementation InfoTabButtonCell
29 - (void) awakeFromNib
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];
44 - (void) dealloc
46     [[NSNotificationCenter defaultCenter] removeObserver: self];
47     
48     [fIcon release];
49     [super dealloc];
52 - (void) setSelectedTab: (BOOL) selected
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];
107 - (void) updateControlTint: (NSNotification *) notification
109     if (fSelected)
110         [self setSelectedTab: YES];
113 @end