Module pyglet.text.layout

Render simple text and formatted documents efficiently.

Three layout classes are provided:

TextLayout

The entire document is laid out before it is rendered. The layout will be grouped with other layouts in the same batch (allowing for efficient rendering of multiple layouts).

Any change to the layout or document, and even querying some properties, will cause the entire document to be laid out again.

ScrollableTextLayout

Based on TextLayout.

A separate group is used for layout which crops the contents of the layout to the layout rectangle. Additionally, the contents of the layout can be "scrolled" within that rectangle with the view_x and view_y properties.

IncrementalTextLayout

Based on ScrollableTextLayout.

When the layout or document are modified, only the affected regions are laid out again. This permits efficient interactive editing and styling of text.

Only the visible portion of the layout is actually rendered; as the viewport is scrolled additional sections are rendered and discarded as required. This permits efficient viewing and editing of large documents.

Additionally, this class provides methods for locating the position of a caret in the document, and for displaying interactive text selections.

All three layout classes can be used with either UnformattedDocument or FormattedDocument, and can be either single-line or multiline. The combinations of these options effectively provides 12 different text display possibilities.

Style attributes

The following character style attribute names are recognised by the layout classes. Data types and units are as specified.

Where an attribute is marked "as a distance" the value is assumed to be in pixels if given as an int or float, otherwise a string of the form "0u" is required, where 0 is the distance and u is the unit; one of "px" (pixels), "pt" (points), "pc" (picas), "cm" (centimeters), "mm" (millimeters) or "in" (inches). For example, "14pt" is the distance covering 14 points, which at the default DPI of 96 is 18 pixels.

font_name
Font family name, as given to pyglet.font.load.
font_size
Font size, in points.
bold
Boolean.
italic
Boolean.
underline
4-tuple of ints in range (0, 255) giving RGBA underline color, or None (default) for no underline.
kerning
Additional space to insert between glyphs, as a distance. Defaults to 0.
baseline
Offset of glyph baseline from line baseline, as a distance. Positive values give a superscript, negative values give a subscript. Defaults to 0.
color
4-tuple of ints in range (0, 255) giving RGBA text color
background_color
4-tuple of ints in range (0, 255) giving RGBA text background color; or None for no background fill.

The following paragraph style attribute names are recognised. Note that paragraph styles are handled no differently from character styles by the document: it is the application's responsibility to set the style over an entire paragraph, otherwise results are undefined.

align
left (default), center or right.
indent
Additional horizontal space to insert before the first glyph of the first line of a paragraph, as a distance.
leading
Additional space to insert between consecutive lines within a paragraph, as a distance. Defaults to 0.
line_spacing
Distance between consecutive baselines in a paragraph, as a distance. Defaults to None, which automatically calculates the tightest line spacing for each line based on the font ascent and descent.
margin_left
Left paragraph margin, as a distance.
margin_right
Right paragraph margin, as a distance.
margin_top
Margin above paragraph, as a distance.
margin_bottom
Margin below paragraph, as a distance. Adjacent margins do not collapse.
tab_stops
List of horizontal tab stops, as distances, measured from the left edge of the text layout. Defaults to the empty list. When the tab stops are exhausted, they implicitly continue at 50 pixel intervals.
wrap
Boolean. If True (the default), text wraps within the width of the layout.

Other attributes can be used to store additional style information within the document; they will be ignored by the built-in text classes.

Since: pyglet 1.1

Classes

  TextLayoutGroup
Top-level rendering group for TextLayout.
  ScrollableTextLayoutGroup
Top-level rendering group for ScrollableTextLayout.
  TextLayoutForegroundGroup
Rendering group for foreground elements (glyphs) in all text layouts.
  TextLayoutForegroundDecorationGroup
Rendering group for decorative elements (e.g., glyph underlines) in all text layouts.
  TextLayoutTextureGroup
Rendering group for a glyph texture in all text layouts.
  TextLayout
Lay out and display documents.
  ScrollableTextLayout
Display text in a scrollable viewport.
  IncrementalTextLayout
Displayed text suitable for interactive editing and/or scrolling large documents.