setUpChildBaselineForIFC method

void setUpChildBaselineForIFC()

Implementation

void setUpChildBaselineForIFC() {
  if (_inlineFormattingContext == null) {
    setCssBaselines(first: null, last: null);
    return;
  }

  // Cache CSS baselines for this element, computed from IFC line metrics.
  // Baselines are measured from the top padding/border edge as distances,
  // consistent with how computeDistanceToActualBaseline reports.
  final double paddingTop = renderStyle.paddingTop.computedValue;
  final double borderTop = renderStyle.effectiveBorderTopWidth.computedValue;
  double? firstBaseline;
  double? lastBaseline;

  final List<ui.LineMetrics> paraLines = _inlineFormattingContext!.paragraphLineMetrics;
  if (paraLines.isNotEmpty) {
    firstBaseline = paraLines.first.baseline + paddingTop + borderTop;
    lastBaseline = paraLines.last.baseline + paddingTop + borderTop;
  } else {
    // Fallback: no line boxes produced (empty content). Synthesize from bottom margin edge for inline-block.
    final double marginBottom = renderStyle.marginBottom.computedValue;
    final double fallback = (boxSize?.height ?? size.height) + marginBottom;
    firstBaseline = fallback;
    lastBaseline = fallback;
  }

  setCssBaselines(first: firstBaseline, last: lastBaseline);
}