Index: Source/core/rendering/RenderLayer.cpp |
diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp |
index 99e2c5dddab1c8fa92c297fa344fa40f9dda6a6a..0be34254a2b9fd8e737e4074ea634245589b50ba 100644 |
--- a/Source/core/rendering/RenderLayer.cpp |
+++ b/Source/core/rendering/RenderLayer.cpp |
@@ -2049,7 +2049,7 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend |
for (i = 0; i < colCount; i++) { |
LayoutRect colRect = columnBlock->columnRectAt(colInfo, i); |
LayoutUnit blockDelta = (isHorizontal ? colRect.height() : colRect.width()); |
- if (columnBlock->style()->isFlippedBlocksWritingMode()) |
+ if (columnBlock->style()->slowIsFlippedBlocksWritingMode()) |
currLogicalTopOffset += blockDelta; |
else |
currLogicalTopOffset -= blockDelta; |
@@ -2060,7 +2060,7 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend |
columnBlock->flipForWritingMode(colRect); |
LayoutUnit currLogicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - logicalLeft; |
LayoutUnit blockDelta = (isHorizontal ? colRect.height() : colRect.width()); |
- if (columnBlock->style()->isFlippedBlocksWritingMode()) |
+ if (columnBlock->style()->slowIsFlippedBlocksWritingMode()) |
currLogicalTopOffset -= blockDelta; |
else |
currLogicalTopOffset += blockDelta; |
@@ -2249,19 +2249,22 @@ LayoutRect RenderLayer::logicalBoundingBox() const |
return result; |
} |
-LayoutRect RenderLayer::flippedLogicalBoundingBox() const |
+static inline LayoutRect flippedLogicalBoundingBox(LayoutRect boundingBox, RenderObject* renderer) |
{ |
- LayoutRect result = logicalBoundingBox(); |
- if (m_renderer->isBox()) |
- renderBox()->flipForWritingMode(result); |
+ if (!UNLIKELY(renderer->document().containsAnyRareWritingMode())) |
+ return boundingBox; |
+ |
+ LayoutRect result = boundingBox; |
+ if (renderer->isBox()) |
+ toRenderBox(renderer)->flipForWritingMode(result); |
else |
- m_renderer->containingBlock()->flipForWritingMode(result); |
+ renderer->containingBlock()->flipForWritingMode(result); |
return result; |
} |
LayoutRect RenderLayer::physicalBoundingBox(const RenderLayer* ancestorLayer, const LayoutPoint* offsetFromRoot) const |
{ |
- LayoutRect result = flippedLogicalBoundingBox(); |
+ LayoutRect result = flippedLogicalBoundingBox(logicalBoundingBox(), renderer()); |
if (offsetFromRoot) |
result.moveBy(*offsetFromRoot); |
else |
@@ -2274,11 +2277,16 @@ LayoutRect RenderLayer::fragmentsBoundingBox(const RenderLayer* ancestorLayer) c |
if (!enclosingPaginationLayer()) |
return physicalBoundingBox(ancestorLayer); |
- LayoutRect result = flippedLogicalBoundingBox(); |
+ LayoutRect result = flippedLogicalBoundingBox(logicalBoundingBox(), renderer()); |
convertFromFlowThreadToVisualBoundingBoxInAncestor(this, ancestorLayer, result); |
return result; |
} |
+LayoutRect RenderLayer::boundingBoxForCompositingOverlapTest() const |
+{ |
+ return overlapBoundsIncludeChildren() ? boundingBoxForCompositing() : flippedLogicalBoundingBox(logicalBoundingBox(), renderer()); |
+} |
+ |
static void expandRectForReflectionAndStackingChildren(const RenderLayer* ancestorLayer, RenderLayer::CalculateBoundsOptions options, LayoutRect& result) |
{ |
if (ancestorLayer->reflectionInfo() && !ancestorLayer->reflectionInfo()->reflectionLayer()->hasCompositedLayerMapping()) |