Portability | GHC with TypeFamilies and more |
---|---|
Stability | unstable |
Maintainer | stephen.tetley@gmail.com |
Font size calculation for Label's bounding boxes.
Calculations are based on metrics derived from Courier at 48 pt. As Courier is a monospaced font, bounding boxes calculated for other font families will usually have longer width than is necessary for the printed text.
This is a deficiency of Wumpus, but alternatives would have significant implementation complexity.
- type FontSize = Int
- type CharCount = Int
- courier48_width :: Num u => u
- courier48_body_height :: Num u => u
- courier48_height :: Num u => u
- courier48_descender_depth :: Num u => u
- courier48_spacer_width :: Num u => u
- widthAt48pt :: Fractional u => CharCount -> u
- textWidth :: Fractional u => FontSize -> CharCount -> u
- textHeight :: Num u => FontSize -> u
- descenderDepth :: Fractional u => FontSize -> u
- textBounds :: (Fractional u, Ord u) => FontSize -> Point2 u -> CharCount -> BoundingBox u
Type synonyms
Courier metrics at 48 point
courier48_width :: Num u => uSource
The width of a letter in Courier at 48 pt.
The value is not entirely accurate but it is satisfactory.
courier48_body_height :: Num u => uSource
The height of a letter without accents, ascenders or descenders in Courier at 48 pt .
The value is not entirely accurate but it is satisfactory - some letters are taller than others (e.g. numbers are taller then capitals).
courier48_height :: Num u => uSource
The common maximum height of a letter in Courier at 48pt.
By common maximum the letter is allowed to have both an accent or ascender and a descender.
Naturally the height is 48.0.
courier48_descender_depth :: Num u => uSource
The depth of a descender in Courier at 48 pt.
Also the height of an ascender.
courier48_spacer_width :: Num u => uSource
The spacing between letters printed directly with PostScript's show command for Courier at 48 pt.
The value is not entirely accurate but it is satisfactory.
Metrics calculation
widthAt48pt :: Fractional u => CharCount -> uSource
Width of the supplied string when printed at 48pt.
textWidth :: Fractional u => FontSize -> CharCount -> uSource
textHeight :: Num u => FontSize -> uSource
Text height is just identity/double-coercion, i.e.
18 == 18.0
. The size of a font is the maximum height:
body + descender max + ascender max
descenderDepth :: Fractional u => FontSize -> uSource
Descender depth for font size sz
.
textBounds :: (Fractional u, Ord u) => FontSize -> Point2 u -> CharCount -> BoundingBox uSource
Find the bounding box for the character count at the supplied font-size.
The supplied point represents the bottom left corner of the a regular upper-case letter (that is without descenders). The bounding box will always be dropped to accommodate ascenders - no interpretation of the string takes place to see if it actually contains ascenders or descenders.
The metrics used are derived from Courier - a monospaced font. For variable width fonts the calculated bounding box will usually be too long.