Work in progress

From GIMP GUI Redesign
Revision as of 10:29, 14 May 2012 by Guiguru (talk)
Jump to: navigation, search

Text in GIMP

towards solution models

overview of text in GIMP: Text packs.jpg

Grouping of task packages


  • typography aka in-text-layouting
    • character and paragraph level
    • preset functionality and behavior
    • OpenType implementation may need to be postponed
    • lots of functions -> much screen space
    • toolbox space?
  • editing modes
    • editor, on canvas, HUD
    • level of abstraction
    • availability and placement of functions
    • switching between modes
  • basic shape
    • non-shape, rectangle
    • creation
    • modification
  • text in 2D-space
    • needs logical specification
    • needs ui implementation, how to make the two tools work together
    • dependencies: vector tool, GEGL (for non-destructiveness)
    • minor number of functions inside text tool. most adjustment is done in vector tool


  • annotations
    • differ in many dimensions to usual text:
      • need to be turned on and off quickly
      • have no need for most of the formatting options
      • searchable?
    • = are better managed by its own system
  • complex shape/vector management
    • creation and modification of complex shapes and paths is exactly what the new vector tool is made for
    • doubling it in the text-tool…
      • …overloads the text tool
      • …uses space and control used for text-specific work
    • with GEGL a "link" between text-object and the shape should do the job
    • = should be done in vector tool: unified approach
  • text effects
    • drop shadow etc. are not unique to text
    • useful for different sorts of objects (vectors)
    • workflow is "select object" - "apply effect", no matter if it is special to text or a global effect
    • = unified approach suits it better

starting points

text (no container) fixed basic (rectangular) shape fixed (any) vector shape
aims/scenarios click'n'type


text centered

small amounts of text

non-strict layouting

area/shape is not an object as itself

layout centered = placement control

prevent/control intereference with other objects on canvas (boundaries)

use box as a shape (the box itself is


generally broad variety of aims

free art vs. exact layouting

interaction with rest of canvas

definition one corner is defined (e.g. its coordinates) all four sides are defined.

when reaching the right side, text is wrapped

when reaching the lower side, text runs out of the box and is visually clipped

same as in fixed basic shape
creating click + enter text,

sets start point of baseline

resulting "shape" is always rectangular

click + drag

? convert rectangular vector shape + enter text?

  • create text shape vector specifically for it
  • use existing vector
    • copy it -> text shape vector
    • clone it -> text shape vector that reflects changes on vector of origin
modifying resize -> becomes fixed shape

in-text layouting might modify shape


  • text only (changes box anyways)



convert to fixed shape

convert to vector shape

resize shape (alters line breaks)


  • text only
  • shape only (changes to vector shape mode)
  • text + shape (changes to vector shape mode)



convert to dynamic shape

convert to vector shape

resize shape (alters line breaks)

node manipulation (alters line breaks)


  • text only
  • shape only
  • text + shape


any other transformation applicable to vectors


conversion to dynamic shape (e.g. unbind from vector)

not possible to make basic shape

two subcases of the dynamic and fixed basic shape are missing from this analysis.

  • a fixed basic shape, that does not clip: lines over the bottom of the box are not clipped. Rather, the box is extended.
    • workaround: this can easily be achieved by vertically resizing the box
  • a fixed basic shape, that does not wrap: text runs out of the right side of the box, but is invisible outside the box. only manual line breaks cause new lines. However it is clipped at the bottom of the box
    • workaround: if wrapping is a property of text on a paragraph level (by default set to positive), this can be turned off. In combination with a fixed shape it allows for a replication of above case.

conclusion: these special cases can be replicated with existing means. A native implementation would complicate the system too much and is much less appealing than the simplicity of the current implementation.


Path tool

table 1

object/ operation end node multiple nodes in-between node segment component (sub-path) path
add create single end node or extend new segment divide a segment (create 2 new segments instead of the old segment)
move √ (multiple paths by linking)
delete delete segment delete segments (component is not broken) delete 2 segments, create new segment (non polygonal)
adjust √ (symmetrical handles possible)
join close component/path or join components --> create new segment
merge merge visible paths - no segments added

table 2

object/ operation end node multiple nodes in-between node segment component (sub-path) path
create from Selection
convert into Selection replace, Add to, Subtract, or Intersect with current Selection -->close path


  • add end node + adjust segment (polygonal/non-polygonal control)
  • add in-between node + adjust 2 segments

present UI solutions

end node

  • add end node (extend a component)- activate end node of the component +click

It has to be more clear for the user to know if the new end node will expand the component, or start a new component?

  • add end node (start new component) – Shift +click

Could it be done in a different way? For ex. deselecting active end node + click

  • There should be just one handle visible when adjusting the end node.
  • move node – select point and drag (triggers visible handles)

Handles should not bother user when moving, but should stay visible when finished, for adjusting a segment.

  • Handles are difficult to access when the end of the handle is next to the node (so when the segments are almost polygonal). Length of the handles for polygonal shapes can be minimum, not zero. Size of the handles should be discussed, too.
  • delete node - Shift+ CTRL + click
  • join end nodes – select 1st end node, Ctrl + 2nd end node

Could it be done without Ctrl key? You could say GIMP what the segment should it be (polygonal or non polygonal)

multiple nodes

  • move multiple nodes

Is there a need to make it possible to move multiple nodes?

  • delete multiple nodes – Shift select + Delete

This could be done by rectangular selection (drag from right -deletes nodes in selection area; drag from left– deletes all nodes of the path, that is fully in the selection area) + maybe hotkeys to chose – break component or not.

in-between node

  • add in-between node– Ctrl + click on segment

Could it be possible to just click, and keep click+drag for adjusting the segment?


  • delete segment – Ctrl+ Shift click
  • adjust segment – drag segment or adjust handles (activating node triggers visible handles)


  • move component – Shift select multiple nodes + Alt


  • add path- by path dialog
  • move path- Ctrl+Alt move canvas (not the component)
  • merge paths- by path dialog- merge visible paths
  • convert to selection, create from selection, duplicate– by path dialog
  • stroke – by path dialog + stroke path dialog window

general issues

  • handles - going out from the canvas- are not accessible

Maybe we could change the scaling, etc.

other enhancements

  • no possibility to set a 2nd node in a position to make the segment horizontal or vertical
  • selecting multiple nodes/components for deleting, moving etc.
  • it’s important to deliver easy zoom in/out