-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathITTextFieldCell.m
116 lines (92 loc) · 2.68 KB
/
ITTextFieldCell.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
#import "ITTextFieldCell.h"
#import <ApplicationServices/ApplicationServices.h>
#import <ITFoundation/ITFoundation.h>
@implementation ITTextFieldCell
- (id)initTextCell:(NSString *)string {
if ((self = [super initTextCell:string])) {
castsShadow = NO;
shadowAzimuth = 90.0;
shadowAmbient = 0.0;
shadowHeight = 1.00;
shadowRadius = 4.00;
}
return self;
}
- (id)initWithCoder:(NSCoder *)coder {
if ((self = [super initWithCoder:coder])) {
castsShadow = NO;
shadowAzimuth = 90.0;
shadowAmbient = 0.0; // Unlike ITImageCell, even an alpha component of 1.0 is ligher than the old private API's results. There's not much we can do about it as we can't go "blacker" than black.
shadowHeight = 1.00;
shadowRadius = 4.00;
}
return self;
}
- (void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView {
NSShadow *shadow;
if (castsShadow) {
CGFloat height = ((2.0*tan((M_PI/360.0)*(shadowAzimuth-180.0)))*shadowHeight)/(1.0+pow(tan((M_PI/360.0)*(shadowAzimuth-180.0)),2.0));
CGFloat width = sqrt(pow(shadowHeight, 2.0)-pow(height, 2.0));
shadow = [[NSShadow alloc] init];
[shadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:(1.0 - shadowAmbient)]];
[shadow setShadowOffset:NSMakeSize(width, height)];
[shadow setShadowBlurRadius:shadowRadius];
[NSGraphicsContext saveGraphicsState];
[shadow set];
}
// Draw the string
[super drawWithFrame:rect inView:controlView];
if (castsShadow) {
// Restore the old context
[NSGraphicsContext restoreGraphicsState];
[shadow release];
}
}
- (BOOL)castsShadow {
return castsShadow;
}
- (void)setCastsShadow:(BOOL)newSetting {
castsShadow = newSetting;
[[self controlView] setNeedsDisplay:YES];
}
- (float)shadowElevation {
return 45.0;
}
- (void)setShadowElevation:(float)newElevation {
ITDebugLog(@"setShadowElevation: on ITTextFieldCell objects does nothing.");
}
- (float)shadowAzimuth {
return shadowAzimuth;
}
- (void)setShadowAzimuth:(float)newAzimuth {
shadowAzimuth = newAzimuth;
[[self controlView] setNeedsDisplay:YES];
}
- (float)shadowAmbient {
return shadowAmbient;
}
- (void)setShadowAmbient:(float)newAmbient {
shadowAmbient = newAmbient;
[[self controlView] setNeedsDisplay:YES];
}
- (float)shadowHeight {
return shadowHeight;
}
- (void)setShadowHeight:(float)newHeight {
shadowHeight = newHeight;
[[self controlView] setNeedsDisplay:YES];
}
- (float)shadowRadius {
return shadowRadius;
}
- (void)setShadowRadius:(float)newRadius {
shadowRadius = newRadius;
[[self controlView] setNeedsDisplay:YES];
}
- (float)shadowSaturation {
return 1.0;
}
- (void)setShadowSaturation:(float)newSaturation {
ITDebugLog(@"setShadowSaturation: on ITTextFieldCell objects does nothing.");
}
@end