Creating pictures

<sxg>

  <width>16</width>
  <height>16</height>
  <widthmm>10</widthmm>
  <heightmm>10</widthmm>

  <picture id="pen">
    <type>pixmap</type>
    <size>scaled</size>
    <width>16</width>
    <height>16</height>
  </picture>

  <picture id="checkerboard">
    <type>pixmap</type>
    <size>
      <type>mmrounded</type>
      <factor>.5</factor>
    </size>
    <width>16</width>
    <height>16</height>
  </picture>

  <!-- ... -->

</sxg>

A picture's id attribute gives the label that the drawing instructions in the SXG file use to refer to this picture. A picture's type element specifies the picture's type. There are three picture types:

rgb

This creates a solid color picture.

text

This creates a text picture.

pixmap

This creates a picture for a new pixmap. The picture uses the same pictformat as the main picture, creating a new pixmap of the appropriate depth.

A pixmap picture's size element calculates the pixmap's actual size. A pixmap has the same size element, too:

scaled

scaled is the default sizing type, if not specified. scaled pictures' pixmaps get scaled according to the main picture's size. This example specifies a 16x16 pixmap for this picture, with a 16x16 SXG file. With the picture's dimension matching the dimensions of the SXG file, this pictures' pixmap always gets scaled to match the scaled image's size.

If this SXG file gets scaled to a 32x32 image, this picture's pixmap's actual size also gets scaled accordingly. In this example, if the picture's width is 8, this always creates a pixmap for this picture that's half as wide as the main picture's pixmap.

The coordinates and dimensions given in a scaled picture's render commands also get scaled accordingly.

fixed

The picture's width and height elements specify a fixed picture size in pixels. The picture, and the coordinates for its render commands, do not get scaled.

fixed pictures get typically used to create pixel-specific rendering patterns.

mm

Similar to fixed pictures, but the width and height specify the size of the picture in millimeters. The width and height can be fractional, but the final picture size gets rounded off to the nearest whole pixel size.

render command coordinates for mm picture get scaled accordingly. For example, a 10mm by 10mm picture's coordinates range from 0 and up to, but not including, 10. The coordinate (5, 5) is the center. If the display's resolution is 2.5 pixels per millimenter, the picture's pixmap's actual size is 25x25 pixels. Coordinates for the picture's rendering commands get scaled and rounded to the nearest pixel boundary, so the virtual coordinate (5, 5) gets scaled to the actual coordinate (13, 13), the center of the actual picture.

mmrounded

A special format that calculates the pixmap or the picture's size, and coordinates, based on scaled pseudo-millimeters. The scaling factors are based on the number of pixels per millimeter multiplied by factor (which defaults to 1), then rounded off to the nearest whole pixel value.

Example: the display's resolution is 4.5 pixels per millimeter, factor is .5, with a "10x10" picture or pixmap size. Multiplying 4.5*.5 gives 2.25, which gets rounded off to two pixels per "pseudo-millimeter", and the resulting image size becoms 20 pixels wide, and high.

If rounding off results in zero, this gets increased to one, so the result cannot be zero pixels per "pseudo-millimeter".

This is a convenient way to produce relatively small patterns that do not suffer from display artifacts due to rounding. Pixel coordinates can be fractional, but consider a small checkerboard-style pattern, with two columns and rows, defined by a pixmap or a picture object that's 1x1 millimeters in size, and a display with five pixels per millimeter. This may result in a visually-noticeable, uneven pattern of alternating two and three pixel-wide rows and columns.

Alternatively, using a mmrounded size with a factor of .5, the pixmap or picture's size can be specified as 2x2 rounded-off pseudo-millimeters, the final object size is guaranteed to have an even number of pixels.

A picture initial contents are cleared to a transparent background color (zero red, green, blue, and alpha channels).