Unified Transform Tool

The current specification for a unified transform tool is a bold attempt to combine every aspect of the tool on single on-canvas editable UI, lacking in cryptic states that a casual user would be unable to find without reading the documentation or status bar tip. But I believe it is a little bit TOO complex for its own good, and I believe I have a simpler solution that might achieve the same objectives without the need for a complex frame.

First of all I would like to remind you of the problems of the current specification. Go over to the spec and look at the suggested frame:

http://gui.gimp.org/index.php/Transformation_tool_specification

Now, to my solution. It is based on Inkscape’s two-state transform tool: In inskacpe, you click the shape to be transformed, which in turn changes the tool’s mode between rotate / skew and scale modes. There are similar tools in Adobe Flash and Corel Draw, I believe. The frame is a “standard” 1 pixel wide with corner and mid-edge handles.

First of all, move and rotate:

Move is performed anywhere in the inside of the transform envelope. The cursor indicates this.

Rotate is performed anywhere outside of the box. A cursorchange and a lin e to the transform center indicate this.

The tool starts at scale mode:

 

Dragging a handle scales the transform envelope.

You can switch to another mode to toggle distort/skew:

In order to indicate the change of behavior, the handles become round, and dragging the handle distorts the envelope. Dragging a center handle moves the edge it’s on. You can skew by limiting the movement to horizontal or vertical movement.

There is also a symmetry mode that can be toggled:

When this is on, scale or distort are performed symmetrically

Now, obviously we would have modifier keys to toggle between modes, and we will have the options clearly visible in the dockable:

But we also want a visual, on-canvas, beginner-friendly way of showing it. Well, we already have a floater for the on-canvas text editor, so why not use that?

The floater will have several mode buttons, clearly indicating the available modes. Buttons will have clearly discernible “lit” states. The floater should appear where it is most convenient and should move or become mostly transparent so as not to get in the way.

Back to modifier keys: In photoshop’s transform tool you need to hold the key to make it take effect. I suggest we do something different: one press of CTRL for example might toggle between distort and scale. One press of ALT might toggle between symmetry and non-symmetry. One press on shift might toggle the constrain-to-horizontal or vertical mode for skew and distort operations, or the constrain to aspect ratio for the scale mode. And, because the key press cycles between states, it is possible to cycle between more than two states.

I’m mentioning this because, at some point in the future, we may want to implement envelope transforms, in which you can warp an area using bezier nodes:

My solution is designed to be extensible - just add another radio button to the dockable, another image button to the floater, and cycle the modifier key between three states.


This is by no means a complete spec, but if there is support for this direction, I think it should not be to difficult to come up with one.