Mercurial > dwindows
changeset 933:b19e6e55fc8e
Rewrote the scrollbar handler with a more accurate method and fixed a bug setting the position on Mac.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 26 Apr 2011 03:23:05 +0000 |
parents | ed10b5284f36 |
children | 13384e89964c |
files | mac/dw.m |
diffstat | 1 files changed, 15 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/mac/dw.m Mon Apr 25 20:42:56 2011 +0000 +++ b/mac/dw.m Tue Apr 26 03:23:05 2011 +0000 @@ -1084,14 +1084,14 @@ @interface DWScrollbar : NSScroller { void *userdata; - float range; - float visible; + double range; + double visible; } -(void *)userdata; -(void)setUserdata:(void *)input; -(float)range; -(float)visible; --(void)setRange:(float)input1 andVisible:(float)input2; +-(void)setRange:(double)input1 andVisible:(double)input2; -(void)scrollerChanged:(id)sender; @end @@ -1100,15 +1100,13 @@ -(void)setUserdata:(void *)input { userdata = input; } -(float)range { return range; } -(float)visible { return visible; } --(void)setRange:(float)input1 andVisible:(float)input2 { range = input1; visible = input2; } +-(void)setRange:(double)input1 andVisible:(double)input2 { range = input1; visible = input2; } -(void)scrollerChanged:(id)sender { - double proportion = [self knobProportion]; - double page = (proportion * range); - double max = (range - page); + double max = (range - visible); double result = ([self doubleValue] * max); double newpos = result; - + switch ([sender hitPart]) { @@ -1127,7 +1125,7 @@ break; case NSScrollerDecrementPage: - newpos -= page; + newpos -= visible; if(newpos < 0) { newpos = 0; @@ -1135,7 +1133,7 @@ break; case NSScrollerIncrementPage: - newpos += page; + newpos += visible; if(newpos > max) { newpos = max; @@ -1145,6 +1143,8 @@ default: ; /* do nothing */ } + int newposi = (int)newpos; + newpos = (newpos - (double)newposi) > 0.5 ? (double)(newposi + 1) : (double)newposi; if(newpos != result) { [self setDoubleValue:(newpos/max)]; @@ -3573,8 +3573,9 @@ void API dw_scrollbar_set_pos(HWND handle, unsigned int position) { DWScrollbar *scrollbar = handle; - double range = (double)[scrollbar range]; - double newpos = (double)position/range; + double range = [scrollbar range]; + double visible = [scrollbar visible]; + double newpos = (double)position/(range-visible); [scrollbar setDoubleValue:newpos]; } @@ -3588,8 +3589,8 @@ void API dw_scrollbar_set_range(HWND handle, unsigned int range, unsigned int visible) { DWScrollbar *scrollbar = handle; - float knob = (float)visible/(float)range; - [scrollbar setRange:(float)range andVisible:(float)visible]; + double knob = (double)visible/(double)range; + [scrollbar setRange:(double)range andVisible:(double)visible]; [scrollbar setKnobProportion:knob]; }