LMMS/lmms — pull request #875 by diizy (2014-06-20 20:11:17+00:00)
Title: Logscale models: fix all issues and finalize the implementation

Fixes #754

@tobydox, as a heads up: this commit will *almost definitely* cause a merge conflict with master, since I had to modify AutomatableModel quite a bit, and some of the same parts which were modified in the models branch which was merged to master. So I think after this is merged, it'd be good to get the merge conflicts sorted with master ASAP, as it might get harder to do later if more changes are needed...

Anyway - now for the commit:
- Had to modify the algorithm for logscale curves, because the old one would break with models that had a range outside of positive values. The new one I think works pretty good, seems to be robust enough, although it might not work exactly the same way as the old did.
- A caveat: I haven't been able to test it with models that have a negative minimum value, because I don't know if we have any such plugins. I can run a test case later with amplifier or something.

- Log scaled values are now displayed correctly in AutomationEditor.

- Log scaled knobs now work in log scale: the knob movement is scaled according to the scale, and the indicator (knob line angle) is also drawn in log scale, so when a log scale knob is automated, it appears to the user as if it moves linearily, but if you look at the values, they move in logscale.

- The actual logscale calculation was moved to lmms_math.h, and lmms_constants.h now holds a Euler constant or e, which is used for calculating the logscale curves.

- Some of the constants in the Ladspa code were modified, to make the step size in Ladspa-knobs smaller (more accurate) - and also, the step size was made even smaller in logscaled knobs, as they need more accuracy in the low end values due to the scaling.

@tresf, testing of this branch would be welcome.