forked from ttscoff/nv
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ETTransparentButtonCell.m
122 lines (88 loc) · 3.47 KB
/
ETTransparentButtonCell.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//
// ETTransparentButtonCell.m
// BWToolkit
//
// Created by Brandon Walkin (www.brandonwalkin.com)
// All code is provided under the New BSD license.
//
#import "ETTransparentButtonCell.h"
static NSImage *buttonLeftN, *buttonFillN, *buttonRightN, *buttonLeftP, *buttonFillP, *buttonRightP;
static NSColor *disabledColor, *enabledColor;
@interface NSCell (BWTBCPrivate)
- (NSDictionary *)_textAttributes;
@end
@interface ETTransparentButtonCell (BWTBCPrivate)
- (NSColor *)interiorColor;
@end
@implementation ETTransparentButtonCell
+ (void)initialize;
{
NSBundle *bundle = [NSBundle bundleForClass:[ETTransparentButtonCell class]];
buttonLeftN = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentButtonLeftN.tiff"]];
buttonFillN = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentButtonFillN.tiff"]];
buttonRightN = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentButtonRightN.tiff"]];
buttonLeftP = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentButtonLeftP.tiff"]];
buttonFillP = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentButtonFillP.tiff"]];
buttonRightP = [[NSImage alloc] initWithContentsOfFile:[bundle pathForImageResource:@"TransparentButtonRightP.tiff"]];
enabledColor = [[NSColor whiteColor] retain];
disabledColor = [[NSColor colorWithCalibratedWhite:0.6 alpha:1] retain];
}
- (void)drawBezelWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
cellFrame.size.height = buttonFillN.size.height;
if ([self isHighlighted])
NSDrawThreePartImage(cellFrame, buttonLeftP, buttonFillP, buttonRightP, NO, NSCompositeSourceOver, 1, YES);
else
NSDrawThreePartImage(cellFrame, buttonLeftN, buttonFillN, buttonRightN, NO, NSCompositeSourceOver, 1, YES);
}
- (void)drawImage:(NSImage *)image withFrame:(NSRect)frame inView:(NSView *)controlView
{
frame.origin.y -= 2;
if ([[image name] isEqualToString:@"NSActionTemplate"])
[image setSize:NSMakeSize(10,10)];
NSImage *newImage = image;
if ([image isTemplate])
newImage = [self bwTintedImage:image WithColor:[self interiorColor]];
[super drawImage:newImage withFrame:frame inView:controlView];
}
- (NSRect)drawTitle:(NSAttributedString *)title withFrame:(NSRect)frame inView:(NSView *)controlView
{
frame.origin.y -= 4;
return [super drawTitle:title withFrame:frame inView:controlView];
}
- (NSDictionary *)_textAttributes
{
NSMutableDictionary *attributes = [[[NSMutableDictionary alloc] init] autorelease];
[attributes addEntriesFromDictionary:[super _textAttributes]];
[attributes setObject:[NSFont systemFontOfSize:11] forKey:NSFontAttributeName];
[attributes setObject:[self interiorColor] forKey:NSForegroundColorAttributeName];
return attributes;
}
- (NSColor *)interiorColor
{
NSColor *interiorColor;
if ([self isEnabled])
interiorColor = enabledColor;
else
interiorColor = disabledColor;
return interiorColor;
}
- (NSControlSize)controlSize
{
return NSSmallControlSize;
}
- (void)setControlSize:(NSControlSize)size
{
}
- (NSImage *)bwTintedImage:(NSImage *)anImage WithColor:(NSColor *)tint
{
NSSize size = [anImage size];
NSRect imageBounds = NSMakeRect(0, 0, size.width, size.height);
NSImage *copiedImage = [anImage copy];
[copiedImage lockFocus];
[tint set];
NSRectFillUsingOperation(imageBounds, NSCompositeSourceAtop);
[copiedImage unlockFocus];
return [copiedImage autorelease];
}
@end