Skip to content

Pango.LayoutLine

record (struct)

A PangoLayoutLine represents one of the lines resulting from laying out a paragraph via PangoLayout.

PangoLayoutLine structures are obtained by calling Layout.get_line and are only valid until the text, attributes, or settings of the parent PangoLayout are modified.

Methods

get_extents

def get_extents(self) -> tuple[Rectangle, Rectangle]

Computes the logical and ink extents of a layout line.

See Font.get_glyph_extents for details about the interpretation of the rectangles.

get_height

def get_height(self) -> int

Computes the height of the line, as the maximum of the heights of fonts used in this line.

Note that the actual baseline-to-baseline distance between lines of text is influenced by other factors, such as Layout.set_spacing and Layout.set_line_spacing.

get_length

def get_length(self) -> int

Returns the length of the line, in bytes.

get_pixel_extents

def get_pixel_extents(self) -> tuple[Rectangle, Rectangle]

Computes the logical and ink extents of layout_line in device units.

This function just calls LayoutLine.get_extents followed by two extents_to_pixels calls, rounding ink_rect and logical_rect such that the rounded rectangles fully contain the unrounded one (that is, passes them as first argument to extents_to_pixels).

get_resolved_direction

def get_resolved_direction(self) -> Direction

Returns the resolved direction of the line.

get_start_index

def get_start_index(self) -> int

Returns the start index of the line, as byte index into the text of the layout.

get_x_ranges

def get_x_ranges(self, start_index: int, end_index: int) -> list[int]

Gets a list of visual ranges corresponding to a given logical range.

This list is not necessarily minimal - there may be consecutive ranges which are adjacent. The ranges will be sorted from left to right. The ranges are with respect to the left edge of the entire layout, not with respect to the line.

Parameters:

  • start_index — Start byte index of the logical range. If this value is less than the start index for the line, then the first range will extend all the way to the leading edge of the layout. Otherwise, it will start at the leading edge of the first character.
  • end_index — Ending byte index of the logical range. If this value is greater than the end index for the line, then the last range will extend all the way to the trailing edge of the layout. Otherwise, it will end at the trailing edge of the last character.

index_to_x

def index_to_x(self, index_: int, trailing: bool) -> int

Converts an index within a line to a X position.

Parameters:

  • index_ — byte offset of a grapheme within the layout
  • trailing — an integer indicating the edge of the grapheme to retrieve the position of. If > 0, the trailing edge of the grapheme, if 0, the leading of the grapheme

is_paragraph_start

def is_paragraph_start(self) -> bool

Returns whether this is the first line of the paragraph.

ref

def ref(self) -> LayoutLine | None

Increase the reference count of a PangoLayoutLine by one.

unref

def unref(self) -> None

Decrease the reference count of a PangoLayoutLine by one.

If the result is zero, the line and all associated memory will be freed.

x_to_index

def x_to_index(self, x_pos: int) -> tuple[bool, int, int]

Converts from x offset to the byte index of the corresponding character within the text of the layout.

If x_pos is outside the line, index_ and trailing will point to the very first or very last position in the line. This determination is based on the resolved direction of the paragraph; for example, if the resolved direction is right-to-left, then an X position to the right of the line (after it) results in 0 being stored in index_ and trailing. An X position to the left of the line results in index_ pointing to the (logical) last grapheme in the line and trailing being set to the number of characters in that grapheme. The reverse is true for a left-to-right line.

Parameters:

  • x_pos — the X offset (in Pango units) from the left edge of the line.

Properties

layout

layout: Layout  # read/write

start_index

start_index: int  # read/write

length

length: int  # read/write

runs

runs: list[LayoutRun]  # read/write

is_paragraph_start

is_paragraph_start: int  # read/write

resolved_dir

resolved_dir: int  # read/write