fontforge/fontforge — pull request #675 by monkeyiq (2013-08-24 05:06:05+00:00)
Title: Rudimentary support for selecting 2+ BCP and operating on them all

The old code assumed there can only be one BCP selected, which is the next or prev control point of a splinepoint. This patch allows more than one BCP to be selected at any one time. The old code with a 'primary' selected BCP is retained for now, and the primary selected BCP is always the last BCP you selected. The set of all selected BCP form the 'secondary' selection, which also includes the primary selected BCP. Code that has been updated to operate on many BCP can use the secondary BCP selection and pass a visitor function to one of the visitor drivers to see each selected BCP without the need to explicitly iterate.

Note that the main difference between the primary and secondary selection is where they are maintained. The primary is part of the PressedOn structure. The secondary is found by looking at the BCP and seeing if their individual next/prev BCP selected flags are set.

Functions like SPIsNextCPSelected() will tell you if a BCP is one of the many selected BCP.

The CVFindAndVisitSelectedControlPoints() function will call your provided visitor on all selected BCP in the charview.

You can currently shift click to add more BCP to the selected BCP. arrow key and alt+arrow key will move all the selected BCP at once. There is initial support for dragging multiple BCP with the mouse. Multiple move works well on multiple BCP for corner points. Other point types can have interested effects when you try to drag 2+ BCP at once.

Some operators like 'scale the selection' might also be good candidates for respecting multi BCP selections.