| Differences between
and this patch
- a/WebCore/ChangeLog +17 lines
Lines 1-3 a/WebCore/ChangeLog_sec1
1
2009-03-04  Simon Fraser  <simon.fraser@apple.com>
2
3
        Reviewed by NOBODY (OOPS!).
4
5
        https://bugs.webkit.org/show_bug.cgi?id=24327
6
        
7
        When mapping points and hit testing through transforms, work
8
        correctly when acclerated animations of transforms are running.
9
        
10
        Tested by LayoutTests/animations/animation-hit-test-transform.html
11
12
        * rendering/RenderLayer.cpp:
13
        (WebCore::RenderLayer::currentTransform):
14
        * rendering/RenderLayer.h:
15
        * rendering/RenderObject.cpp:
16
        (WebCore::RenderObject::transformFromContainer):
17
1
2009-03-04  David Levin  <levin@chromium.org>
18
2009-03-04  David Levin  <levin@chromium.org>
2
19
3
        Reviewed by Alexey Proskuryakov.
20
        Reviewed by Alexey Proskuryakov.
- a/WebCore/rendering/RenderLayer.cpp +16 lines
Lines 341-346 void RenderLayer::updateTransform() a/WebCore/rendering/RenderLayer.cpp_sec1
341
        dirty3DTransformedDescendantStatus();
341
        dirty3DTransformedDescendantStatus();
342
}
342
}
343
343
344
bool RenderLayer::currentTransform(TransformationMatrix& transform) const
345
{
346
    if (!m_transform)
347
        return false;
348
349
#if USE(ACCELERATED_COMPOSITING)
350
    if (renderer()->style()->isRunningAcceleratedAnimation()) {
351
        RefPtr<RenderStyle> style = renderer()->animation()->getAnimatedStyleForRenderer(renderer());
352
        style->applyTransform(transform, renderBox()->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
353
    } else
354
#endif
355
        transform = *m_transform.get();
356
        
357
    return true;
358
}
359
344
void RenderLayer::setHasVisibleContent(bool b)
360
void RenderLayer::setHasVisibleContent(bool b)
345
{ 
361
{ 
346
    if (m_hasVisibleContent == b && !m_visibleContentStatusDirty)
362
    if (m_hasVisibleContent == b && !m_visibleContentStatusDirty)
- a/WebCore/rendering/RenderLayer.h +4 lines
Lines 401-406 public: a/WebCore/rendering/RenderLayer.h_sec1
401
    bool hasTransform() const { return renderer()->hasTransform(); }
401
    bool hasTransform() const { return renderer()->hasTransform(); }
402
    // Note that this transform has the transform-origin baked in.
402
    // Note that this transform has the transform-origin baked in.
403
    TransformationMatrix* transform() const { return m_transform.get(); }
403
    TransformationMatrix* transform() const { return m_transform.get(); }
404
    // currentTransform computes a transform which takes accelerated animations into account. The
405
    // resulting transform has transform-origin baked in. Returns true if the layer has a transform.
406
    bool currentTransform(TransformationMatrix& transform) const;
407
    
404
    // Get the perspective transform, which is applied to transformed sublayers.
408
    // Get the perspective transform, which is applied to transformed sublayers.
405
    // Returns true if the layer has a -webkit-perspective.
409
    // Returns true if the layer has a -webkit-perspective.
406
    // Note that this transform has the perspective-origin baked in.
410
    // Note that this transform has the perspective-origin baked in.
- a/WebCore/rendering/RenderObject.cpp -2 / +5 lines
Lines 1687-1694 TransformationMatrix RenderObject::transformFromContainer(const RenderObject* co a/WebCore/rendering/RenderObject.cpp_sec1
1687
    TransformationMatrix containerTransform;
1687
    TransformationMatrix containerTransform;
1688
    containerTransform.translate(offsetInContainer.width(), offsetInContainer.height());
1688
    containerTransform.translate(offsetInContainer.width(), offsetInContainer.height());
1689
    RenderLayer* layer;
1689
    RenderLayer* layer;
1690
    if (hasLayer() && (layer = toRenderBox(this)->layer()) && layer->transform())
1690
    if (hasLayer() && (layer = toRenderBox(this)->layer()) && layer->transform()) {
1691
        containerTransform.multLeft(*layer->transform());
1691
        TransformationMatrix curTransform;
1692
        layer->currentTransform(curTransform);
1693
        containerTransform.multLeft(curTransform);
1694
    }
1692
    
1695
    
1693
    if (containerObject && containerObject->style()->hasPerspective()) {
1696
    if (containerObject && containerObject->style()->hasPerspective()) {
1694
        // Perpsective on the container affects us, so we have to factor it in here.
1697
        // Perpsective on the container affects us, so we have to factor it in here.

Return to Bug 24327