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