objective c - Hot to create custom NSSlider like "Start screen saver:" slider in System Preferences -
how create custom nsslider working slider in system preferences -> desktop & screen saver -> screen saver -> start screen saver: ?
i tried subclass nsslidercell overridden continuetracking: don't work expected.
i played around bit , @ least got off pretty start nsslidercell
subclass.
mdslidercell.h
:
#import <cocoa/cocoa.h> @interface mdslidercell : nsslidercell { bool tracking; } @end
mdslidercell.m
:
#import "mdslidercell.h" @implementation mdslidercell - (bool)starttrackingat:(nspoint)startpoint inview:(nsview *)controlview { if ([self numberoftickmarks] > 0) tracking = yes; return [super starttrackingat:startpoint inview:controlview]; } #define md_snapping 10.0 - (bool)continuetracking:(nspoint)lastpoint at:(nspoint)currentpoint inview:(nsview *)controlview { if (tracking) { nsuinteger count = [self numberoftickmarks]; (nsuinteger = 0; < count; i++) { nsrect tickmarkrect = [self rectoftickmarkatindex:i]; if (abs(tickmarkrect.origin.x - currentpoint.x) <= md_snapping) { [self setallowstickmarkvaluesonly:yes]; } else if (abs(tickmarkrect.origin.x - currentpoint.x) >= md_snapping && abs(tickmarkrect.origin.x - currentpoint.x) <= md_snapping *2) { [self setallowstickmarkvaluesonly:no]; } } } return [super continuetracking:lastpoint at:currentpoint inview:controlview]; } - (void)stoptracking:(nspoint)lastpoint at:(nspoint)stoppoint inview:(nsview *)controlview mouseisup:(bool)flag { [super stoptracking:lastpoint at:stoppoint inview:controlview mouseisup:flag]; } @end
basically, during -continuetracking:at:inview:
, checks see how close tick mark, , if it's close enough, turns on option allow tick mark values. causes snap tick mark, once far enough away, turn "tick mark-only" option off until close enough tick mark.
Comments
Post a Comment