summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderLayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/rendering/RenderLayer.cpp')
-rw-r--r--WebCore/rendering/RenderLayer.cpp43
1 files changed, 27 insertions, 16 deletions
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index 2d2559c..27ff32f 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -143,8 +143,8 @@ RenderLayer::RenderLayer(RenderBoxModelObject* renderer)
, m_height(0)
, m_scrollX(0)
, m_scrollY(0)
- , m_scrollOriginX(0)
, m_scrollLeftOverflow(0)
+ , m_scrollTopOverflow(0)
, m_scrollWidth(0)
, m_scrollHeight(0)
, m_inResizeMode(false)
@@ -249,6 +249,15 @@ bool RenderLayer::hasAcceleratedCompositing() const
#endif
}
+bool RenderLayer::canRender3DTransforms() const
+{
+#if USE(ACCELERATED_COMPOSITING)
+ return compositor()->canRender3DTransforms();
+#else
+ return false;
+#endif
+}
+
void RenderLayer::updateLayerPositions(UpdateLayerPositionsFlags flags, IntPoint* cachedOffset)
{
if (flags & DoFullRepaint) {
@@ -310,8 +319,6 @@ void RenderLayer::updateLayerPositions(UpdateLayerPositionsFlags flags, IntPoint
updateVisibilityStatus();
- updateTransform();
-
if (flags & UpdatePagination)
updatePagination();
else
@@ -429,7 +436,7 @@ void RenderLayer::updateTransform()
ASSERT(box);
m_transform->makeIdentity();
box->style()->applyTransform(*m_transform, box->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
- makeMatrixRenderable(*m_transform, hasAcceleratedCompositing());
+ makeMatrixRenderable(*m_transform, canRender3DTransforms());
}
if (had3DTransform != has3DTransform())
@@ -446,7 +453,7 @@ TransformationMatrix RenderLayer::currentTransform() const
TransformationMatrix currTransform;
RefPtr<RenderStyle> style = renderer()->animation()->getAnimatedStyleForRenderer(renderer());
style->applyTransform(currTransform, renderBox()->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
- makeMatrixRenderable(currTransform, hasAcceleratedCompositing());
+ makeMatrixRenderable(currTransform, canRender3DTransforms());
return currTransform;
}
#endif
@@ -1341,11 +1348,12 @@ void RenderLayer::scrollToOffset(int x, int y, bool updateScrollbars, bool repai
// complicated (since it will involve testing whether our layer
// is either occluded by another layer or clipped by an enclosing
// layer or contains fixed backgrounds, etc.).
- int newScrollX = x - m_scrollOriginX;
- if (m_scrollY == y && m_scrollX == newScrollX)
+ int newScrollX = x - m_scrollOrigin.x();
+ int newScrollY = y - m_scrollOrigin.y();
+ if (m_scrollY == newScrollY && m_scrollX == newScrollX)
return;
m_scrollX = newScrollX;
- m_scrollY = y;
+ m_scrollY = newScrollY;
// Update the positions of our child layers. Don't have updateLayerPositions() update
// compositing layers, because we need to do a deep update from the compositing ancestor.
@@ -1999,22 +2007,26 @@ void RenderLayer::computeScrollDimensions(bool* needHBar, bool* needVBar)
m_scrollDimensionsDirty = false;
- bool ltr = renderer()->style()->isLeftToRightDirection();
-
int clientWidth = box->clientWidth();
int clientHeight = box->clientHeight();
- m_scrollLeftOverflow = ltr ? 0 : min(0, box->leftmostPosition(true, false) - box->borderLeft());
+ bool hasLeftOverflow = (!box->style()->isHorizontalWritingMode() || !box->style()->isLeftToRightDirection()) && box->style()->writingMode() != LeftToRightWritingMode;
+ bool hasTopOverflow = (box->style()->isHorizontalWritingMode() || !box->style()->isLeftToRightDirection()) && box->style()->writingMode() != TopToBottomWritingMode;
+
+ m_scrollLeftOverflow = !hasLeftOverflow ? 0 : min(0, box->leftmostPosition(true, false) - box->borderLeft());
+ m_scrollTopOverflow = !hasTopOverflow ? 0 : min(0, box->topmostPosition(true, false) - box->borderTop());
- int rightPos = ltr ?
+ int rightPos = !hasLeftOverflow ?
box->rightmostPosition(true, false) - box->borderLeft() :
clientWidth - m_scrollLeftOverflow;
- int bottomPos = box->lowestPosition(true, false) - box->borderTop();
+ int bottomPos = !hasTopOverflow ?
+ box->lowestPosition(true, false) - box->borderTop() :
+ clientHeight - m_scrollTopOverflow;
m_scrollWidth = max(rightPos, clientWidth);
m_scrollHeight = max(bottomPos, clientHeight);
- m_scrollOriginX = ltr ? 0 : m_scrollWidth - clientWidth;
+ m_scrollOrigin = IntPoint(!hasLeftOverflow ? 0 : m_scrollWidth - clientWidth, !hasTopOverflow ? 0 : m_scrollHeight - clientHeight);
if (needHBar)
*needHBar = rightPos > clientWidth;
@@ -2028,7 +2040,6 @@ void RenderLayer::updateOverflowStatus(bool horizontalOverflow, bool verticalOve
m_horizontalOverflow = horizontalOverflow;
m_verticalOverflow = verticalOverflow;
m_overflowStatusDirty = false;
-
return;
}
@@ -2399,7 +2410,7 @@ void RenderLayer::paintLayer(RenderLayer* rootLayer, GraphicsContext* p,
// Avoid painting layers when stylesheets haven't loaded. This eliminates FOUC.
// It's ok not to draw, because later on, when all the stylesheets do load, updateStyleSelector on the Document
// will do a full repaint().
- if (renderer()->document()->didLayoutWithPendingStylesheets() && !renderer()->isRenderView() && !renderer()->isRoot())
+ if (renderer()->document()->mayCauseFlashOfUnstyledContent() && !renderer()->isRenderView() && !renderer()->isRoot())
return;
// If this layer is totally invisible then there is nothing to paint.