Index: third_party/WebKit/WebCore/rendering/RenderLayer.cpp |
=================================================================== |
--- third_party/WebKit/WebCore/rendering/RenderLayer.cpp (revision 11154) |
+++ third_party/WebKit/WebCore/rendering/RenderLayer.cpp (working copy) |
@@ -341,6 +341,23 @@ |
dirty3DTransformedDescendantStatus(); |
} |
+TransformationMatrix RenderLayer::currentTransform() const |
+{ |
+ if (!m_transform) |
+ return TransformationMatrix(); |
+ |
+#if USE(ACCELERATED_COMPOSITING) |
+ if (renderer()->style()->isRunningAcceleratedAnimation()) { |
+ TransformationMatrix currTransform; |
+ RefPtr<RenderStyle> style = renderer()->animation()->getAnimatedStyleForRenderer(renderer()); |
+ style->applyTransform(currTransform, renderBox()->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin); |
+ return currTransform; |
+ } |
+#endif |
+ |
+ return *m_transform; |
+} |
+ |
void RenderLayer::setHasVisibleContent(bool b) |
{ |
if (m_hasVisibleContent == b && !m_visibleContentStatusDirty) |
@@ -593,13 +610,12 @@ |
style->perspectiveOriginY().calcFloatValue(borderBox.height())); |
} |
-RenderLayer *RenderLayer::stackingContext() const |
+RenderLayer* RenderLayer::stackingContext() const |
{ |
- RenderLayer* curr = parent(); |
- for ( ; curr && !curr->renderer()->isRenderView() && !curr->renderer()->isRoot() && |
- curr->renderer()->style()->hasAutoZIndex(); |
- curr = curr->parent()) { } |
- return curr; |
+ RenderLayer* layer = parent(); |
+ while (layer && !layer->renderer()->isRenderView() && !layer->renderer()->isRoot() && layer->renderer()->style()->hasAutoZIndex()) |
+ layer = layer->parent(); |
+ return layer; |
} |
RenderLayer* RenderLayer::enclosingPositionedAncestor() const |
@@ -753,7 +769,7 @@ |
} |
void RenderLayer::destroy(RenderArena* renderArena) |
-{ |
+{ |
delete this; |
// Recover the size left there for us by operator delete and free the memory. |
@@ -863,8 +879,8 @@ |
current->updateLayerPositions(); |
current = next; |
} |
- |
- destroy(renderer()->renderArena()); |
+ |
+ m_renderer->destroyLayer(); |
} |
void RenderLayer::insertOnlyThisLayer() |
@@ -1771,6 +1787,7 @@ |
// Clipping will exclude the right and bottom edges of this frame. |
if (m_hBar || m_vBar) { |
context->save(); |
+ context->clip(absRect); |
IntRect largerCorner = absRect; |
largerCorner.setSize(IntSize(largerCorner.width() + 1, largerCorner.height() + 1)); |
context->setStrokeColor(Color(makeRGB(217, 217, 217))); |
@@ -2229,13 +2246,17 @@ |
// Now do a hit test with the root layer shifted to be us. |
return hitTestLayer(this, containerLayer, request, result, localHitTestRect, localPoint, true, newTransformState.get(), zOffset); |
} |
+ |
+ // Ensure our lists and 3d status are up-to-date. |
+ updateLayerListsIfNeeded(); |
+ update3DTransformedDescendantStatus(); |
RefPtr<HitTestingTransformState> localTransformState; |
if (appliedTransform) { |
// We computed the correct state in the caller (above code), so just reference it. |
ASSERT(transformState); |
localTransformState = const_cast<HitTestingTransformState*>(transformState); |
- } else if (transformState || m_has3DTransformedDescendant) { |
+ } else if (transformState || m_has3DTransformedDescendant || preserves3D()) { |
// We need transform state for the first time, or to offset the container state, so create it here. |
localTransformState = createLocalTransformState(rootLayer, containerLayer, hitTestRect, hitTestPoint, transformState); |
} |
@@ -2255,10 +2276,6 @@ |
IntRect outlineRect; |
calculateRects(rootLayer, hitTestRect, layerBounds, bgRect, fgRect, outlineRect); |
- // Ensure our lists and 3d status are up-to-date. |
- updateLayerListsIfNeeded(); |
- update3DTransformedDescendantStatus(); |
- |
// The following are used for keeping track of the z-depth of the hit point of 3d-transformed |
// descendants. |
double localZOffset = -numeric_limits<double>::infinity(); |