Package icyllis.modernui.text
Class DynamicLayout
java.lang.Object
icyllis.modernui.text.Layout
icyllis.modernui.text.DynamicLayout
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic final class
Builder for dynamic layouts.Nested classes/interfaces inherited from class icyllis.modernui.text.Layout
Layout.Alignment
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
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 TypeMethodDescriptionstatic DynamicLayout.Builder
builder
(CharSequence base, TextPaint paint, int width) Obtain a builder for constructing DynamicLayout objects.int[]
int
getBlockIndex
(int index) int[]
it.unimi.dsi.fastutil.ints.IntArrayList
int
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
Return the width to which this Layout is ellipsizing, orLayout.getWidth()
if it is not doing anything special.int
boolean
getLineContainsTab
(int line) Returns whether the specified line contains one or more characters that need to be handled specially, like tabs.int
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
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 (seeLayout.DIR_LEFT_TO_RIGHT
,Layout.DIR_RIGHT_TO_LEFT
).int
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
-
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:Layout
Return the number of lines of text in this layout.- Specified by:
getLineCount
in classLayout
-
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 classLayout
-
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 classLayout
-
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 classLayout
-
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 classLayout
-
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 (seeLayout.DIR_LEFT_TO_RIGHT
,Layout.DIR_RIGHT_TO_LEFT
).- Specified by:
getParagraphDirection
in classLayout
-
getLineDirections
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 classLayout
-
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 classLayout
-
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 classLayout
-
getEllipsizedWidth
public int getEllipsizedWidth()Description copied from class:Layout
Return the width to which this Layout is ellipsizing, orLayout.getWidth()
if it is not doing anything special.- Overrides:
getEllipsizedWidth
in classLayout
-
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 classLayout
-
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 classLayout
-