diff options
-rw-r--r-- | Source/SPColorSelectorView.m | 112 |
1 files changed, 55 insertions, 57 deletions
diff --git a/Source/SPColorSelectorView.m b/Source/SPColorSelectorView.m index 9e80b79c..bf8c4563 100644 --- a/Source/SPColorSelectorView.m +++ b/Source/SPColorSelectorView.m @@ -79,8 +79,8 @@ enum trackingAreaIDs // ------------------------------------------------------------------------------- - (id)initWithFrame:(NSRect)frameRect { - if ( self = [super initWithFrame:frameRect] ) - { + if ((self = [super initWithFrame:frameRect])) { + selectedTag = kTrackingAreaNone; //we start out with no selection observer = nil; colorList = nil; @@ -89,12 +89,13 @@ enum trackingAreaIDs //set ourselves as observer of selectedTag (need to mark view dirty) [self addObserver:self forKeyPath:@"selectedTag" options:0 context:nil]; } + return self; } - (void)bind:(NSString *)binding toObject:(id)observableObject withKeyPath:(NSString *)keyPath options:(NSDictionary *)options { - if([binding isEqualToString:@"selectedTag"]) { + if ([binding isEqualToString:@"selectedTag"]) { [observableObject addObserver:self forKeyPath:keyPath options:0 context:nil]; observer = [observableObject retain]; observerKeyPath = [keyPath copy]; @@ -106,32 +107,22 @@ enum trackingAreaIDs - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if(object == self) { + if (object == self) { [self setNeedsDisplay:YES]; } - else if(object == observer) { - // You passed the binding identifier as the context when registering - // as an observer--use that to decide what to update... + else if (object == observer) { + // You passed the binding identifier as the context when registering + // as an observer--use that to decide what to update... id newValue = [observer valueForKeyPath:observerKeyPath]; - NSNumber *num = (NSNumber *)newValue; + NSNumber *num = (NSNumber *)newValue; [self setSelectedTag:[num integerValue]]; } } // ------------------------------------------------------------------------------- -// dealloc: -// ------------------------------------------------------------------------------- --(void)dealloc -{ - [trackingAreas release]; - [super dealloc]; -} - - -// ------------------------------------------------------------------------------- // Returns the rectangle corresponding to the tracking area. // ------------------------------------------------------------------------------- - (NSRect)rectForColorViewAtIndex:(NSInteger)index @@ -145,6 +136,7 @@ enum trackingAreaIDs CGFloat height = 16.0; NSRect returnRect = NSZeroRect; + switch (index) { case kTrackingAreaNone: @@ -152,33 +144,34 @@ enum trackingAreaIDs break; case kTrackingArea0: - returnRect = NSMakeRect(baseX+1*(width+marginR), baseY, width, height); + returnRect = NSMakeRect(baseX + 1 * (width + marginR), baseY, width, height); break; case kTrackingArea1: - returnRect = NSMakeRect(baseX+2*(width+marginR), baseY, width, height); + returnRect = NSMakeRect(baseX + 2 * (width + marginR), baseY, width, height); break; case kTrackingArea2: - returnRect = NSMakeRect(baseX+3*(width+marginR), baseY, width, height); + returnRect = NSMakeRect(baseX + 3 * (width + marginR), baseY, width, height); break; case kTrackingArea3: - returnRect = NSMakeRect(baseX+4*(width+marginR), baseY, width, height); + returnRect = NSMakeRect(baseX + 4 * (width + marginR), baseY, width, height); break; case kTrackingArea4: - returnRect = NSMakeRect(baseX+5*(width+marginR), baseY, width, height); + returnRect = NSMakeRect(baseX + 5 * (width + marginR), baseY, width, height); break; case kTrackingArea5: - returnRect = NSMakeRect(baseX+6*(width+marginR), baseY, width, height); + returnRect = NSMakeRect(baseX + 6 * (width + marginR), baseY, width, height); break; case kTrackingArea6: - returnRect = NSMakeRect(baseX+7*(width+marginR), baseY, width, height); + returnRect = NSMakeRect(baseX + 7 * (width + marginR), baseY, width, height); break; } + return returnRect; } @@ -193,8 +186,8 @@ enum trackingAreaIDs //find base color item NSColor *baseColor = (NSColor *)[colorList objectAtIndex:colorTag]; - if(!baseColor) - return nil; + + if (!baseColor) return nil; //create hightlight and shadow variants of color NSColor *shadowColor = [baseColor shadowWithLevel:0.22]; @@ -225,6 +218,7 @@ enum trackingAreaIDs NSTrackingActiveAlways; NSInteger index; + for (index = kTrackingAreaNone; index <= kTrackingArea6; index++) { // make tracking data (to be stored in NSTrackingArea's userInfo) so we can later determine which tracking area is focused on @@ -249,13 +243,13 @@ enum trackingAreaIDs // // Examine all the sub-view colored dots and color them with their appropriate colors. // ------------------------------------------------------------------------------- --(void)drawRect:(NSRect)rect +- (void)drawRect:(NSRect)rect { // see if we should be drawing any of the tags as already selected NSInteger currentlySelectedTag = [self selectedTag]; - NSInteger index; + for (index = kTrackingAreaNone; index <= kTrackingArea6; index++) { NSRect colorSquareRect = [self rectForColorViewAtIndex:index]; @@ -278,30 +272,30 @@ enum trackingAreaIDs } else if (index == hoverTag && trackEntered) { - // if we are tracking inside any tag, we want outline the color choice - NSBezierPath *highlightPath = [NSBezierPath bezierPathWithOvalInRect:NSInsetRect(colorSquareRect, -1.5, -1.5)]; - [[NSColor colorWithCalibratedWhite:0.94 alpha:1.0] set]; - [highlightPath fill]; - - [[NSColor colorWithCalibratedWhite:0.6 alpha:1.0] set]; - [highlightPath setLineWidth:1.0]; - [highlightPath stroke]; + // if we are tracking inside any tag, we want outline the color choice + NSBezierPath *highlightPath = [NSBezierPath bezierPathWithOvalInRect:NSInsetRect(colorSquareRect, -1.5, -1.5)]; + [[NSColor colorWithCalibratedWhite:0.94 alpha:1.0] set]; + [highlightPath fill]; + + [[NSColor colorWithCalibratedWhite:0.6 alpha:1.0] set]; + [highlightPath setLineWidth:1.0]; + [highlightPath stroke]; } - if(index == kTrackingAreaNone) { - + if (index == kTrackingAreaNone) { [[NSColor disabledControlTextColor] set]; - //draw an X + + // Draw an X NSBezierPath *left = [NSBezierPath bezierPath]; + [left setLineWidth:3.0]; [left setLineCapStyle:NSButtLineCapStyle]; - [left moveToPoint:NSMakePoint(colorSquareRect.origin.x+4.0, colorSquareRect.origin.y+4.0)]; - [left lineToPoint:NSMakePoint(colorSquareRect.origin.x+12.0, colorSquareRect.origin.y+12.0)]; - [left moveToPoint:NSMakePoint(colorSquareRect.origin.x+12.0, colorSquareRect.origin.y+4.0)]; - [left lineToPoint:NSMakePoint(colorSquareRect.origin.x+4.0, colorSquareRect.origin.y+12.0)]; + [left moveToPoint:NSMakePoint(colorSquareRect.origin.x + 4.0, colorSquareRect.origin.y + 4.0)]; + [left lineToPoint:NSMakePoint(colorSquareRect.origin.x + 12.0, colorSquareRect.origin.y + 12.0)]; + [left moveToPoint:NSMakePoint(colorSquareRect.origin.x + 12.0, colorSquareRect.origin.y + 4.0)]; + [left lineToPoint:NSMakePoint(colorSquareRect.origin.x + 4.0, colorSquareRect.origin.y + 12.0)]; [left stroke]; - } else { // draw the gradient dot @@ -310,7 +304,6 @@ enum trackingAreaIDs NSBezierPath *circlePath = [NSBezierPath bezierPathWithOvalInRect:dotRect]; [gradient drawInBezierPath:circlePath angle:-90.0]; - // draw a highlight // top edge outline @@ -342,10 +335,7 @@ enum trackingAreaIDs [gradient drawInBezierPath:circlePath angle:-90.0]; [gradient release]; } - - } - } @@ -360,8 +350,7 @@ enum trackingAreaIDs // ------------------------------------------------------------------------------- - (int)getTrackerIDFromDict:(NSDictionary*)dict { - id whichTracker = [dict objectForKey: kTrackerKey]; - return [whichTracker intValue]; + return [[dict objectForKey: kTrackerKey] intValue]; } // ------------------------------------------------------------------------------- @@ -406,31 +395,40 @@ enum trackingAreaIDs // figure out which tag color was clicked on at mouseUp time NSInteger index; + for (index = kTrackingAreaNone; index <= kTrackingArea6; index++) { NSRect tagRect = [self rectForColorViewAtIndex:index]; if (NSPointInRect(mousePoint, tagRect)) { - if(index == selectedTag) //ignore non-changes - return; + // Ignore non-changes + if (index == selectedTag) return; [self setSelectedTag:index]; - if(observer != nil) { + if (observer != nil) { [observer setValue:[NSNumber numberWithInteger:index] forKeyPath:observerKeyPath]; } - if(delegate != nil && [delegate respondsToSelector:@selector(colorSelectorDidChange:)]) { + if (delegate != nil && [delegate respondsToSelector:@selector(colorSelectorDidChange:)]) { [delegate colorSelectorDidChange:self]; } [self setNeedsDisplay:YES]; + return; } } } - - +// ------------------------------------------------------------------------------- +// dealloc: +// ------------------------------------------------------------------------------- +- (void)dealloc +{ + [trackingAreas release]; + + [super dealloc]; +} @end |