#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)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)setScalesSmoothly:(BOOL)flag { _scalesSmoothly = flag; [[self controlView] setNeedsDisplay:YES]; } - (BOOL)castsShadow { return castsShadow; } - (void)setCastsShadow:(BOOL)newSetting { castsShadow = newSetting; [[self controlView] setNeedsDisplay:YES]; } - (float)shadowElevation { return shadowElevation; } - (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