Adding ITTextFieldCell to the kit, for use in matrices, etc.
[ITKit.git] / ITTextFieldCell.m
diff --git a/ITTextFieldCell.m b/ITTextFieldCell.m
new file mode 100755 (executable)
index 0000000..6d2b86a
--- /dev/null
@@ -0,0 +1,171 @@
+#import "ITTextFieldCell.h"
+#import <CoreGraphics/CoreGraphics.h>
+#import "ITCoreGraphicsHacks.h"
+
+
+/*************************************************************************/
+#pragma mark -
+#pragma mark IMPLEMENTATION
+/*************************************************************************/
+
+@implementation ITTextFieldCell
+
+/*************************************************************************/
+#pragma mark -
+#pragma mark INITIALIZATION METHODS
+/*************************************************************************/
+
+- (id)init
+{
+    if ( ( self = [super init] ) ) {
+        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;
+        shadowElevation  = 45.0;
+        shadowAzimuth    = 90.0;
+        shadowAmbient    = 0.15;
+        shadowHeight     = 1.00;
+        shadowRadius     = 4.00;
+        shadowSaturation = 1.0;
+    }
+    
+    return self;
+}
+
+
+/*************************************************************************/
+#pragma mark -
+#pragma mark DRAWING METHODS
+/*************************************************************************/
+
+- (void)drawInteriorWithFrame:(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 drawInteriorWithFrame:rect inView:controlView];
+    
+
+    if ( castsShadow ) { 
+        // Restore the old context
+        [NSGraphicsContext restoreGraphicsState];
+        CGStyleRelease(style);
+    }
+}
+
+
+
+/*************************************************************************/
+#pragma mark -
+#pragma mark ACCESSOR METHODS
+/*************************************************************************/
+
+- (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