Ristretto 1.0 - Functional Specification (DRAFT)
This document should not be edited directly. Any proposal for modification should be discussed on the xfce4-dev mailing list.
Ristretto is an application for viewing images on UNIX-like operating systems. Ristretto provides all the functionality required to analyse and display images, such as zooming and showing several images in a slideshow.
- Thumbnail-bar, for showing image thumbnails
Ristretto is an image viewer, a description which covers it all. This implies that the following features will not be included in ristretto:
- Allow editing of images
- Open other filetypes than images
Proposed future requirements
Open one or more images
In the file-open dialog of ristretto, or from the command-line, it is possible to open one or more images at once.
Open a folder
It is possible to open a complete folder with images with ristretto.
Save a copy of the current image
Ristretto can be launched by a webbrowser, to display an image from the /tmp folder. When this happens it can be usefull to save a copy of the image in a less volatile environment. This can be done with the 'save copy as' option.
Delete the image from disk
Ristretto can be used to manage photo-albums, as such it is possible to remove images from disk. Before this action is performed, ristretto asks the user for confirmation. If the user confirms the delete, ristretto moves the image to the trash.
Modify EXIF data
The only modifications ristretto can make on an image are modifications to the EXIF data, if present, like the author and orientation properties. It is not possible to do any image-modifications that require changes to the bitmap due to the possible loss of quality when working with lossy image-formats.
Monitor filesystem changes
When an image is edited while it is opened in ristretto, ristretto reloads the image when it has been written to disk. Ristretto will then always display the image correctly.
Display a single image
Ristretto is capable of displaying a single image with great detail. Digital photo's can be compressed up to 90% and a 6MB JPEG image can take up to 60MB of memory when it is completely loaded into memory. As a result, it can take a while before an image is loaded. Ristretto will show the low-quality thumbnail instead so the user already has an impression of the image that is loading.
Digital photographs commonly contain a higher quality image then the average monitor can render. For this reason it should be possible to zoom in for more details and zoom out for an overview of the image. This can be triggered with zoom- buttons from the toolbar and menu, but also as an optional response to scrolling the mouse-wheel.
When an image is opened in ristretto, and the user switches to a different image, ristretto remembers the zoom-state of the previous images. This means that when a user decides to zoom in a certain detail and then look at a different image. Looking at the previous image would give the user the same part of the image as it did earlier.
Digital photographs are usually encoded in a landscape orientation, regardless of the orientation the camera was held in when the picture was originally taken. To show an image in the up-right position, it should be rotated according to the available EXIF data. When this information is unavailable or flawed, a user should be able to override this by rotating the image itself.
There is one exception to the 'no-modifications' rule, a user is given the option to 'fix' the EXIF orientation tag.
Ristretto can display animated images, like .gif or .mng files.
Images taken with digital camera's usually have pretty large dimensions. The optimal way to view a complete image is by using the complete screen. This can be done with the 'fullscreen-mode' of ristretto.
Run a slideshow of images
When the user has a collection of images, from a summer-holiday, or a wedding for instance, they should be able to show the images in a slideshow.
The transitions between one image and the next can be animated. When animating a transition, the new image can slowly 'appear' over the old one. This can make watching a slideshow more pleasing. But on slower machines it can potentially make usability awful. To cover this problem, transitions can be disabled completely. Another option is that specific transition-types can be disabled while others are still used. (because some might require more resources then others)
When a slideshow is running, it is really anoying of the screensaver keeps popping up. So, when the slideshow is active, the screensaver needs to be disabled.
Decoding an image is a CPU-intensive operation. To reduce the number of times this needs to be done, Ristretto should cache the image in memory. The size of the image-cache should be configurable, so users can optimize it for their system.
When navigating through the images, or running a slideshow, the interface tends to flicker because the next image is not ready loading. To prevent this from happening, images can be loaded in advance. This is called 'preloading' - loading an image before you actually need it.
Ristretto allows users to create image-collections, to group certain sets of images together so they can be opened easily. (usefull if a subset of 50 photo's of all 600 in your holiday set contains a certain event the user wants to see separately)
Ofcourse, printing images is something we all want. (TODO: elaborate)
The images opened by ristretto can be ordered in different ways, depending on the user's preference.
Sort by Date (EXIF)
Images can be sorted by date, based on EXIF information or modification-times. This can be especially usefull for showing holiday pictures from different cameras in a chronologically correct order.
Sort by name
Images can be sorted by name, it is done numbers first, then alphabetically. So…
Ristretto comes with a navigation-bar, a sidebar consisting of two main components.
- A toolbar with navigation buttons to go to the next / previous image, or start/stop a slideshow
- A preview-bar container, which is a modular interface where different previewbars can be loaded.
The navigation-bar can have either a horizontal or vertical orientation. To make the preview-bar and toolbar easier to understand for users, they will be tied together. They both share the same orientation.
- Previous Image - (can wrap around to the last image)
- Play Slideshow
- Next Image - (can wrap around to the first image)
- Rotate Counter clockwise (90°)
- Rotate Clockwise (90°)
- Zoom Fit
- Zoom 1:1
- Zoom in
- Zoom out
Previewbars are modular interfaces, as such it is possible to write new previewbars which can be used inside ristretto.
A thumbnailbar shows image-thumbnails, ordered in a user-specified way (corresponding with the order used by the navigation-buttons)
A timelinebar shows representations of image-groups, ordered by date.
Interact with other applications
Ristretto uses the D-Bus thumbnailer spec for generating thumbnails. This allows out-of-process thumbnail-generation which should speed-up the responsiveness of Ristretto. Ofcourse, this does mean that a thumbnailer-service, like tumbler, is required for thumbnails to work.
Open images with other applications
Ristretto is not capable of editing images. But that is exactly what the user occasionally wants to do. To aid the user here, ristretto allows the user to open the image with another application, like the gimp, directly from the menu. The list of supported applications is not hard-coded, it is based on the mime-type associated apps.
Set the image as a wallpaper on the desktop-manager
It is possible to set the wallpaper of the xfce desktop manager with ristretto. This feature should only be advertised when a supported desktop-manager is actually running.
This means that when xfdesktop is not available, this option is not just disabled, it is hidden.