No image open specification
Contents
intro
This is the specification for the state of GIMP when no image is open. It is still based on a multiple document interface model.
the OS-X exception
On OS-X, with its fixed menubar at the top of the screen, there is no need to have windows open to keep the application instance alive. Therefore the OS-X version of GIMP shall not perform all the stunts spec'ed below and run happily with no window open.
Note however that greying out of menus and toolbox + inspectors shall apply.
overall goals
- get the menubar out of the toolbox;
- keep the application instance alive by always having a window with a menubar open, even when no image is open.
supporting the activity
From the understanding of the activities undertaken when GIMP is used within the scope of the product vision, the following requirements can be distilled:
- with no image open, GIMP is ready for whatever users want to do next (new image, generate new image, open image, open oodles of images, not use GIMP for the next 12 hours), in whatever way possible—from within GIMP, from the desktop/file browser or from other applications than GIMP (e.g. a photo asset manager);
- the 'no image' window should be the digital equivalent of a no-nonsense clean tabletop in the atelier: ready to accept the next canvas for further graphics creation;
- a 'no image' window cannot be mistaken for a window with an empty canvas in any way;
- minimum disruption when opening a first image (go from no image open to a single image open) or closing the last image (go from a single image open to no image open).
no gimmicks
The following gimmicks shall explicitly not be part of the ‘no image’ window:
- a ‘welcome to GIMP’ text, in any font size;
- any splash-screen-like graphics or interaction, or GIMP contributor credits;
- any ‘what would you like to do today’ type of interaction, including ‘recently open images’;
- an empty canvas;
- anything that looks like an empty page, piece of paper, wooden tabletop;
- anything that is based on assumptions of ‘what users usually want to do next…’;
- anything distracting.
are you a quitter?
Should an image, a window or GIMP be closed?
When
- Close in the File menu is invoked and there is at least one image window open, or
- Close via the window manager (e.g. close box on the window frame, close on the taskbar) is invoked on an image window
that shall mean that the image is to be closed. The normal checks shall be made (e.g. unsaved changes?) and then when it is time to discard the view of the image from the display:
- if multiple images were open at the moment the close was invoked, the window off the image shall be closed;
- if one image was open at the moment the close was invoked, it is a closing the last image situation, see there.
Close all from the File menu shall be handled as a queue of Close actions on each and every open image.
When
- Quit in the File menu is invoked,
- Close in the File menu is invoked and the no image’ window is shown, or
- Close via the window manager (e.g. close box on the window frame, close on the taskbar) is invoked on the ‘no image’ window
that shall mean that GIMP has to quit.
Note that shortcuts for menu items are just that. So invoking ctrl-W is the shortcut for (and the same as) choosing Close from the File menu.
inside the ‘no image’ window
The 'no image' window shall contain from top to bottom:
- menubar: menu items that are not available because there is no image open shall be greyed out; menus of which all menu items are greyed out shall be greyed out completely (including menu title);
- drop zone with bottom-left a wilber branding image; this zone shall accept drag-and-drop of all file types that GIMP can open via the Open… dialog;
- status bar; because there is no image, the measuring unit pop-up and the zoom level pop-up shall not be shown; instead a button to show a GIMP tip (in the drop zone) shall be placed on the left.
toolbox + inspectors
With no image open, the toolbox and most dialogs (with inspector function when permanently displayed) are reduced to screen clutter.
The few dialogs that still make sense with no image open are:
- Document History;
- Templates;
- Error Console;
- all from the Help menu;
- Module Manager;
- Plugin Browser;
- Procedure Browser;
- Script-fu Console;
- Preferences;
- Keyboard Shortcuts;
- Units.
If there is one I missed here, I like to hear about it.
With no image open, the toolbox and every non-functional dialog shall be greyed out. The sole exception to this shall be the UI elements for the management of the inspectors themselves (drag handles, menu to open/close dialogs within an inspector), which shall be available. Note that this is only a good solution when toolbox + inspectors start to behave properly and are not displayed when GIMP is not the foreground application (becoming window type _NET_WM_WINDOW_TYPE_UTILITY, most likely).
size matters
In this section we specify the sizes of the drop zone, which shall in general force the size of the overall window. Most of the calculated sizes depend on the UI theme and localisation GIMP is running under. If one of these changes during runtime, everything shall be recalculated.
default size + position
GIMP shall ship with a default size and position for the ‘no image’ window.
The default width of the drop zone shall be the minimum width necessary to display the menu bar for the UI theme and localisation. The default height of the drop zone shall be the default width divided by 3.
The default position of the ‘no image’ window shall be the default position of an image window.
user intervention
Users can move, resize or maximise the ‘no image’ window, the result of which shall override the defaults for the rest of the runtime session. Persistence of the override beyond the runtime session shall be per the Window Position settings in the Window Management tab of the Preferences.
The persisted size, position, maximised parameters of the no image’ window shall be separate from those used for image windows.
The Reset Saved Window Positions to Default values button in the Window Management tab of the Preferences shall apply to the size, position, maximised of the ‘no image’ window.
the tiny details
There are limits to how big or small users can resize their ‘no image’ window:
All minimum and maximum sizes of windows as enforced by the window manager shall be adhered to.
The minimal width of the ‘no image’ window shall be the minimum width necessary to display the GIMP tip button and progress bar in the status bar, for the UI theme and localisation.
The minimal height of the ‘no image’ window shall be the height of the menubar + that of the status bar for the current UI theme. When users decrease the height of the ‘no image’ window, the drop zone height shall be decreased towards zero. When that zero is hit, that shall be all...
drop zone
The drop zone stands for the no-nonsense clean tabletop in the atelier, and shall use a theme dialog panel to fill its area. The right-click menu (duplicating the menubar) shall be available in the drop zone.
fit
The wilber image shall be displayed bottom-left in the drop zone. The image size shall be calculated as follows:
- ascertain which of the width and height of the drop zone is the long side and which is the short side;
- calculate the the image scaling at which the image fits the short side exactly;
- calculate the the image scaling at which the image fits the half the long side exactly;
- the smaller of the two calculated image scalings shall be used.
and finish
The image shall be rendered in the foreground color of the theme, at 15% opacity.
flash
When users perform a drag and drop action on the drop zone—hovering the mouse sprite above the drop zone with one or more files of a type that GIMP can open via the Open… dialog—then standard drag & drop feedback as prescribed by the theme shall be shown.
action time
It is in the transitions that the whole ‘no image’ concept comes together.
starting with no image
When GIMP starts without an image to open, than the ‘no image’ window shall appear, at the user-override size/position or else the default size/position.
closing the last image
The last image window shall be morphed into a ‘no image’ window, shrinking or growing to the user-override size or else the default size of the no image’ window. And when we say ‘morphed’, we do mean that some animated growing or shrinking (where possible) would have real usability benefits, bringing a continuity in this transition situation. Pretty please.
Under no circumstance shall the last image window disappear and the ‘no image’ window appear in its place. Also the position of the window shall not be changed by GIMP, to keep the menubar in exactly the same place (if the window manager moves the window, caused by the resize, then tough luck).
opening the first image
The ‘no image’ window shall be morphed into an image window, growing to the size GIMP finds necessary as per current algorithm. And when we say ‘morphed’, we do mean that some animated growing or shrinking (where possible) would have real usability benefits, bringing a continuity in this transition situation. Pretty please.
If the calculated width of the image window is smaller than that of the no image’ window, then the width shall not be adjusted. If the calculated height of the image window is smaller than that of the no image’ window, then the height shall not be adjusted.
Under no circumstance shall the ‘no image’ window disappear and an image window appear in its place. Also the position of the window shall not be changed by GIMP, to keep the menubar in exactly the same place (if the window manager moves the window, caused by the resize, then tough luck).
maximum effort
The ‘no image’ window shall have a maximised state that is separate from that of image windows. Although the maximised state for the ‘no image’ window is a teeny, weeny bit less likely than for image windows, all combinations for this setting should be taken into consideration while making a first or last image transition (8 different transitions in total).
During the transitions above, the correct maximised state shall be recovered for the destination window type (from the prevailing runtime or persistent parameter) and applied to the window.