Package icyllis.modernui.text

# Class DynamicLayout

java.lang.Object
icyllis.modernui.text.Layout
icyllis.modernui.text.DynamicLayout

public class DynamicLayout extends Layout

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static final class`
  `DynamicLayout.Builder`
  Builder for dynamic layouts.

  ## Nested classes/interfaces inherited from class icyllis.modernui.text.Layout

  `Layout.Alignment`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final int`
  `INVALID_BLOCK_INDEX`
  Value used in mBlockIndices when a block has been created or recycled and indicating that its display list needs to be re-created.

  ### Fields inherited from class icyllis.modernui.text.Layout

  `DIR_LEFT_TO_RIGHT, DIR_RIGHT_TO_LEFT, TAB_INCREMENT`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static DynamicLayout.Builder`
  `builder(CharSequence base, TextPaint paint, int width)`
  Obtain a builder for constructing DynamicLayout objects.
  `int[]`
  `getBlockEndLines()`
  `int`
  `getBlockIndex(int index)`
  `int[]`
  `getBlockIndices()`
  `it.unimi.dsi.fastutil.ints.IntArrayList`
  `getBlocksAlwaysNeedToBeRedrawn()`
  `int`
  `getBottomPadding()`
  Returns the number of extra pixels of descent padding in the bottom line of the Layout.
  `int`
  `getEllipsisCount(int line)`
  Returns the number of characters to be ellipsized away, or 0 if no ellipsis is to take place.
  `int`
  `getEllipsisStart(int line)`
  Return the offset of the first character to be ellipsized away, relative to the start of the line.
  `int`
  `getEllipsizedWidth()`
  Return the width to which this Layout is ellipsizing, or `Layout.getWidth()` if it is not doing anything special.
  `int`
  `getIndexFirstChangedBlock()`
  `boolean`
  `getLineContainsTab(int line)`
  Returns whether the specified line contains one or more characters that need to be handled specially, like tabs.
  `int`
  `getLineCount()`
  Return the number of lines of text in this layout.
  `int`
  `getLineDescent(int line)`
  Return the descent of the specified line(0…getLineCount() - 1).
  `final Directions`
  `getLineDirections(int line)`
  Returns the directional run information for the specified line.
  `int`
  `getLineStart(int line)`
  Return the text offset of the beginning of the specified line ( 0…getLineCount()).
  `int`
  `getLineTop(int line)`
  Return the vertical position of the top of the specified line (0…getLineCount()).
  `int`
  `getNumberOfBlocks()`
  `int`
  `getParagraphDirection(int line)`
  Returns the primary directionality of the paragraph containing the specified line, either 1 for left-to-right lines, or -1 for right-to-left lines (see `Layout.DIR_LEFT_TO_RIGHT`, `Layout.DIR_RIGHT_TO_LEFT`).
  `int`
  `getTopPadding()`
  Returns the (negative) number of extra pixels of ascent padding in the top line of the Layout.
  `void`
  `reflow(CharSequence s, int where, int before, int after)`
  `void`
  `setBlockIndex(int index, int blockIndex)`
  `void`
  `setBlocksDataForTest(int[] blockEndLines, int[] blockIndices, int numberOfBlocks, int totalLines)`
  This method is used for test purposes only.
  `void`
  `setIndexFirstChangedBlock(int i)`
  `void`
  `updateBlocks(int startLine, int endLine, int newLineCount)`
  This method is called every time the layout is reflowed after an edition.

  ### Methods inherited from class icyllis.modernui.text.Layout

  `draw, drawBackground, drawText, getAlignment, getCursorPath, getDesiredWidth, getDesiredWidth, getDesiredWidth, getDesiredWidthWithLimit, getHeight, getHeight, getIndentAdjust, getLineAscent, getLineBaseline, getLineBottom, getLineBounds, getLineEnd, getLineForOffset, getLineForVertical, getLineLeft, getLineMax, getLineRangeForDraw, getLineRight, getLineVisibleEnd, getLineWidth, getOffsetForHorizontal, getOffsetForHorizontal, getOffsetToLeftOf, getOffsetToRightOf, getPaint, getParagraphAlignment, getParagraphLeft, getParagraphRight, getPrimaryHorizontal, getPrimaryHorizontal, getSecondaryHorizontal, getSecondaryHorizontal, getSelectionPath, getText, getTextDirectionHeuristic, getWidth, increaseWidthTo, isLevelBoundary, isRtlCharAt, primaryIsTrailingPrevious, primaryIsTrailingPreviousAllLineOffsets`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### INVALID_BLOCK_INDEX

    public static final int INVALID_BLOCK_INDEX
    Value used in mBlockIndices when a block has been created or recycled and indicating that its display list needs to be re-created.
    See Also:
      - Constant Field Values

- ## Method Details

  - ### builder

    @Nonnull public static DynamicLayout.Builder builder(@Nonnull CharSequence base, @Nonnull TextPaint paint, int width)
    Obtain a builder for constructing DynamicLayout objects.

  - ### reflow

    public void reflow(CharSequence s, int where, int before, int after)

  - ### getBlocksAlwaysNeedToBeRedrawn

    @Nullable public it.unimi.dsi.fastutil.ints.IntArrayList getBlocksAlwaysNeedToBeRedrawn()

  - ### updateBlocks

    public void updateBlocks(int startLine, int endLine, int newLineCount)
    This method is called every time the layout is reflowed after an edition. It updates the internal block data structure. The text is split in blocks of contiguous lines, with at least one block for the entire text. When a range of lines is edited, new blocks (from 0 to 3 depending on the overlap structure) will replace the set of overlapping blocks. Blocks are listed in order and are represented by their ending line number. An index is associated to each block (which will be used by display lists), this class simply invalidates the index of blocks overlapping a modification.
    Parameters:
      `startLine` - the first line of the range of modified lines
      `endLine` - the last line of the range, possibly equal to startLine, lower than getLineCount()
      `newLineCount` - the number of lines that will replace the range, possibly 0

  - ### setBlocksDataForTest

    public void setBlocksDataForTest(int[] blockEndLines, int[] blockIndices, int numberOfBlocks, int totalLines)
    This method is used for test purposes only.

  - ### getBlockEndLines

    public int[] getBlockEndLines()

  - ### getBlockIndices

    public int[] getBlockIndices()

  - ### getBlockIndex

    public int getBlockIndex(int index)

  - ### setBlockIndex

    public void setBlockIndex(int index, int blockIndex)

  - ### getNumberOfBlocks

    public int getNumberOfBlocks()

  - ### getIndexFirstChangedBlock

    public int getIndexFirstChangedBlock()

  - ### setIndexFirstChangedBlock

    public void setIndexFirstChangedBlock(int i)

  - ### getLineCount

    public int getLineCount()
    Description copied from class: `Layout`
    Return the number of lines of text in this layout.
    Specified by:
      `getLineCount` in class `Layout`

  - ### getLineTop

    public int getLineTop(int line)
    Description copied from class: `Layout`
    Return the vertical position of the top of the specified line (0…getLineCount()). If the specified line is equal to the line count, returns the bottom of the last line.
    Specified by:
      `getLineTop` in class `Layout`

  - ### getLineDescent

    public int getLineDescent(int line)
    Description copied from class: `Layout`
    Return the descent of the specified line(0…getLineCount() - 1).
    Specified by:
      `getLineDescent` in class `Layout`

  - ### getLineStart

    public int getLineStart(int line)
    Description copied from class: `Layout`
    Return the text offset of the beginning of the specified line ( 0…getLineCount()). If the specified line is equal to the line count, returns the length of the text.
    Specified by:
      `getLineStart` in class `Layout`

  - ### getLineContainsTab

    public boolean getLineContainsTab(int line)
    Description copied from class: `Layout`
    Returns whether the specified line contains one or more characters that need to be handled specially, like tabs.
    Specified by:
      `getLineContainsTab` in class `Layout`

  - ### getParagraphDirection

    public int getParagraphDirection(int line)
    Description copied from class: `Layout`
    Returns the primary directionality of the paragraph containing the specified line, either 1 for left-to-right lines, or -1 for right-to-left lines (see `Layout.DIR_LEFT_TO_RIGHT`, `Layout.DIR_RIGHT_TO_LEFT`).
    Specified by:
      `getParagraphDirection` in class `Layout`

  - ### getLineDirections

    public final Directions getLineDirections(int line)
    Description copied from class: `Layout`
    Returns the directional run information for the specified line. The array alternates counts of characters in left-to-right and right-to-left segments of the line.

    NOTE: this is inadequate to support bidirectional text, and will change.

    Specified by:
      `getLineDirections` in class `Layout`

  - ### getTopPadding

    public int getTopPadding()
    Description copied from class: `Layout`
    Returns the (negative) number of extra pixels of ascent padding in the top line of the Layout.
    Specified by:
      `getTopPadding` in class `Layout`

  - ### getBottomPadding

    public int getBottomPadding()
    Description copied from class: `Layout`
    Returns the number of extra pixels of descent padding in the bottom line of the Layout.
    Specified by:
      `getBottomPadding` in class `Layout`

  - ### getEllipsizedWidth

    public int getEllipsizedWidth()
    Description copied from class: `Layout`
    Return the width to which this Layout is ellipsizing, or `Layout.getWidth()` if it is not doing anything special.
    Overrides:
      `getEllipsizedWidth` in class `Layout`

  - ### getEllipsisStart

    public int getEllipsisStart(int line)
    Description copied from class: `Layout`
    Return the offset of the first character to be ellipsized away, relative to the start of the line. (So 0 if the beginning of the line is ellipsized, not getLineStart().)
    Specified by:
      `getEllipsisStart` in class `Layout`

  - ### getEllipsisCount

    public int getEllipsisCount(int line)
    Description copied from class: `Layout`
    Returns the number of characters to be ellipsized away, or 0 if no ellipsis is to take place.
    Specified by:
      `getEllipsisCount` in class `Layout`