X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/3269e9dfcbe058cef9e1da01ab45a93f07ee2be1..HEAD:/ITImageCell.m diff --git a/ITImageCell.m b/ITImageCell.m old mode 100755 new mode 100644 index d8f38b9..a5d6852 --- a/ITImageCell.m +++ b/ITImageCell.m @@ -1,166 +1,136 @@ #import "ITImageCell.h" #import -#import "ITCoreGraphicsHacks.h" - +#import @implementation ITImageCell +- (id)initImageCell:(NSImage *)image { + if ((self = [super initImageCell:image])) { + _scalesSmoothly = YES; + castsShadow = NO; + shadowAzimuth = 90.0; + shadowAmbient = 0.15; + shadowHeight = 1.00; + shadowRadius = 4.00; + } + return self; +} -- (id)initImageCell:(NSImage *)image -{ - if ( (self = [super initImageCell:image]) ) { - _scalesSmoothly = YES; - castsShadow = NO; - shadowElevation = 45.0; - shadowAzimuth = 90.0; - shadowAmbient = 0.15; - shadowHeight = 1.00; - shadowRadius = 4.00; - shadowSaturation = 1.0; - } - NSLog(@"foo"); - return self; -} - -- (id)init -{ - if ( (self = [super init]) ) { - _scalesSmoothly = YES; - castsShadow = NO; - shadowElevation = 45.0; - shadowAzimuth = 90.0; - shadowAmbient = 0.15; - shadowHeight = 1.00; - shadowRadius = 4.00; - shadowSaturation = 1.0; - } - return self; -} - -- (void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView -{ - CGSGenericObj style = nil; - CGShadowStyle shadow; - - if ( _scalesSmoothly || castsShadow ) { - [NSGraphicsContext saveGraphicsState]; - } - - if ( _scalesSmoothly ) { - CGContextSetInterpolationQuality([[NSGraphicsContext currentContext] graphicsPort], kCGInterpolationHigh); - } - - 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); - CGContextSetStyle([[NSGraphicsContext currentContext] graphicsPort], style); - } - - [super drawWithFrame:rect inView:controlView]; - - if ( _scalesSmoothly || castsShadow ) { - [NSGraphicsContext restoreGraphicsState]; - } - - if ( castsShadow ) { - CGStyleRelease(style); - } +- (id)init { + if ((self = [super init])) { + _scalesSmoothly = YES; + castsShadow = NO; + shadowAzimuth = 90.0; + shadowAmbient = 0.15; // In my tests, an alpha component of 0.85 perfectly duplicates the old private API's results, resulting in identical shadows. Therefore, the ambient can remain 0.15. + shadowHeight = 1.00; + shadowRadius = 4.00; + } + return self; } -- (BOOL)scalesSmoothly -{ - return _scalesSmoothly; +- (void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView { + NSShadow *shadow; + + if (_scalesSmoothly || castsShadow) { + [NSGraphicsContext saveGraphicsState]; + } + + if (_scalesSmoothly) { + [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh]; + [[NSGraphicsContext currentContext] setShouldAntialias:YES]; + } + + 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]; + + [shadow set]; + } + + [super drawWithFrame:rect inView:controlView]; + + if (_scalesSmoothly || castsShadow) { + [NSGraphicsContext restoreGraphicsState]; + } + + if (castsShadow) { + [shadow release]; + } } -- (void)setScalesSmoothly:(BOOL)flag -{ - _scalesSmoothly = flag; - [[self controlView] setNeedsDisplay:YES]; +- (BOOL)scalesSmoothly { + return _scalesSmoothly; } -- (BOOL)castsShadow; -{ - return castsShadow; +- (void)setScalesSmoothly:(BOOL)flag { + _scalesSmoothly = flag; + [[self controlView] setNeedsDisplay:YES]; } -- (void)setCastsShadow:(BOOL)newSetting; -{ - castsShadow = newSetting; - [[self controlView] setNeedsDisplay:YES]; +- (BOOL)castsShadow { + return castsShadow; } -- (float)shadowElevation; -{ - return shadowElevation; +- (void)setCastsShadow:(BOOL)newSetting { + castsShadow = newSetting; + [[self controlView] setNeedsDisplay:YES]; } -- (void)setShadowElevation:(float)newElevation; -{ - shadowElevation = newElevation; - [[self controlView] setNeedsDisplay:YES]; +- (float)shadowElevation { + return 45.0; } -- (float)shadowAzimuth; -{ - return shadowAzimuth; +- (void)setShadowElevation:(float)newElevation { + ITDebugLog(@"setShadowElevation: on ITImageCell objects does nothing."); } -- (void)setShadowAzimuth:(float)newAzimuth; -{ - shadowAzimuth = newAzimuth; - [[self controlView] setNeedsDisplay:YES]; +- (float)shadowAzimuth { + return shadowAzimuth; } -- (float)shadowAmbient; -{ - return shadowAmbient; +- (void)setShadowAzimuth:(float)newAzimuth { + shadowAzimuth = newAzimuth; + [[self controlView] setNeedsDisplay:YES]; } -- (void)setShadowAmbient:(float)newAmbient; -{ - shadowAmbient = newAmbient; - [[self controlView] setNeedsDisplay:YES]; +- (float)shadowAmbient { + return shadowAmbient; } -- (float)shadowHeight; -{ - return shadowHeight; +- (void)setShadowAmbient:(float)newAmbient { + shadowAmbient = newAmbient; + [[self controlView] setNeedsDisplay:YES]; } -- (void)setShadowHeight:(float)newHeight; -{ - shadowHeight = newHeight; - [[self controlView] setNeedsDisplay:YES]; +- (float)shadowHeight { + return shadowHeight; } -- (float)shadowRadius; -{ - return shadowRadius; +- (void)setShadowHeight:(float)newHeight { + shadowHeight = newHeight; + [[self controlView] setNeedsDisplay:YES]; } -- (void)setShadowRadius:(float)newRadius; -{ - shadowRadius = newRadius; - [[self controlView] setNeedsDisplay:YES]; +- (float)shadowRadius { + return shadowRadius; } -- (float)shadowSaturation; -{ - return shadowSaturation; +- (void)setShadowRadius:(float)newRadius { + shadowRadius = newRadius; + [[self controlView] setNeedsDisplay:YES]; } -- (void)setShadowSaturation:(float)newSaturation; -{ - shadowSaturation = newSaturation; - [[self controlView] setNeedsDisplay:YES]; +- (float)shadowSaturation { + return 1.0; } +- (void)setShadowSaturation:(float)newSaturation { + ITDebugLog(@"setShadowSaturation: on ITImageCell objects does nothing."); +} -@end +@end \ No newline at end of file