Package icyllis.modernui.text
Class DynamicLayout
java.lang.Object
icyllis.modernui.text.Layout
icyllis.modernui.text.DynamicLayout
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classBuilder for dynamic layouts.Nested classes/interfaces inherited from class icyllis.modernui.text.Layout
Layout.Alignment -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intValue 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 TypeMethodDescriptionstatic DynamicLayout.Builderbuilder(CharSequence base, TextPaint paint, int width) Obtain a builder for constructing DynamicLayout objects.int[]intgetBlockIndex(int index) int[]it.unimi.dsi.fastutil.ints.IntArrayListintReturns the number of extra pixels of descent padding in the bottom line of the Layout.intgetEllipsisCount(int line) Returns the number of characters to be ellipsized away, or 0 if no ellipsis is to take place.intgetEllipsisStart(int line) Return the offset of the first character to be ellipsized away, relative to the start of the line.intReturn the width to which this Layout is ellipsizing, orLayout.getWidth()if it is not doing anything special.intbooleangetLineContainsTab(int line) Returns whether the specified line contains one or more characters that need to be handled specially, like tabs.intReturn the number of lines of text in this layout.intgetLineDescent(int line) Return the descent of the specified line(0…getLineCount() - 1).final DirectionsgetLineDirections(int line) Returns the directional run information for the specified line.intgetLineExtra(int line) intgetLineStart(int line) Return the text offset of the beginning of the specified line ( 0…getLineCount()).intgetLineTop(int line) Return the vertical position of the top of the specified line (0…getLineCount()).intintgetParagraphDirection(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 (seeLayout.DIR_LEFT_TO_RIGHT,Layout.DIR_RIGHT_TO_LEFT).intReturns the (negative) number of extra pixels of ascent padding in the top line of the Layout.voidreflow(CharSequence s, int where, int before, int after) voidsetBlockIndex(int index, int blockIndex) voidsetBlocksDataForTest(int[] blockEndLines, int[] blockIndices, int numberOfBlocks, int totalLines) This method is used for test purposes only.voidsetIndexFirstChangedBlock(int i) voidupdateBlocks(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, getHeight, getHeight, getIndentAdjust, getLineAscent, getLineBaseline, getLineBottom, getLineBottom, getLineBounds, getLineEnd, getLineForOffset, getLineForVertical, getLineLeft, getLineMax, getLineRangeForDraw, getLineRight, getLineVisibleEnd, getLineWidth, getOffsetForHorizontal, getOffsetToLeftOf, getOffsetToRightOf, getPaint, getParagraphAlignment, getParagraphLeft, getParagraphRight, getPrimaryHorizontal, getSecondaryHorizontal, getSelectionPath, getSpacingAdd, getSpacingMultiplier, getText, getTextDirectionHeuristic, getWidth, increaseWidthTo, isRtlCharAt
-
Field Details
-
INVALID_BLOCK_INDEX
public static final int INVALID_BLOCK_INDEXValue 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
-
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 linesendLine- 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:LayoutReturn the number of lines of text in this layout.- Specified by:
getLineCountin classLayout
-
getLineTop
public int getLineTop(int line) Description copied from class:LayoutReturn 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:
getLineTopin classLayout
-
getLineDescent
public int getLineDescent(int line) Description copied from class:LayoutReturn the descent of the specified line(0…getLineCount() - 1).- Specified by:
getLineDescentin classLayout
-
getLineExtra
public int getLineExtra(int line) -
getLineStart
public int getLineStart(int line) Description copied from class:LayoutReturn 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:
getLineStartin classLayout
-
getLineContainsTab
public boolean getLineContainsTab(int line) Description copied from class:LayoutReturns whether the specified line contains one or more characters that need to be handled specially, like tabs.- Specified by:
getLineContainsTabin classLayout
-
getParagraphDirection
public int getParagraphDirection(int line) Description copied from class:LayoutReturns the primary directionality of the paragraph containing the specified line, either 1 for left-to-right lines, or -1 for right-to-left lines (seeLayout.DIR_LEFT_TO_RIGHT,Layout.DIR_RIGHT_TO_LEFT).- Specified by:
getParagraphDirectionin classLayout
-
getLineDirections
Description copied from class:LayoutReturns 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:
getLineDirectionsin classLayout
-
getTopPadding
public int getTopPadding()Description copied from class:LayoutReturns the (negative) number of extra pixels of ascent padding in the top line of the Layout.- Specified by:
getTopPaddingin classLayout
-
getBottomPadding
public int getBottomPadding()Description copied from class:LayoutReturns the number of extra pixels of descent padding in the bottom line of the Layout.- Specified by:
getBottomPaddingin classLayout
-
getEllipsizedWidth
public int getEllipsizedWidth()Description copied from class:LayoutReturn the width to which this Layout is ellipsizing, orLayout.getWidth()if it is not doing anything special.- Overrides:
getEllipsizedWidthin classLayout
-
getEllipsisStart
public int getEllipsisStart(int line) Description copied from class:LayoutReturn 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:
getEllipsisStartin classLayout
-
getEllipsisCount
public int getEllipsisCount(int line) Description copied from class:LayoutReturns the number of characters to be ellipsized away, or 0 if no ellipsis is to take place.- Specified by:
getEllipsisCountin classLayout
-