NS_IMETHODIMP nsMathMLmoFrame::Reflow(nsPresContext* aPresContext, nsHTMLReflowMetrics& aDesiredSize, const nsHTMLReflowState& aReflowState, nsReflowStatus& aStatus) { // certain values use units that depend on our style context, so // it is safer to just process the whole lot here ProcessOperatorData(); // play safe by not passing invisible operators to the font subsystem because // some platforms risk selecting strange glyphs for them and give bad inter-space if (NS_MATHML_OPERATOR_IS_INVISIBLE(mFlags)) { // return empty space for now, but this is not yet final since there // can be lspace and rspace attributes that reclaim some room. // These will be dealt with later in Stretch(). aDesiredSize.width = 0; aDesiredSize.height = 0; aDesiredSize.ascent = 0; aDesiredSize.mBoundingMetrics = nsBoundingMetrics(); aStatus = NS_FRAME_COMPLETE; NS_FRAME_SET_TRUNCATION(aStatus, aReflowState, aDesiredSize); return NS_OK; } return nsMathMLTokenFrame::Reflow(aPresContext, aDesiredSize, aReflowState, aStatus); }
/* virtual */ void nsMathMLmoFrame::GetIntrinsicISizeMetrics(nsRenderingContext *aRenderingContext, nsHTMLReflowMetrics& aDesiredSize) { ProcessOperatorData(); if (UseMathMLChar()) { uint32_t stretchHint = GetStretchHint(mFlags, mPresentationData, true, StyleFont()); aDesiredSize.Width() = mMathMLChar. GetMaxWidth(PresContext(), *aRenderingContext, stretchHint, mMaxSize, NS_MATHML_OPERATOR_MAXSIZE_IS_ABSOLUTE(mFlags)); } else { nsMathMLTokenFrame::GetIntrinsicISizeMetrics(aRenderingContext, aDesiredSize); } // leadingSpace and trailingSpace are actually applied to the outermost // embellished container but for determining total intrinsic width it should // be safe to include it for the core here instead. bool isRTL = StyleVisibility()->mDirection; aDesiredSize.Width() += mEmbellishData.leadingSpace + mEmbellishData.trailingSpace; aDesiredSize.mBoundingMetrics.width = aDesiredSize.Width(); if (isRTL) { aDesiredSize.mBoundingMetrics.leftBearing += mEmbellishData.trailingSpace; aDesiredSize.mBoundingMetrics.rightBearing += mEmbellishData.trailingSpace; } else { aDesiredSize.mBoundingMetrics.leftBearing += mEmbellishData.leadingSpace; aDesiredSize.mBoundingMetrics.rightBearing += mEmbellishData.leadingSpace; } }
NS_IMETHODIMP nsMathMLmoFrame::TransmitAutomaticData() { // this will cause us to re-sync our flags from scratch // but our returned 'form' is still not final (bug 133429), it will // be recomputed to its final value during the next call in Reflow() mEmbellishData.coreFrame = nullptr; ProcessOperatorData(); return NS_OK; }
void nsMathMLmoFrame::Reflow(nsPresContext* aPresContext, nsHTMLReflowMetrics& aDesiredSize, const nsHTMLReflowState& aReflowState, nsReflowStatus& aStatus) { // certain values use units that depend on our style context, so // it is safer to just process the whole lot here ProcessOperatorData(); nsMathMLTokenFrame::Reflow(aPresContext, aDesiredSize, aReflowState, aStatus); }
/* virtual */ nscoord nsMathMLmoFrame::GetIntrinsicWidth(nsRenderingContext *aRenderingContext) { ProcessOperatorData(); nscoord width; if (UseMathMLChar()) { uint32_t stretchHint = GetStretchHint(mFlags, mPresentationData, true); width = mMathMLChar. GetMaxWidth(PresContext(), *aRenderingContext, stretchHint, mMaxSize, NS_MATHML_OPERATOR_MAXSIZE_IS_ABSOLUTE(mFlags)); } else { width = nsMathMLTokenFrame::GetIntrinsicWidth(aRenderingContext); } // leadingSpace and trailingSpace are actually applied to the outermost // embellished container but for determining total intrinsic width it should // be safe to include it for the core here instead. width += mEmbellishData.leadingSpace + mEmbellishData.trailingSpace; return width; }