measureText static method
Implementation
static NodeLayout measureText(
String delimiter,
RenderContext delimiterStyle, {
Uint8List? fontBytes,
}) {
final textSpan = TextSpan(
text: delimiter,
style: delimiterStyle.textStyle(),
);
final textPainter = TextPainter(
text: textSpan,
textDirection: TextDirection.ltr,
)..layout();
final baseline = textPainter.computeDistanceToActualBaseline(
TextBaseline.alphabetic,
);
final fontSizePx = delimiterStyle.fontSize;
GlyphBounds? precise;
if (fontBytes != null) {
try {
precise = measureGlyphBounds(
text: delimiter,
fontSizePx: fontSizePx,
fontBytes: fontBytes,
fontWeightValue: delimiterStyle.fontWeight?.value ?? 400,
);
} catch (_) {}
}
final topOffset = precise != null ? (baseline - precise.ascentPx) : 0.0;
// THE FIX WE KEEP:
// Do NOT use precise?.inkWidth. Use textPainter.width to keep the
// font's mathematical padding so text like 'x=0' doesn't collide.
final width = textPainter.width;
final height = precise?.inkHeight ?? textPainter.height;
return NodeLayout(
width: width,
height: height,
baseline: precise?.ascentPx ?? baseline,
draw: (Canvas canvas, double x, double y) {
textPainter.paint(canvas, Offset(x, y - topOffset));
},
);
}