Safe Haskell | None |
---|---|

Language | Haskell98 |

The functions from this module specify the geometry of the GUI-elements. They tell where to render the elements.

Every element is rectangular. To know where to place the element is to know the parameters of the bounding rectangle. All rectangles are relative and automatically aligned.

We have two functions for grouping. They construct horizontal and vertical groups of the elements. Within the group we can change the relative size of the rectangles (by scaling one side of the rectangle). In place of rectangle we can put an empty space.

# Documentation

Horizontal groupping of the elements. All elements are placed in the stright horizontal line and aligned by Y-coordinate and height.

Vertical groupping of the elements. All elements are placed in the stright vertical line and aligned by X-coordinate and width.

Scales an element within the group. It depends on the type of the alignment (horizontal or vertical) which side of the bounding box is scaled. If it's a horizontal group then the width is scaled and height is scaled otherwise.

Every element in the group has a scaling factor. By default it equals to one. During rendering all scaling factors are summed and divided on the sum of all factors. So that factors become weights or proportions. This process is called normalization. Scaling one element affects not only this element but all other elements in the group!

An example:

One element is twice as large as the other two:

hor [a, b, sca 2 c]

Why is it so? Let's look at the hidden scaling factors:

hor [sca 1 a, sca 1 b, sca 2 c]

During rendering we scale all the scaling fators so that total sum equals to one:

hor [sca 0.25 a, sca 0.25 b, sca 0.5 c]

horSca :: [(Double, Gui)] -> Gui

Weighted horizontal grouping. It takes a list of scaling factors and elements.

verSca :: [(Double, Gui)] -> Gui

Weighted vertical grouping. It takes a list of scaling factors and elements.

Sets the padding of the element. How much empty space to reserve outside the element.