Mercurial > dwindows
comparison mac/dw.m @ 707:86d76fc09237
Added support for scrollbar line and page scrolling. Need to check the calculations...
It may need to scroll minus the viewport length instead of the entire range.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sat, 12 Mar 2011 01:50:20 +0000 |
parents | 79b38b1f3346 |
children | 5fe2ca5ef88b |
comparison
equal
deleted
inserted
replaced
706:79b38b1f3346 | 707:86d76fc09237 |
---|---|
697 -(void *)userdata { return userdata; } | 697 -(void *)userdata { return userdata; } |
698 -(void)setUserdata:(void *)input { userdata = input; } | 698 -(void)setUserdata:(void *)input { userdata = input; } |
699 -(float)range { return range; } | 699 -(float)range { return range; } |
700 -(float)visible { return visible; } | 700 -(float)visible { return visible; } |
701 -(void)setRange:(float)input1 andVisible:(float)input2 { range = input1; visible = input2; } | 701 -(void)setRange:(float)input1 andVisible:(float)input2 { range = input1; visible = input2; } |
702 -(void)scrollerChanged:(id)sender { int result = (int)([self doubleValue] * [self range]); _event_handler(self, (void *)result, 14); } | 702 -(void)scrollerChanged:(id)sender |
703 { | |
704 double proportion = [self knobProportion]; | |
705 int result = (int)([self doubleValue] * range); | |
706 int newpos = result; | |
707 int page = (int)(proportion * range); | |
708 int max = (int)(range - page); | |
709 | |
710 switch ([sender hitPart]) | |
711 { | |
712 | |
713 case NSScrollerDecrementLine: | |
714 if(newpos > 0) | |
715 { | |
716 newpos--; | |
717 } | |
718 break; | |
719 | |
720 case NSScrollerIncrementLine: | |
721 if(newpos < range) | |
722 { | |
723 newpos++; | |
724 } | |
725 break; | |
726 | |
727 case NSScrollerDecrementPage: | |
728 newpos -= page; | |
729 if(newpos < 0) | |
730 { | |
731 newpos = 0; | |
732 } | |
733 break; | |
734 | |
735 case NSScrollerIncrementPage: | |
736 newpos += page; | |
737 if(newpos > range) | |
738 { | |
739 newpos = range; | |
740 } | |
741 break; | |
742 | |
743 default: | |
744 ; // do nothing | |
745 } | |
746 if(newpos != result) | |
747 { | |
748 double newposd = (double)newpos/range; | |
749 [self setDoubleValue:newposd]; | |
750 } | |
751 _event_handler(self, (void *)newpos, 14); | |
752 } | |
703 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } | 753 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } |
704 @end | 754 @end |
705 | 755 |
706 /* Subclass for a render area type */ | 756 /* Subclass for a render area type */ |
707 @interface DWRender : NSView | 757 @interface DWRender : NSView |