measureBlock method

  1. @override
List<DiagramMeasuredTextLine> measureBlock(
  1. TextParagraph block,
  2. DiagramTextRegionLayout region,
  3. 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),
  ];
}