Class DynamicLayout

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

public class DynamicLayout extends Layout
  • 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:
  • 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