#import "ITTextFieldCell.h"
#import <ApplicationServices/ApplicationServices.h>
-#import "ITCoreGraphicsHacks.h"
-
-
-/*************************************************************************/
-#pragma mark -
-#pragma mark IMPLEMENTATION
-/*************************************************************************/
+#import <ITFoundation/ITFoundation.h>
@implementation ITTextFieldCell
-/*************************************************************************/
-#pragma mark -
-#pragma mark INITIALIZATION METHODS
-/*************************************************************************/
-
-- (id)initTextCell:(NSString *)string
-{
- if ( ( self = [super initTextCell:string] ) ) {
- castsShadow = NO;
- shadowElevation = 45.0;
- shadowAzimuth = 90.0;
- shadowAmbient = 0.15;
- shadowHeight = 1.00;
- shadowRadius = 4.00;
- shadowSaturation = 1.0;
- }
-
- return self;
+- (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;
- shadowElevation = 45.0;
- shadowAzimuth = 90.0;
- shadowAmbient = 0.15;
- shadowHeight = 1.00;
- shadowRadius = 4.00;
- shadowSaturation = 1.0;
- }
-
- 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;
}
-
-/*************************************************************************/
-#pragma mark -
-#pragma mark DRAWING METHODS
-/*************************************************************************/
-
-- (void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView
-{
- CGSGenericObj style = nil;
- CGShadowStyle shadow;
-
- if ( castsShadow ) {
-// Create the shadow style to use for drawing the string
- shadow.version = 0;
- shadow.elevation = shadowElevation;
- shadow.azimuth = shadowAzimuth;
- shadow.ambient = shadowAmbient;
- shadow.height = shadowHeight;
- shadow.radius = shadowRadius;
- shadow.saturation = shadowSaturation;
- style = CGStyleCreateShadow(&shadow);
-
- // Set the context for drawing the string
- [NSGraphicsContext saveGraphicsState];
- CGContextSetStyle([[NSGraphicsContext currentContext] graphicsPort], style);
- }
-
- // Draw the string
- [super drawWithFrame:rect inView:controlView];
-
-
- if ( castsShadow ) {
- // Restore the old context
- [NSGraphicsContext restoreGraphicsState];
- CGStyleRelease(style);
- }
+- (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];
+ }
}
-
-
-/*************************************************************************/
-#pragma mark -
-#pragma mark ACCESSOR METHODS
-/*************************************************************************/
-
-- (BOOL)castsShadow;
-{
- return castsShadow;
+- (BOOL)castsShadow {
+ return castsShadow;
}
-- (void)setCastsShadow:(BOOL)newSetting;
-{
- castsShadow = newSetting;
- [[self controlView] setNeedsDisplay:YES];
+- (void)setCastsShadow:(BOOL)newSetting {
+ castsShadow = newSetting;
+ [[self controlView] setNeedsDisplay:YES];
}
-- (float)shadowElevation;
-{
- return shadowElevation;
+- (float)shadowElevation {
+ return 45.0;
}
-- (void)setShadowElevation:(float)newElevation;
-{
- shadowElevation = newElevation;
- [[self controlView] setNeedsDisplay:YES];
+- (void)setShadowElevation:(float)newElevation {
+ ITDebugLog(@"setShadowElevation: on ITTextFieldCell objects does nothing.");
}
-- (float)shadowAzimuth;
-{
- return shadowAzimuth;
+- (float)shadowAzimuth {
+ return shadowAzimuth;
}
-- (void)setShadowAzimuth:(float)newAzimuth;
-{
- shadowAzimuth = newAzimuth;
- [[self controlView] setNeedsDisplay:YES];
+- (void)setShadowAzimuth:(float)newAzimuth {
+ shadowAzimuth = newAzimuth;
+ [[self controlView] setNeedsDisplay:YES];
}
-- (float)shadowAmbient;
-{
- return shadowAmbient;
+- (float)shadowAmbient {
+ return shadowAmbient;
}
-- (void)setShadowAmbient:(float)newAmbient;
-{
- shadowAmbient = newAmbient;
- [[self controlView] setNeedsDisplay:YES];
+- (void)setShadowAmbient:(float)newAmbient {
+ shadowAmbient = newAmbient;
+ [[self controlView] setNeedsDisplay:YES];
}
-- (float)shadowHeight;
-{
- return shadowHeight;
+- (float)shadowHeight {
+ return shadowHeight;
}
-- (void)setShadowHeight:(float)newHeight;
-{
- shadowHeight = newHeight;
- [[self controlView] setNeedsDisplay:YES];
+- (void)setShadowHeight:(float)newHeight {
+ shadowHeight = newHeight;
+ [[self controlView] setNeedsDisplay:YES];
}
-- (float)shadowRadius;
-{
- return shadowRadius;
+- (float)shadowRadius {
+ return shadowRadius;
}
-- (void)setShadowRadius:(float)newRadius;
-{
- shadowRadius = newRadius;
- [[self controlView] setNeedsDisplay:YES];
+- (void)setShadowRadius:(float)newRadius {
+ shadowRadius = newRadius;
+ [[self controlView] setNeedsDisplay:YES];
}
-- (float)shadowSaturation;
-{
- return shadowSaturation;
+- (float)shadowSaturation {
+ return 1.0;
}
-- (void)setShadowSaturation:(float)newSaturation;
-{
- shadowSaturation = newSaturation;
- [[self controlView] setNeedsDisplay:YES];
+- (void)setShadowSaturation:(float)newSaturation {
+ ITDebugLog(@"setShadowSaturation: on ITTextFieldCell objects does nothing.");
}
-
-@end
+@end
\ No newline at end of file