I am looking to improve my open source project Retro Graphics Toolkit (for more information see https://github.com/ComputerNerd/Retro-Graphics-Toolkit ) and one feature that I plan to add is undoing/redoing. The issue is that my program makes heavy use of sliders. To illustrate this here is a screen shot of my program in action.
The reason I like sliders is the instant feedback and an easy way to communicate to the user that there is a minimum and maximum value for what they want to set for example (given that this program is for old game consoles) the Sega Genesis only supports sprites that are up to 4x4 tiles big so it is easy to limit the sprite size to 4x4. In this example (the sprite editor) as you drag the slider you can see the changes happen. Each time a slider is moved a callback function is called. I could add code to push the old value to an undo stack. The issue lies in the way people interact with sliders. Lets say the user drags the slider like this 0,1,2,3 ... until reaching their target instead of clicking on the proper place on the slider to get the right value. If I just push the change on the undo stack when undoing the changes it will be very annoying to have to undo ... 3,2,1,0 even though you just wanted 0. The best idea that I could think of (as of now) is to only push the old value to the undo stack after they use a different slider or do something else or after a timeout. I do not think this system is robust enough and I think there has got to be a better way. So with that said does anyone have a better idea on how to implement undoing for sliders? I though about having an apply button but I would find that to be very annoying. Or maybe even replace the sliders but with what?
mouseUp
or something like that)? But it would not work if the user focus the slider uses the keyboard to change it :/