[MathML only] fix weirdness in the edge case of an empty <mfenced></mfenced>
This commit is contained in:
Родитель
8d8ee23c46
Коммит
cbff0857fe
|
@ -981,6 +981,10 @@ struct nsBoundingMetrics {
|
|||
to follow the current one. Depending on the font, this
|
||||
could be greater than or less than the right bearing. */
|
||||
|
||||
nsBoundingMetrics() {
|
||||
Clear();
|
||||
}
|
||||
|
||||
//////////
|
||||
// Utility methods and operators:
|
||||
|
||||
|
|
|
@ -1491,7 +1491,7 @@ nsMathMLChar::Stretch(nsIPresContext* aPresContext,
|
|||
targetSize = aContainerSize.width;
|
||||
}
|
||||
// if we are not a largeop in display mode, return if size fits
|
||||
if (!largeop && IsSizeOK(charSize, targetSize, aStretchHint)) {
|
||||
if (targetSize <= 0 || (!largeop && IsSizeOK(charSize, targetSize, aStretchHint))) {
|
||||
// ensure that the char later behaves like a normal char
|
||||
// (will be reset back to its intrinsic value in case of dynamic updates)
|
||||
mDirection = NS_STRETCH_DIRECTION_UNSUPPORTED;
|
||||
|
|
|
@ -289,9 +289,9 @@ nsMathMLmfencedFrame::doReflow(nsIPresContext* aPresContext,
|
|||
nsSize availSize(aReflowState.mComputedWidth, aReflowState.mComputedHeight);
|
||||
nsHTMLReflowMetrics childDesiredSize(aDesiredSize.maxElementSize,
|
||||
aDesiredSize.mFlags | NS_REFLOW_CALC_BOUNDING_METRICS);
|
||||
nsIFrame* fisrtChild;
|
||||
aForFrame->FirstChild(aPresContext, nsnull, &fisrtChild);
|
||||
nsIFrame* childFrame = fisrtChild;
|
||||
nsIFrame* firstChild;
|
||||
aForFrame->FirstChild(aPresContext, nsnull, &firstChild);
|
||||
nsIFrame* childFrame = firstChild;
|
||||
while (childFrame) {
|
||||
nsHTMLReflowState childReflowState(aPresContext, aReflowState,
|
||||
childFrame, availSize);
|
||||
|
@ -337,7 +337,7 @@ nsMathMLmfencedFrame::doReflow(nsIPresContext* aPresContext,
|
|||
mathMLFrame->GetPreferredStretchSize(aPresContext, *aReflowState.rendContext,
|
||||
0, /* i.e., without embellishments */
|
||||
stretchDir, containerSize);
|
||||
childFrame = fisrtChild;
|
||||
childFrame = firstChild;
|
||||
while (childFrame) {
|
||||
nsIMathMLFrame* mathmlChild;
|
||||
childFrame->QueryInterface(NS_GET_IID(nsIMathMLFrame), (void**)&mathmlChild);
|
||||
|
@ -376,10 +376,12 @@ nsMathMLmfencedFrame::doReflow(nsIPresContext* aPresContext,
|
|||
GetEmHeight(fm, em);
|
||||
|
||||
// we need to center around the axis
|
||||
nscoord delta = PR_MAX(containerSize.ascent - axisHeight,
|
||||
containerSize.descent + axisHeight);
|
||||
containerSize.ascent = delta + axisHeight;
|
||||
containerSize.descent = delta - axisHeight;
|
||||
if (firstChild) { // do nothing for an empty <mfenced></mfenced>
|
||||
nscoord delta = PR_MAX(containerSize.ascent - axisHeight,
|
||||
containerSize.descent + axisHeight);
|
||||
containerSize.ascent = delta + axisHeight;
|
||||
containerSize.descent = delta - axisHeight;
|
||||
}
|
||||
|
||||
/////////////////
|
||||
// opening fence ...
|
||||
|
@ -413,7 +415,7 @@ nsMathMLmfencedFrame::doReflow(nsIPresContext* aPresContext,
|
|||
firstTime = PR_FALSE;
|
||||
}
|
||||
|
||||
childFrame = fisrtChild;
|
||||
childFrame = firstChild;
|
||||
while (childFrame) {
|
||||
nsHTMLReflowMetrics childSize(nsnull);
|
||||
GetReflowAndBoundingMetricsFor(childFrame, childSize, bm);
|
||||
|
|
Загрузка…
Ссылка в новой задаче