Pending knob proportion setting implemented. Handle the case when knob proportion == 1.0

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@19643 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Sergii Stoian 2004-06-28 13:21:06 +00:00
parent 7d048ada92
commit 6de723c6ad

View file

@ -369,7 +369,7 @@ static NSColor *scrollBarColor = nil;
{ {
return; return;
} }
_isEnabled = flag; _isEnabled = flag;
_cacheValid = NO; _cacheValid = NO;
[self setNeedsDisplay: YES]; [self setNeedsDisplay: YES];
@ -417,23 +417,44 @@ static NSColor *scrollBarColor = nil;
/* Most likely our trackKnob method initiated this via NSScrollView */ /* Most likely our trackKnob method initiated this via NSScrollView */
return; return;
} }
if (ratio < 0) if (ratio < 0)
{ {
_knobProportion = 0; _pendingKnobProportion = 0;
} }
else if (ratio > 1) else if (ratio > 1)
{ {
_knobProportion = 1; _pendingKnobProportion = 1;
} }
else else
{ {
_knobProportion = ratio; _pendingKnobProportion = ratio;
}
if (_hitPart == NSScrollerNoPart)
{
_knobProportion = _pendingKnobProportion;
_pendingKnobProportion = 0;
} }
/* Make sure we mark ourselves as needing redisplay. */ // Handle the case when parts should disappear
_floatValue = -1; if (_knobProportion == 1)
{
[self setEnabled: NO];
}
else
{
[self setEnabled: YES];
}
[self setFloatValue: aFloat]; // Don't set float value if knob is being dragged
if (_hitPart != NSScrollerKnobSlot && _hitPart != NSScrollerKnob)
{
/* Make sure we mark ourselves as needing redisplay. */
_floatValue = -1;
[self setFloatValue: aFloat];
}
} }
- (void) setFrame: (NSRect)frameRect - (void) setFrame: (NSRect)frameRect
@ -567,23 +588,6 @@ static NSColor *scrollBarColor = nil;
{ {
case NSScrollerIncrementLine: case NSScrollerIncrementLine:
case NSScrollerDecrementLine: case NSScrollerDecrementLine:
/*
* A hit on a scroller button should be a page movement
* if the alt key is pressed.
*/
if ([theEvent modifierFlags] & NSAlternateKeyMask)
{
if (_hitPart == NSScrollerIncrementLine)
{
_hitPart = NSScrollerIncrementPage;
}
else
{
_hitPart = NSScrollerDecrementPage;
}
}
/* Fall through to next case */
case NSScrollerIncrementPage: case NSScrollerIncrementPage:
case NSScrollerDecrementPage: case NSScrollerDecrementPage:
[self trackScrollButtons: theEvent]; [self trackScrollButtons: theEvent];
@ -612,6 +616,14 @@ static NSColor *scrollBarColor = nil;
} }
_hitPart = NSScrollerNoPart; _hitPart = NSScrollerNoPart;
if (_pendingKnobProportion)
{
[self setFloatValue: _floatValue knobProportion: _pendingKnobProportion];
}
else
{
[self setNeedsDisplay:YES];
}
} }
- (void) trackKnob: (NSEvent*)theEvent - (void) trackKnob: (NSEvent*)theEvent
@ -802,7 +814,7 @@ static NSColor *scrollBarColor = nil;
static NSRect rectForPartIncrementLine; static NSRect rectForPartIncrementLine;
static NSRect rectForPartDecrementLine; static NSRect rectForPartDecrementLine;
static NSRect rectForPartKnobSlot; static NSRect rectForPartKnobSlot;
if (_cacheValid == NO) if (_cacheValid == NO)
{ {
rectForPartIncrementLine = [self rectForPart: NSScrollerIncrementLine]; rectForPartIncrementLine = [self rectForPart: NSScrollerIncrementLine];
@ -867,7 +879,7 @@ static NSColor *scrollBarColor = nil;
rect = [self rectForPart: NSScrollerKnobSlot]; rect = [self rectForPart: NSScrollerKnobSlot];
} }
[scrollBarColor set]; [scrollBarColor set];
NSRectFill (rect); NSRectFill (rect);
} }
@ -940,7 +952,9 @@ static NSColor *scrollBarColor = nil;
if (usableParts == NSNoScrollerParts if (usableParts == NSNoScrollerParts
|| usableParts == NSOnlyScrollerArrows) || usableParts == NSOnlyScrollerArrows)
return NSZeroRect; {
return NSZeroRect;
}
/* calc the slot Height */ /* calc the slot Height */
slotHeight = height - (_arrowsPosition == NSScrollerArrowsNone slotHeight = height - (_arrowsPosition == NSScrollerArrowsNone
@ -952,11 +966,12 @@ static NSColor *scrollBarColor = nil;
/* calc knob's position */ /* calc knob's position */
knobPosition = _floatValue * (slotHeight - knobHeight); knobPosition = _floatValue * (slotHeight - knobHeight);
knobPosition = (float)floor(knobPosition); knobPosition = (float)floorf(knobPosition);
/* calc actual position */ /* calc actual position */
y += knobPosition + (_arrowsPosition == NSScrollerArrowsMaxEnd y += knobPosition + ((_arrowsPosition == NSScrollerArrowsMaxEnd
|| _arrowsPosition == NSScrollerArrowsNone || _arrowsPosition == NSScrollerArrowsNone)
? 0 : buttonsSize); ? 0 : buttonsSize);
height = knobHeight; height = knobHeight;
width = buttonsWidth; width = buttonsWidth;