synfig/synfig — pull request #60 by genete (2013-09-20 12:21:58+00:00)
Title: Splinepoint tangents

The feature includes the following items:
* Elimination of the "Split" subparameter of the SplinePoint type. Well, in fact internally it is still present but it is not exposed to the user and it is not usable (change it does nothing). It is used only to read old files and act like a bridge between the old data and the new values.
* Addition of two new subparameters: "Radius Split" and "Angle Split" flags. meaning is exactly the same than the eliminated but it acts only over Radius or Angle of the tangents.
* New actions related to "split" and to "merge". You can split or merge the radius, the angle or both. Actions are exposed based on the current status of those new flags. Merge (in general) changes both tangents and split doesn't touch the tangent values but introduces a new waypoint if in animation mode (to keep tangent transition smooth). Same effect occurs when the split flags subparameters are modified manually.
* "Insert Item (Smart)" action has been replaced by two ones: "Insert Item" and "Insert Item & Keep Shape". The first it exactly the same than the replaced but removes its "Smart" terminology. Smart refers to the ability to add on/off points if you insert/remove an item in animation mode. The second keeps the shape of the curve when insert an item on a bezier (another long awaited feature that is consequence of the radius and angle split abilities)
* Newly created Splines has their tangent's radius split by default. It is the same behavior than Inkscape. It is possible to add one user option at the Spline Tool options panel to let the user select whether radius or angle are split or not. It is not implemented I would like to know if you would like to have that or the current implemented default.
* When moving a tangent and there is somehow some component merged (split radius or split angle is off) then the other tangent is moved. This may looks obvious but wait, continue reading. If you modify the tangent using the X;Y components the other tangent is updated. But if you modify the tangent indirectly (via Convert) the other tangent is not updated, unless you're moving the tangent 1. Tangent 1 modified indirectly has preference over the tangent 2. If you move the tangent 1 or 2 using the handles or directly entering the numbers in the X and Y coordinates, then it is detected by the code and the other tangent is updated. That is that way because I can't detect (at last easily and not recursively) if you're modifying indirectly a tangent.
* When dragging a bezier, now, the surrounding bezier's tangents are updated dynamically. This allow the user to have more precise feedback of how the bezier dragging is going to affect the neighbor beziers