measureBlock method
List<DiagramMeasuredTextLine>
measureBlock(
- TextParagraph block,
- DiagramTextRegionLayout region,
- double availableWidth
override
Shapes every block into at least one finite, positive-height visual line, including an empty block. Offsets remain relative to canonical block text. The same line metrics drive placement, carets, selection and owner growth.
Implementation
@override
List<DiagramMeasuredTextLine> measureBlock(
TextParagraph block,
DiagramTextRegionLayout region,
double availableWidth,
) {
final fontSize = block.runs.isEmpty
? region.defaultFontSize
: block.runs
.map((run) => run.fontSize ?? region.defaultFontSize)
.reduce(math.max);
final scale = fontSize / diagramDefaultFontSize;
final charWidth = characterWidth * scale;
final slices = region.singleLine || !region.wrapText
? [(0, block.plainText.length)]
: _lineSlices(
block.plainText,
math.max(1, (availableWidth / charWidth).floor()),
);
return [
for (final slice in slices)
_measureSlice(block, slice, availableWidth, charWidth, fontSize, scale),
];
}