The collage API is for freeform graphics. You can move, rotate, scale, etc. all sorts of forms including lines, shapes, images, and elements.
Collages use the same coordinate system you might see in an algebra or physics problem. The origin (0,0) is at the center of the collage, not the top left corner as in some other graphics libraries. Furthermore, the y-axis points up, so moving a form 10 units in the y-axis will move it up on screen.
A visual Form has a shape and texture. This can be anything from a red
square to a circle textured with stripes.
Turn any Element into a Form. This lets you use text, gifs, and video
in your collage. This means you can move, rotate, and scale
an Element however you want.
Create a filled in shape.
Create a textured shape. The texture is described by some url and is tiled to fill the entire shape.
Outline a shape with a given line style.
Trace a path with a given line style.
Create some text. Details like size and color are part of the Text value
itself, so you can mix colors and sizes and fonts easily.
Create some outlined text. Since we are just outlining the text, the color
is taken from the LineStyle attribute instead of the Text.
Move a form by the given amount (x, y). This is a relative translation so
(move (5,10) form) would move form five pixels to the right and ten pixels up.
Move a shape in the x direction. This is relative so (moveX 10 form) moves
form 10 pixels to the right.
Move a shape in the y direction. This is relative so (moveY 10 form) moves
form upwards by 10 pixels.
Scale a form by a given factor. Scaling by 2 doubles both dimensions, and quadruples the area.
Rotate a form by a given angle. Rotate takes standard Elm angles (radians)
and turns things counterclockwise. So to turn form 30° to the left
you would say, (rotate (degrees 30) form).
Set the alpha of a Form. The default is 1, and 0 is totally transparent.
Grouping forms makes it easier to write modular graphics code. You can create a form that is a composite of many subforms. From there it is easy to transform it as a single unit.
Flatten many forms into a single Form. This lets you move and rotate them
as a single unit, making it possible to build small, modular components.
Forms will be drawn in the order that they are listed, as in collage.
Flatten many forms into a single Form and then apply a matrix
transformation. Forms will be drawn in the order that they are listed, as in
collage.
A 2D shape. Shapes are closed polygons. They do not have a color or texture, that information can be filled in later.
A rectangle with a given width and height.
An oval with a given width and height.
A square with a given edge length.
A circle with a given radius.
A regular polygon with N sides. The first argument specifies the number of sides and the second is the radius. So to create a pentagon with radius 30 you would say:
ngon 5 30Create an arbitrary polygon by specifying its corners in order.
polygon will automatically close all shapes, so the given list
of points does not need to start and end with the same position.
A 2D path. Paths are a sequence of points. They do not have a color.
Create a path along a given line segment.
Create a path that follows a sequence of points.
Create a solid line style with a given color.
Create a dashed line style with a given color. Dashing equals [8,4].
Create a dotted line style with a given color. Dashing equals [3,3].
All of the attributes of a line style. This lets you build up a line style however you want. You can also update existing line styles with record updates.
The shape of the ends of a line.
The shape of the “joints” of a line, where each line segment
meets. Sharp takes an argument to limit the length of the joint. This
defaults to 10.
The default line style, which is solid black with flat caps and sharp joints. You can use record updates to build the line style you want. For example, to make a thicker line, you could say:
{ defaultLine | width = 10 }
Create a collage with certain dimensions and content. It takes width and height arguments to specify dimensions, and then a list of 2D forms to decribe the content.
Unlike with
Elements, these 2D forms can be moved and rotated however you like. The forms are drawn in the order of the list, i.e.,collage w h [a, b]will drawbon top ofa.