Clean up of NSStepper and NSStepperCell.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@23224 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2006-08-08 23:14:14 +00:00
parent 6bbbc9a062
commit dc4a427c47
6 changed files with 346 additions and 316 deletions

View file

@ -1,3 +1,19 @@
2006-08-09 Fred Kiefer <FredKiefer@gmx.de>
* Headers/AppKit/NSStepper.h
* Headers/AppKit/NSStepperCell.h: Removed private method declarations.
* Source/NSStepper.m: Moved code from mouseDown: method to the cell
method trackMouse:...untilMouseUp:. Also moved the _increment and
_decrement methods to the cell class.
* Source/NSStepperCell.m: Rewrote mouse tracking to be more
similar to NSCell's implementation and not use any direct
drawing. Do not use hard coded colour values in the drawing
methods, implemented keyed encoding and cleaned up the rest of the
class.
* Source/NSCell.m (trackMouse:...untilMouseUp:): Moved
initialisation of periodCount out of the loop. In the old version
the value stayed always 0.
2006-08-07 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSCell.m (-setBezeled:, -setBordered:): Switch border off,

View file

@ -31,8 +31,6 @@
#include <AppKit/NSControl.h>
@class NSEvent;
@interface NSStepper : NSControl
{
// Attributes
@ -44,18 +42,11 @@
- (double) increment;
- (void) setIncrement: (double)increment;
- (BOOL)autorepeat;
- (void)setAutorepeat: (BOOL)autorepeat;
- (BOOL)valueWraps;
- (void)setValueWraps: (BOOL)valueWraps;
- (void)mouseDown:(NSEvent*)event;
@end
@interface NSStepper (Private)
- (void)_increment;
- (void)_decrement;
@end
#endif // _GNUstep_H_NSStepper

View file

@ -29,8 +29,7 @@
#include <AppKit/NSActionCell.h>
@interface NSStepperCell : NSActionCell <NSCoding>
@interface NSStepperCell : NSActionCell
{
// Think of the following ones as of two BOOL ivars
#define _autorepeat _cell.subclass_bool_one
@ -50,29 +49,11 @@
- (double)increment;
- (void)setIncrement: (double)increment;
- (BOOL)autorepeat;
- (void)setAutorepeat: (BOOL)autorepeat;
- (BOOL)valueWraps;
- (void)setValueWraps: (BOOL)valueWraps;
//
// NSCoding protocol
//
- (void)encodeWithCoder: (NSCoder *)aCoder;
- initWithCoder: (NSCoder *)aDecoder;
@end
@interface NSStepperCell (Private)
- (void) highlight: (BOOL) highlight
upButton: (BOOL) upButton
withFrame: (NSRect) frame
inView: (NSView*) controlView;
- (NSRect)upButtonRectWithFrame: (NSRect) frame;
- (NSRect)downButtonRectWithFrame: (NSRect) frame;
- (void)_drawText: (NSRect)aRect;
@end
#endif // _GNUstep_H_NSStepperCell

View file

@ -1522,6 +1522,7 @@ static NSColor *shadowCol;
NSPoint last_point = point;
BOOL done;
BOOL mouseWentUp;
unsigned periodCount = 0;
NSDebugLLog(@"NSCell", @"cell start tracking in rect %@ initial point %f %f",
NSStringFromRect(cellFrame), point.x, point.y);
@ -1551,7 +1552,6 @@ static NSColor *shadowCol;
{
NSEventType eventType;
BOOL pointIsInCell;
unsigned periodCount = 0;
theEvent = [theApp nextEventMatchingMask: event_mask
untilDate: nil

View file

@ -29,7 +29,6 @@
#include <Foundation/NSException.h>
#include "AppKit/NSStepper.h"
#include "AppKit/NSControl.h"
#include "AppKit/NSColor.h"
#include "AppKit/NSEvent.h"
#include "AppKit/NSWindow.h"
#include "AppKit/NSApplication.h"
@ -71,11 +70,6 @@ id _nsstepperCellClass = nil;
// Instance methods
//
- (BOOL) acceptsFirstMouse: (NSEvent *)theEvent
{
return YES;
}
//
// Determining the first responder
//
@ -97,6 +91,8 @@ id _nsstepperCellClass = nil;
- (void) keyDown: (NSEvent*)theEvent
{
// FIXME
[super keyDown: theEvent];
}
- (double) maxValue
@ -129,8 +125,6 @@ id _nsstepperCellClass = nil;
[_cell setIncrement: increment];
}
- (BOOL)autorepeat
{
return [_cell autorepeat];
@ -151,199 +145,4 @@ id _nsstepperCellClass = nil;
[_cell setValueWraps: valueWraps];
}
- (void) mouseDown: (NSEvent *)event
{
NSPoint point = [event locationInWindow];
NSRect upRect;
NSRect downRect;
NSRect rect;
BOOL isDirectionUp;
BOOL autorepeat = [_cell autorepeat];
if ([_cell isEnabled] == NO)
return;
if ([event type] != NSLeftMouseDown)
return;
upRect = [_cell upButtonRectWithFrame: _bounds];
downRect = [_cell downButtonRectWithFrame: _bounds];
point = [self convertPoint: point fromView: nil];
if (NSMouseInRect(point, upRect, NO))
{
isDirectionUp = YES;
rect = upRect;
}
else if (NSMouseInRect(point, downRect, NO))
{
isDirectionUp = NO;
rect = downRect;
}
else
{
return;
}
[self lockFocus];
{
BOOL overButton = YES;
int ignore = 3;
unsigned int eventMask = NSLeftMouseUpMask
| NSLeftMouseDraggedMask
| NSPeriodicMask;
NSDate *farAway = [NSDate distantFuture];
[_window flushWindow];
[_cell highlight: YES
upButton: isDirectionUp
withFrame: _bounds
inView: self];
[_window _captureMouse: self];
if (autorepeat)
{
[NSEvent startPeriodicEventsAfterDelay: 0.5 withPeriod: 0.025];
if (isDirectionUp)
[self _increment];
else
[self _decrement];
[_cell drawWithFrame:_bounds
inView:self];
[_window flushWindow];
}
else
[_window flushWindow];
event = [NSApp nextEventMatchingMask: eventMask
untilDate: farAway
inMode: NSEventTrackingRunLoopMode
dequeue: YES];
while ([event type] != NSLeftMouseUp)
{
if ([event type] == NSPeriodic)
{
ignore ++;
if (ignore == 4) ignore = 0;
if (ignore == 0)
{
if (isDirectionUp)
[self _increment];
else
[self _decrement];
[_cell drawWithFrame:_bounds
inView:self];
[_window flushWindow];
}
}
else if (NSMouseInRect(point, rect, NO) != overButton)
{
overButton = !overButton;
if (overButton && autorepeat)
{
[NSEvent startPeriodicEventsAfterDelay: 0.5
withPeriod: 0.025];
ignore = 3;
}
else
{
[NSEvent stopPeriodicEvents];
}
[_cell highlight: overButton
upButton: isDirectionUp
withFrame: _bounds
inView: self];
[_window flushWindow];
}
event = [NSApp nextEventMatchingMask: eventMask
untilDate: farAway
inMode: NSEventTrackingRunLoopMode
dequeue: YES];
point = [self convertPoint: [event locationInWindow]
fromView: nil];
}
if (overButton && autorepeat)
[NSEvent stopPeriodicEvents];
if (overButton && !autorepeat)
{
if (isDirectionUp)
[self _increment];
else
[self _decrement];
[_cell drawWithFrame:_bounds
inView:self];
}
[_cell highlight: NO
upButton: isDirectionUp
withFrame: _bounds
inView: self];
[_window flushWindow];
[_window _releaseMouse: self];
}
[self unlockFocus];
}
- (void)_increment
{
double newValue;
double maxValue = [_cell maxValue];
double minValue = [_cell minValue];
double increment = [_cell increment];
newValue = [_cell doubleValue] + increment;
if ([_cell valueWraps])
{
if (newValue > maxValue)
[_cell setDoubleValue:
newValue - maxValue + minValue - 1];
else if (newValue < minValue)
[_cell setDoubleValue:
newValue + maxValue - minValue + 1];
else
[_cell setDoubleValue: newValue];
}
else
{
if (newValue > maxValue)
[_cell setDoubleValue: maxValue];
else if (newValue < minValue)
[_cell setDoubleValue: minValue];
else
[_cell setDoubleValue: newValue];
}
[self sendAction: [self action] to: [self target]];
}
- (void)_decrement
{
double newValue;
double maxValue = [_cell maxValue];
double minValue = [_cell minValue];
double increment = [_cell increment];
newValue = [_cell doubleValue] - increment;
if ([_cell valueWraps])
{
if (newValue > maxValue)
[_cell setDoubleValue:
newValue - maxValue + minValue - 1];
else if (newValue < minValue)
[_cell setDoubleValue:
newValue + maxValue - minValue + 1];
else
[_cell setDoubleValue: newValue];
}
else
{
if (newValue > maxValue)
[_cell setDoubleValue: maxValue];
else if (newValue < minValue)
[_cell setDoubleValue: minValue];
else
[_cell setDoubleValue: newValue];
}
[self sendAction: [self action] to: [self target]];
}
@end

View file

@ -4,6 +4,8 @@
Author: Pierre-Yves Rivaille <pyrivail@ens-lyon.fr>
Date: 2001
Author: Fred Kiefer <FredKiefer@gmx.de>
Date: August 2006
This file is part of the GNUstep GUI Library.
@ -24,17 +26,35 @@
*/
#include "config.h"
#include "AppKit/NSGraphicsContext.h"
#include "AppKit/NSApplication.h"
#include "AppKit/NSColor.h"
#include "AppKit/DPSOperators.h"
#include "AppKit/PSOperators.h"
#include "AppKit/NSFont.h"
#include "AppKit/NSControl.h"
#include "AppKit/NSEvent.h"
#include "AppKit/NSGraphics.h"
#include "AppKit/NSGraphicsContext.h"
#include "AppKit/NSStepperCell.h"
#include "AppKit/NSText.h"
#include "AppKit/NSWindow.h"
#include "AppKit/PSOperators.h"
#include "GNUstepGUI/GSDrawFunctions.h"
// Hard coded values for button sizes
#define STEPPER_WIDTH 15
#define STEPPER_HEIGHT 11
@interface NSStepperCell (Private)
- (void) _increment;
- (void) _decrement;
- (void) setHighlighted: (BOOL)highlight
upButton: (BOOL)upButton
withFrame: (NSRect)frame
inView: (NSView*)controlView;
- (NSRect) upButtonRectWithFrame: (NSRect)frame;
- (NSRect) downButtonRectWithFrame: (NSRect)frame;
@end
@implementation NSStepperCell
+ (void) initialize
{
if (self == [NSStepperCell class])
@ -43,21 +63,30 @@
}
}
+ (BOOL) prefersTrackingUntilMouseUp
{
return YES;
}
//
// Initialization
//
- (id) init
{
self = [super init];
[self setIntValue: 0];
[super setAlignment: NSRightTextAlignment];
[super setWraps: NO];
[self setAlignment: NSRightTextAlignment];
[self setWraps: NO];
_autorepeat = YES;
_valueWraps = YES;
_maxValue = 59;
_minValue = 0;
_increment = 1;
highlightUp = NO;
highlightDown = NO;
return self;
}
@ -91,8 +120,6 @@
_increment = increment;
}
- (BOOL)autorepeat
{
return _autorepeat;
@ -113,18 +140,6 @@
_valueWraps = valueWraps;
}
- (void) dealloc
{
[super dealloc];
}
- (id) copyWithZone: (NSZone*)zone
{
NSStepperCell *c = [super copyWithZone: zone];
return c;
}
static inline NSRect DrawLightButton(NSRect border, NSRect clip)
{
/*
@ -151,21 +166,22 @@ static inline NSRect DrawLightButton(NSRect border, NSRect clip)
}
}
static inline void DrawUpButton(NSRect aRect)
static inline void DrawUpButton(NSRect aRect)
{
NSRect unHighlightRect = DrawLightButton(aRect, NSZeroRect);
[[NSColor controlBackgroundColor] set];
NSRectFill(unHighlightRect);
PSsetgray(NSDarkGray);
PSsetlinewidth(1.0);
[[NSColor controlShadowColor] set];
PSmoveto(NSMaxX(aRect) - 5, NSMinY(aRect) + 3);
PSlineto(NSMaxX(aRect) - 8, NSMinY(aRect) + 9);
PSstroke();
PSsetgray(NSBlack);
[[NSColor controlDarkShadowColor] set];
PSmoveto(NSMaxX(aRect) - 8, NSMinY(aRect) + 9);
PSlineto(NSMaxX(aRect) - 11, NSMinY(aRect) + 4);
PSstroke();
PSsetgray(NSWhite);
[[NSColor controlLightHighlightColor] set];
PSmoveto(NSMaxX(aRect) - 11, NSMinY(aRect) + 3);
PSlineto(NSMaxX(aRect) - 5, NSMinY(aRect) + 3);
PSstroke();
@ -177,15 +193,16 @@ static inline void HighlightUpButton(NSRect aRect)
[[NSColor selectedControlColor] set];
NSRectFill(highlightRect);
PSsetgray(NSLightGray);
PSsetlinewidth(1.0);
[[NSColor controlHighlightColor] set];
PSmoveto(NSMaxX(aRect) - 5, NSMinY(aRect) + 3);
PSlineto(NSMaxX(aRect) - 8, NSMinY(aRect) + 9);
PSstroke();
PSsetgray(NSBlack);
[[NSColor controlDarkShadowColor] set];
PSmoveto(NSMaxX(aRect) - 8, NSMinY(aRect) + 9);
PSlineto(NSMaxX(aRect) - 11, NSMinY(aRect) + 4);
PSstroke();
PSsetgray(NSLightGray);
[[NSColor controlHighlightColor] set];
PSmoveto(NSMaxX(aRect) - 11, NSMinY(aRect) + 3);
PSlineto(NSMaxX(aRect) - 5, NSMinY(aRect) + 3);
PSstroke();
@ -198,15 +215,15 @@ static inline void DrawDownButton(NSRect aRect)
NSRectFill(unHighlightRect);
PSsetlinewidth(1.0);
PSsetgray(NSDarkGray);
[[NSColor controlShadowColor] set];
PSmoveto(NSMinX(aRect) + 4, NSMaxY(aRect) - 3);
PSlineto(NSMinX(aRect) + 7, NSMaxY(aRect) - 8);
PSstroke();
PSsetgray(NSWhite);
[[NSColor controlLightHighlightColor] set];
PSmoveto(NSMinX(aRect) + 7, NSMaxY(aRect) - 8);
PSlineto(NSMinX(aRect) + 10, NSMaxY(aRect) - 3);
PSstroke();
PSsetgray(NSBlack);
[[NSColor controlDarkShadowColor] set];
PSmoveto(NSMinX(aRect) + 10, NSMaxY(aRect) - 2);
PSlineto(NSMinX(aRect) + 4, NSMaxY(aRect) - 2);
PSstroke();
@ -219,15 +236,15 @@ static inline void HighlightDownButton(NSRect aRect)
NSRectFill(highlightRect);
PSsetlinewidth(1.0);
PSsetgray(NSLightGray);
[[NSColor controlHighlightColor] set];
PSmoveto(NSMinX(aRect) + 4, NSMaxY(aRect) - 3);
PSlineto(NSMinX(aRect) + 7, NSMaxY(aRect) - 8);
PSstroke();
PSsetgray(NSLightGray);
[[NSColor controlHighlightColor] set];
PSmoveto(NSMinX(aRect) + 7, NSMaxY(aRect) - 8);
PSlineto(NSMinX(aRect) + 10, NSMaxY(aRect) - 3);
PSstroke();
PSsetgray(NSBlack);
[[NSColor controlDarkShadowColor] set];
PSmoveto(NSMinX(aRect) + 10, NSMaxY(aRect) - 2);
PSlineto(NSMinX(aRect) + 4, NSMaxY(aRect) - 2);
PSstroke();
@ -246,7 +263,7 @@ static inline void HighlightDownButton(NSRect aRect)
twoButtons = downRect;
twoButtons.origin.y--;
twoButtons.size.width++;
twoButtons.size.height = 23;
twoButtons.size.height = 2 * STEPPER_HEIGHT + 1;
if (highlightUp)
HighlightUpButton(upRect);
@ -260,49 +277,169 @@ static inline void HighlightDownButton(NSRect aRect)
{
NSRectEdge up_sides[] = {NSMaxXEdge, NSMinYEdge};
float grays[] = {NSBlack, NSBlack};
NSColor *black = [NSColor controlDarkShadowColor];
NSColor *grays[] = {black, black};
NSDrawTiledRects(twoButtons, NSZeroRect,
up_sides, grays, 2);
NSDrawColorTiledRects(twoButtons, NSZeroRect,
up_sides, grays, 2);
}
}
- (void) highlight: (BOOL) highlight
upButton: (BOOL) upButton
withFrame: (NSRect) frame
inView: (NSView*) controlView
- (void) getPeriodicDelay: (float*)delay interval: (float*)interval
{
if (upButton)
{
highlightUp = highlight;
*delay = 0.5;
*interval = 0.025;
}
- (BOOL) trackMouse: (NSEvent*)theEvent
inRect: (NSRect)cellFrame
ofView: (NSView*)controlView
untilMouseUp: (BOOL)flag
{
NSPoint location = [theEvent locationInWindow];
NSPoint point = [controlView convertPoint: location fromView: nil];
NSRect upRect;
NSRect downRect;
NSRect rect;
float delay;
float interval;
BOOL overButton = YES;
unsigned int event_mask = NSLeftMouseUpMask | NSLeftMouseDraggedMask;
unsigned int periodCount = 0;
BOOL isDirectionUp;
BOOL autorepeat = [self autorepeat];
BOOL done = NO;
BOOL mouseWentUp = NO;
_mouse_down_flags = [theEvent modifierFlags];
if (![self startTrackingAt: point inView: controlView])
return NO;
if (![controlView mouse: point inRect: cellFrame])
return NO; // point is not in cell
if ([self isEnabled] == NO)
return NO;
if ([theEvent type] != NSLeftMouseDown)
return NO;
upRect = [self upButtonRectWithFrame: cellFrame];
downRect = [self downButtonRectWithFrame: cellFrame];
// Did the mouse go down in the up or in the down part?
if (NSMouseInRect(point, upRect, NO))
{
isDirectionUp = YES;
rect = upRect;
}
else if (NSMouseInRect(point, downRect, NO))
{
isDirectionUp = NO;
rect = downRect;
}
else
{
highlightDown = highlight;
return mouseWentUp;
}
[self drawWithFrame: frame inView: controlView];
}
[self setHighlighted: YES
upButton: isDirectionUp
withFrame: cellFrame
inView: controlView];
- (NSRect) upButtonRectWithFrame: (NSRect) frame
{
NSRect upRect;
upRect.size.width = 15;
upRect.size.height = 11;
upRect.origin.x = NSMaxX(frame) - 16;
upRect.origin.y = NSMinY(frame) + ((int) frame.size.height / 2) + 1;
return upRect;
}
if (autorepeat)
{
[self getPeriodicDelay: &delay interval: &interval];
[NSEvent startPeriodicEventsAfterDelay: delay withPeriod: interval];
event_mask |= NSPeriodicMask;
}
- (NSRect) downButtonRectWithFrame: (NSRect) frame
{
NSRect downRect;
downRect.size.width = 15;
downRect.size.height = 11;
downRect.origin.x = NSMaxX(frame) - 16;
downRect.origin.y = NSMinY(frame) +
((int) frame.size.height / 2) - 10;
return downRect;
while (!done)
{
NSEventType eventType;
theEvent = [NSApp nextEventMatchingMask: event_mask
untilDate: nil
inMode: NSEventTrackingRunLoopMode
dequeue: YES];
eventType = [theEvent type];
// Did the mouse go up?
if (eventType == NSLeftMouseUp)
{
mouseWentUp = YES;
done = YES;
}
if (eventType == NSPeriodic)
{
periodCount++;
if (periodCount == 4)
periodCount = 0;
if (periodCount == 0)
{
if (isDirectionUp)
[self _increment];
else
[self _decrement];
[(NSControl*)controlView sendAction: [self action] to: [self target]];
}
location = [[controlView window] mouseLocationOutsideOfEventStream];
}
else
{
location = [theEvent locationInWindow];
}
point = [controlView convertPoint: location fromView: nil];
if (![controlView mouse: point inRect: cellFrame])
{
if (flag == NO)
{
done = YES;
}
}
if (NSMouseInRect(point, rect, NO) != overButton)
{
overButton = !overButton;
if (overButton && autorepeat)
{
[NSEvent startPeriodicEventsAfterDelay: delay withPeriod: interval];
periodCount = 0;
}
else
{
[NSEvent stopPeriodicEvents];
}
[self setHighlighted: overButton
upButton: isDirectionUp
withFrame: cellFrame
inView: controlView];
}
}
if (overButton && autorepeat)
{
[NSEvent stopPeriodicEvents];
}
if (overButton)
{
if (isDirectionUp)
[self _increment];
else
[self _decrement];
[(NSControl*)controlView sendAction: [self action] to: [self target]];
}
[self setHighlighted: NO
upButton: isDirectionUp
withFrame: cellFrame
inView: controlView];
return mouseWentUp;
}
//
@ -310,42 +447,55 @@ static inline void HighlightDownButton(NSRect aRect)
//
- (void) encodeWithCoder: (NSCoder*)aCoder
{
int tmp1, tmp2;
[super encodeWithCoder: aCoder];
tmp1 = (int)_autorepeat;
tmp2 = (int)_valueWraps;
if([aCoder allowsKeyedCoding])
{
[aCoder encodeDouble: [self increment] forKey: @"NSIncrement"];
[aCoder encodeDouble: [self maxValue] forKey: @"NSMaxValue"];
[aCoder encodeDouble: [self minValue] forKey: @"NSMinValue"];
[aCoder encodeBool: [self autorepeat] forKey: @"NSAutorepeat"];
[aCoder encodeBool: [self valueWraps] forKey: @"NSValueWraps"];
}
else
{
int tmp1, tmp2;
[aCoder encodeValueOfObjCType: @encode(double)
at: &_maxValue];
[aCoder encodeValueOfObjCType: @encode(double)
at: &_minValue];
[aCoder encodeValueOfObjCType: @encode(double)
at: &_increment];
[aCoder encodeValueOfObjCType: @encode(int)
at: &tmp1];
[aCoder encodeValueOfObjCType: @encode(int)
at: &tmp2];
tmp1 = (int)_autorepeat;
tmp2 = (int)_valueWraps;
[aCoder encodeValueOfObjCType: @encode(double)
at: &_maxValue];
[aCoder encodeValueOfObjCType: @encode(double)
at: &_minValue];
[aCoder encodeValueOfObjCType: @encode(double)
at: &_increment];
[aCoder encodeValueOfObjCType: @encode(int)
at: &tmp1];
[aCoder encodeValueOfObjCType: @encode(int)
at: &tmp2];
}
}
- (id) initWithCoder: (NSCoder*)aDecoder
{
int tmp1, tmp2;
[super initWithCoder: aDecoder];
if([aDecoder allowsKeyedCoding])
{
_autorepeat = [aDecoder decodeBoolForKey: @"NSAutorepeat"];
_valueWraps = [aDecoder decodeBoolForKey: @"NSValueWraps"];
_increment = [aDecoder decodeIntForKey: @"NSIncrement"];
_maxValue = [aDecoder decodeIntForKey: @"NSMaxValue"];
_increment = [aDecoder decodeDoubleForKey: @"NSIncrement"];
_maxValue = [aDecoder decodeDoubleForKey: @"NSMaxValue"];
if([aDecoder containsValueForKey: @"NSMinValue"])
{
_minValue = [aDecoder decodeIntForKey: @"NSMinValue"];
_minValue = [aDecoder decodeDoubleForKey: @"NSMinValue"];
}
}
else
{
int tmp1, tmp2;
[aDecoder decodeValueOfObjCType: @encode(double)
at: &_maxValue];
[aDecoder decodeValueOfObjCType: @encode(double)
@ -365,3 +515,96 @@ static inline void HighlightDownButton(NSRect aRect)
}
@end
@implementation NSStepperCell (Private)
- (void) _increment
{
double newValue;
double maxValue = [self maxValue];
double minValue = [self minValue];
double increment = [self increment];
newValue = [self doubleValue] + increment;
if ([self valueWraps])
{
if (newValue > maxValue)
newValue = newValue - maxValue + minValue - 1;
else if (newValue < minValue)
newValue = newValue + maxValue - minValue + 1;
}
else
{
if (newValue > maxValue)
newValue = maxValue;
else if (newValue < minValue)
newValue = minValue;
}
[self setDoubleValue: newValue];
}
- (void) _decrement
{
double newValue;
double maxValue = [self maxValue];
double minValue = [self minValue];
double increment = [self increment];
newValue = [self doubleValue] - increment;
if ([self valueWraps])
{
if (newValue > maxValue)
newValue = newValue - maxValue + minValue - 1;
else if (newValue < minValue)
newValue = newValue + maxValue - minValue + 1;
}
else
{
if (newValue > maxValue)
newValue = maxValue;
else if (newValue < minValue)
newValue = minValue;
}
[self setDoubleValue: newValue];
}
- (void) setHighlighted: (BOOL)highlight
upButton: (BOOL)upButton
withFrame: (NSRect)frame
inView: (NSView*)controlView
{
if (upButton)
{
highlightUp = highlight;
}
else
{
highlightDown = highlight;
}
[controlView setNeedsDisplayInRect: frame];
}
- (NSRect) upButtonRectWithFrame: (NSRect)frame
{
NSRect upRect;
upRect.size.width = STEPPER_WIDTH;
upRect.size.height = STEPPER_HEIGHT;
upRect.origin.x = NSMaxX(frame) - STEPPER_WIDTH - 1;
upRect.origin.y = NSMinY(frame) + ((int)frame.size.height / 2) + 1;
return upRect;
}
- (NSRect) downButtonRectWithFrame: (NSRect)frame
{
NSRect downRect;
downRect.size.width = STEPPER_WIDTH;
downRect.size.height = STEPPER_HEIGHT;
downRect.origin.x = NSMaxX(frame) - STEPPER_WIDTH - 1;
downRect.origin.y = NSMinY(frame) + ((int)frame.size.height / 2) - STEPPER_HEIGHT + 1;
return downRect;
}
@end