X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/f3f68377429d64947ab0b32f925eb3632bd7e94b..abdb0712ef9e62ff570497eb0e7072eb92b23722:/ITImageCell.m diff --git a/ITImageCell.m b/ITImageCell.m old mode 100755 new mode 100644 index cefbcff..1ca761d --- a/ITImageCell.m +++ b/ITImageCell.m @@ -1,46 +1,145 @@ #import "ITImageCell.h" - +#import "ITCoreGraphicsHacks.h" +#import @implementation ITImageCell +- (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; + } + return self; +} -- (id)initImageCell:(NSImage *)image -{ - if ( (self = [super initImageCell:image]) ) { - _scalesSmoothly = YES; - } - 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); + [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh]; + [[NSGraphicsContext currentContext] setShouldAntialias:YES]; + } + + 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 (castsShadow) { + CGStyleRelease(style); + } + + if (_scalesSmoothly || castsShadow) { + [NSGraphicsContext restoreGraphicsState]; + } +} +- (BOOL)scalesSmoothly { + return _scalesSmoothly; +} -- (void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView -{ - NSImageInterpolation interpolation; +- (void)setScalesSmoothly:(BOOL)flag { + _scalesSmoothly = flag; + [[self controlView] setNeedsDisplay:YES]; +} - if ( _scalesSmoothly ) { - interpolation = [[NSGraphicsContext currentContext] imageInterpolation]; - [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh]; - } - - [super drawWithFrame:rect inView:controlView]; +- (BOOL)castsShadow { + return castsShadow; +} - if ( _scalesSmoothly ) { - [[NSGraphicsContext currentContext] setImageInterpolation:interpolation]; - } +- (void)setCastsShadow:(BOOL)newSetting { + castsShadow = newSetting; + [[self controlView] setNeedsDisplay:YES]; } -- (BOOL)scalesSmoothly -{ - return _scalesSmoothly; +- (float)shadowElevation { + return shadowElevation; } -- (void)setScalesSmoothly:(BOOL)flag -{ - _scalesSmoothly = flag; - [[self controlView] setNeedsDisplay:YES]; +- (void)setShadowElevation:(float)newElevation { + shadowElevation = newElevation; + [[self controlView] setNeedsDisplay:YES]; } +- (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 shadowSaturation; +} + +- (void)setShadowSaturation:(float)newSaturation { + shadowSaturation = newSaturation; + [[self controlView] setNeedsDisplay:YES]; +} -@end +@end \ No newline at end of file