Index: Source/core/rendering/RootInlineBox.cpp |
diff --git a/Source/core/rendering/RootInlineBox.cpp b/Source/core/rendering/RootInlineBox.cpp |
index 088f725676fa2654eccb25b4bbe2f1ea3fa4a19e..b8c1b2422ea9a45164133f10a415fd576aece4ea 100644 |
--- a/Source/core/rendering/RootInlineBox.cpp |
+++ b/Source/core/rendering/RootInlineBox.cpp |
@@ -727,13 +727,13 @@ LayoutUnit RootInlineBox::verticalPositionForBox(InlineBox* box, VerticalPositio |
return 0; |
// This method determines the vertical position for inline elements. |
- bool firstLine = isFirstLineStyle(); |
- if (firstLine && !renderer->document().styleEngine()->usesFirstLineRules()) |
- firstLine = false; |
+ OwnOrFirstLineStyle ownOrFirstLineStyle = isFirstLineStyle(); |
+ if (ownOrFirstLineStyle == FirstLineStyle && !renderer->document().styleEngine()->usesFirstLineRules()) |
+ ownOrFirstLineStyle = OwnStyle; |
// Check the cache. |
bool isRenderInline = renderer->isRenderInline(); |
- if (isRenderInline && !firstLine) { |
+ if (isRenderInline && ownOrFirstLineStyle == OwnStyle) { |
LayoutUnit verticalPosition = verticalPositionCache.get(renderer, baselineType()); |
if (verticalPosition != PositionUndefined) |
return verticalPosition; |
@@ -749,7 +749,7 @@ LayoutUnit RootInlineBox::verticalPositionForBox(InlineBox* box, VerticalPositio |
verticalPosition = box->parent()->logicalTop(); |
if (verticalAlign != BASELINE) { |
- const Font& font = parent->style(firstLine)->font(); |
+ const Font& font = parent->style(ownOrFirstLineStyle)->font(); |
const FontMetrics& fontMetrics = font.fontMetrics(); |
int fontSize = font.fontDescription().computedPixelSize(); |
@@ -760,29 +760,29 @@ LayoutUnit RootInlineBox::verticalPositionForBox(InlineBox* box, VerticalPositio |
else if (verticalAlign == SUPER) |
verticalPosition -= fontSize / 3 + 1; |
else if (verticalAlign == TEXT_TOP) |
- verticalPosition += renderer->baselinePosition(baselineType(), firstLine, lineDirection) - fontMetrics.ascent(baselineType()); |
+ verticalPosition += renderer->baselinePosition(baselineType(), ownOrFirstLineStyle, lineDirection) - fontMetrics.ascent(baselineType()); |
else if (verticalAlign == MIDDLE) |
- verticalPosition = (verticalPosition - static_cast<LayoutUnit>(fontMetrics.xHeight() / 2) - renderer->lineHeight(firstLine, lineDirection) / 2 + renderer->baselinePosition(baselineType(), firstLine, lineDirection)).round(); |
+ verticalPosition = (verticalPosition - static_cast<LayoutUnit>(fontMetrics.xHeight() / 2) - renderer->lineHeight(ownOrFirstLineStyle, lineDirection) / 2 + renderer->baselinePosition(baselineType(), ownOrFirstLineStyle, lineDirection)).round(); |
else if (verticalAlign == TEXT_BOTTOM) { |
verticalPosition += fontMetrics.descent(baselineType()); |
// lineHeight - baselinePosition is always 0 for replaced elements (except inline blocks), so don't bother wasting time in that case. |
if (!renderer->isReplaced() || renderer->isInlineBlockOrInlineTable()) |
- verticalPosition -= (renderer->lineHeight(firstLine, lineDirection) - renderer->baselinePosition(baselineType(), firstLine, lineDirection)); |
+ verticalPosition -= (renderer->lineHeight(ownOrFirstLineStyle, lineDirection) - renderer->baselinePosition(baselineType(), ownOrFirstLineStyle, lineDirection)); |
} else if (verticalAlign == BASELINE_MIDDLE) |
- verticalPosition += -renderer->lineHeight(firstLine, lineDirection) / 2 + renderer->baselinePosition(baselineType(), firstLine, lineDirection); |
+ verticalPosition += -renderer->lineHeight(ownOrFirstLineStyle, lineDirection) / 2 + renderer->baselinePosition(baselineType(), ownOrFirstLineStyle, lineDirection); |
else if (verticalAlign == LENGTH) { |
LayoutUnit lineHeight; |
//Per http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align: 'Percentages: refer to the 'line-height' of the element itself'. |
if (renderer->style()->verticalAlignLength().isPercent()) |
lineHeight = renderer->style()->computedLineHeight(); |
else |
- lineHeight = renderer->lineHeight(firstLine, lineDirection); |
+ lineHeight = renderer->lineHeight(ownOrFirstLineStyle, lineDirection); |
verticalPosition -= valueForLength(renderer->style()->verticalAlignLength(), lineHeight); |
} |
} |
// Store the cached value. |
- if (isRenderInline && !firstLine) |
+ if (isRenderInline && ownOrFirstLineStyle == OwnStyle) |
verticalPositionCache.set(renderer, baselineType(), verticalPosition); |
return verticalPosition; |