Haiku Vector Icon Format
# Haiku Vector Icon Format

Haiku Vector Icon Format (HVIF) is a vector storage format designed to store icons, specifically for Haiku.

## History

Haiku developers commonly agreed that Haiku could not be released with original BeOS R5 icons. Since Haiku needed its own artwork anyway, it was thought that icons could switch to vectors graphics from traditional BeOS bitmaps. In July 2006 Haiku developer Stephan Aßmus introduced Icon-O-Matic, the icon editor of Haiku, and a storage format with a rendering engine based on Anti-Grain Geometry.

After a few days of discussion, Aßmus announced a contest to determine an icon theme for Haiku. He stated that there was no guideline that had to be followed and suggested 1 September as deadline. 16 icon sets were rated in the contest, and Aßmus' icon set "Stippi" received the award. In early November it was also announced that Stephan Aßmus implemented vector icons in OpenTracker.

HVIF icons of Stippi set are used in current Haiku releases and builds.

## Features

Aimed at fast rendering and small file sizes, HVIF brings the following approaches:

* Icons have a native size of 64×64 pixels
* Integer coordinates from −32 to +95 and an eighth bit to indicate non-integer coordinates are used to reduce the size.
* There are three basic path types: path with commands, path with straight lines only and path with curves only.
* There are four different path commands introduced for icon creating: horizontal line, vertical line, line, and cubic curve.
* Since a great precision is not needed, it uses its own floating point format for storing transformation matrices, resulting a matrix size of 18 bytes, which is considerably smaller than the transformation matrix size of 24 or 48 bytes in other formats.
* There are two types of style: plain color and gradient.
* Flags are used to specify what aspects of the objects should be stored in the file, so that unused sections don't take up space.
* HVIF data consists of three sections: The first one encodes styles, the second the paths and the third the shapes.
* Styles and paths are global to an icon with a maximum number of 256 for each, so that they can be reused by different shapes by referring to them with one byte.
* The icons have an average size of 500–700 bytes, which is smaller than commonly used bitmap or vector graphics icons.
* Because of their small size, icons can be stored within inode of files. Therefore, the name, the size, the date and the icon of a file can be read by Tracker within a single disk operation.
* Unlike other vector graphics formats, the icons are rendered in a single pass except for some cases like transparency, causing no visible seams between shapes.
