Diff
Modified: trunk/Source/WebCore/ChangeLog (243102 => 243103)
--- trunk/Source/WebCore/ChangeLog 2019-03-18 21:22:53 UTC (rev 243102)
+++ trunk/Source/WebCore/ChangeLog 2019-03-18 21:25:37 UTC (rev 243103)
@@ -1,3 +1,37 @@
+2019-03-18 Zalan Bujtas <[email protected]>
+
+ Move animation and transition functions from RenderBoxModelObject to RenderElement
+ https://bugs.webkit.org/show_bug.cgi?id=195903
+
+ Reviewed by Simon Fraser.
+
+ Transitions and animations do not require RenderBoxModelObject. Move these functions to RenderElement and override them at RenderLayerModelObject to support
+ composition related callbacks.
+
+ * page/animation/AnimationBase.cpp:
+ (WebCore::AnimationBase::compositedRenderer const):
+ * page/animation/AnimationBase.h:
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::startTransition): Deleted.
+ (WebCore::RenderBoxModelObject::transitionPaused): Deleted.
+ (WebCore::RenderBoxModelObject::transitionFinished): Deleted.
+ (WebCore::RenderBoxModelObject::startAnimation): Deleted.
+ (WebCore::RenderBoxModelObject::animationPaused): Deleted.
+ (WebCore::RenderBoxModelObject::animationSeeked): Deleted.
+ (WebCore::RenderBoxModelObject::animationFinished): Deleted.
+ (WebCore::RenderBoxModelObject::suspendAnimations): Deleted.
+ * rendering/RenderBoxModelObject.h:
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::startTransition):
+ (WebCore::RenderElement::transitionPaused):
+ (WebCore::RenderElement::transitionFinished):
+ (WebCore::RenderElement::startAnimation):
+ (WebCore::RenderElement::animationPaused):
+ (WebCore::RenderElement::animationSeeked):
+ (WebCore::RenderElement::animationFinished):
+ (WebCore::RenderElement::suspendAnimations):
+ * rendering/RenderElement.h:
+
2019-03-18 Antti Koivisto <[email protected]>
Try to fix Windows build.
Modified: trunk/Source/WebCore/page/animation/AnimationBase.cpp (243102 => 243103)
--- trunk/Source/WebCore/page/animation/AnimationBase.cpp 2019-03-18 21:22:53 UTC (rev 243102)
+++ trunk/Source/WebCore/page/animation/AnimationBase.cpp 2019-03-18 21:25:37 UTC (rev 243103)
@@ -69,12 +69,12 @@
return m_element ? m_element->renderer() : nullptr;
}
-RenderBoxModelObject* AnimationBase::compositedRenderer() const
+RenderLayerModelObject* AnimationBase::compositedRenderer() const
{
auto* renderer = this->renderer();
if (!renderer || !renderer->isComposited())
return nullptr;
- return downcast<RenderBoxModelObject>(renderer);
+ return downcast<RenderLayerModelObject>(renderer);
}
void AnimationBase::clear()
Modified: trunk/Source/WebCore/page/animation/AnimationBase.h (243102 => 243103)
--- trunk/Source/WebCore/page/animation/AnimationBase.h 2019-03-18 21:22:53 UTC (rev 243102)
+++ trunk/Source/WebCore/page/animation/AnimationBase.h 2019-03-18 21:25:37 UTC (rev 243103)
@@ -39,7 +39,7 @@
class Element;
class FloatRect;
class LayoutRect;
-class RenderBoxModelObject;
+class RenderLayerModelObject;
class RenderElement;
class RenderStyle;
class TimingFunction;
@@ -62,7 +62,7 @@
Element* element() const { return m_element.get(); }
const RenderStyle& currentStyle() const override;
RenderElement* renderer() const override;
- RenderBoxModelObject* compositedRenderer() const;
+ RenderLayerModelObject* compositedRenderer() const;
void clear();
double duration() const;
Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (243102 => 243103)
--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp 2019-03-18 21:22:53 UTC (rev 243102)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp 2019-03-18 21:25:37 UTC (rev 243103)
@@ -161,62 +161,6 @@
return view().compositor().hasAcceleratedCompositing();
}
-bool RenderBoxModelObject::startTransition(double timeOffset, CSSPropertyID propertyId, const RenderStyle* fromStyle, const RenderStyle* toStyle)
-{
- ASSERT(hasLayer());
- ASSERT(isComposited());
- return layer()->backing()->startTransition(timeOffset, propertyId, fromStyle, toStyle);
-}
-
-void RenderBoxModelObject::transitionPaused(double timeOffset, CSSPropertyID propertyId)
-{
- ASSERT(hasLayer());
- ASSERT(isComposited());
- layer()->backing()->transitionPaused(timeOffset, propertyId);
-}
-
-void RenderBoxModelObject::transitionFinished(CSSPropertyID propertyId)
-{
- ASSERT(hasLayer());
- ASSERT(isComposited());
- layer()->backing()->transitionFinished(propertyId);
-}
-
-bool RenderBoxModelObject::startAnimation(double timeOffset, const Animation* animation, const KeyframeList& keyframes)
-{
- ASSERT(hasLayer());
- ASSERT(isComposited());
- return layer()->backing()->startAnimation(timeOffset, animation, keyframes);
-}
-
-void RenderBoxModelObject::animationPaused(double timeOffset, const String& name)
-{
- ASSERT(hasLayer());
- ASSERT(isComposited());
- layer()->backing()->animationPaused(timeOffset, name);
-}
-
-void RenderBoxModelObject::animationSeeked(double timeOffset, const String& name)
-{
- ASSERT(hasLayer());
- ASSERT(isComposited());
- layer()->backing()->animationSeeked(timeOffset, name);
-}
-
-void RenderBoxModelObject::animationFinished(const String& name)
-{
- ASSERT(hasLayer());
- ASSERT(isComposited());
- layer()->backing()->animationFinished(name);
-}
-
-void RenderBoxModelObject::suspendAnimations(MonotonicTime time)
-{
- ASSERT(hasLayer());
- ASSERT(isComposited());
- layer()->backing()->suspendAnimations(time);
-}
-
RenderBoxModelObject::RenderBoxModelObject(Element& element, RenderStyle&& style, BaseTypeFlags baseTypeFlags)
: RenderLayerModelObject(element, WTFMove(style), baseTypeFlags | RenderBoxModelObjectFlag)
{
Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.h (243102 => 243103)
--- trunk/Source/WebCore/rendering/RenderBoxModelObject.h 2019-03-18 21:22:53 UTC (rev 243102)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.h 2019-03-18 21:25:37 UTC (rev 243103)
@@ -60,7 +60,6 @@
class BorderEdge;
class ImageBuffer;
class InlineFlowBox;
-class KeyframeList;
class RenderTextFragment;
class StickyPositionViewportConstraints;
@@ -223,17 +222,6 @@
void contentChanged(ContentChangeType);
bool hasAcceleratedCompositing() const;
- bool startTransition(double, CSSPropertyID, const RenderStyle* fromStyle, const RenderStyle* toStyle);
- void transitionPaused(double timeOffset, CSSPropertyID);
- void transitionFinished(CSSPropertyID);
-
- bool startAnimation(double timeOffset, const Animation*, const KeyframeList& keyframes);
- void animationPaused(double timeOffset, const String& name);
- void animationSeeked(double timeOffset, const String& name);
- void animationFinished(const String& name);
-
- void suspendAnimations(MonotonicTime = MonotonicTime());
-
RenderBoxModelObject* continuation() const;
WEBCORE_EXPORT RenderInline* inlineContinuation() const;
Modified: trunk/Source/WebCore/rendering/RenderElement.h (243102 => 243103)
--- trunk/Source/WebCore/rendering/RenderElement.h 2019-03-18 21:22:53 UTC (rev 243102)
+++ trunk/Source/WebCore/rendering/RenderElement.h 2019-03-18 21:25:37 UTC (rev 243103)
@@ -28,6 +28,7 @@
namespace WebCore {
class ControlStates;
+class KeyframeList;
class RenderBlock;
class RenderTreeBuilder;
@@ -221,6 +222,17 @@
RenderObject* attachRendererInternal(RenderPtr<RenderObject> child, RenderObject* beforeChild);
RenderPtr<RenderObject> detachRendererInternal(RenderObject&);
+ virtual bool startTransition(double /* timeOffset */, CSSPropertyID, const RenderStyle* /* fromStyle */, const RenderStyle* /* toStyle */) { return false; }
+ virtual void transitionPaused(double /* timeOffset */, CSSPropertyID) { }
+ virtual void transitionFinished(CSSPropertyID) { }
+
+ virtual bool startAnimation(double /* timeOffset */, const Animation*, const KeyframeList&) { return false; }
+ virtual void animationPaused(double /* timeOffset */, const String& /* name */) { }
+ virtual void animationSeeked(double /* timeOffset */, const String& /* name */) { }
+ virtual void animationFinished(const String& /* name */) { }
+
+ virtual void suspendAnimations(MonotonicTime = MonotonicTime()) { }
+
protected:
enum BaseTypeFlag {
RenderLayerModelObjectFlag = 1 << 0,
Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp (243102 => 243103)
--- trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp 2019-03-18 21:22:53 UTC (rev 243102)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp 2019-03-18 21:25:37 UTC (rev 243103)
@@ -283,5 +283,61 @@
setRepaintLayoutRects(RepaintLayoutRects(*this, repaintContainer, geometryMap));
}
+bool RenderLayerModelObject::startTransition(double timeOffset, CSSPropertyID propertyId, const RenderStyle* fromStyle, const RenderStyle* toStyle)
+{
+ ASSERT(hasLayer());
+ ASSERT(isComposited());
+ return layer()->backing()->startTransition(timeOffset, propertyId, fromStyle, toStyle);
+}
+
+void RenderLayerModelObject::transitionPaused(double timeOffset, CSSPropertyID propertyId)
+{
+ ASSERT(hasLayer());
+ ASSERT(isComposited());
+ layer()->backing()->transitionPaused(timeOffset, propertyId);
+}
+
+void RenderLayerModelObject::transitionFinished(CSSPropertyID propertyId)
+{
+ ASSERT(hasLayer());
+ ASSERT(isComposited());
+ layer()->backing()->transitionFinished(propertyId);
+}
+
+bool RenderLayerModelObject::startAnimation(double timeOffset, const Animation* animation, const KeyframeList& keyframes)
+{
+ ASSERT(hasLayer());
+ ASSERT(isComposited());
+ return layer()->backing()->startAnimation(timeOffset, animation, keyframes);
+}
+
+void RenderLayerModelObject::animationPaused(double timeOffset, const String& name)
+{
+ ASSERT(hasLayer());
+ ASSERT(isComposited());
+ layer()->backing()->animationPaused(timeOffset, name);
+}
+
+void RenderLayerModelObject::animationSeeked(double timeOffset, const String& name)
+{
+ ASSERT(hasLayer());
+ ASSERT(isComposited());
+ layer()->backing()->animationSeeked(timeOffset, name);
+}
+
+void RenderLayerModelObject::animationFinished(const String& name)
+{
+ ASSERT(hasLayer());
+ ASSERT(isComposited());
+ layer()->backing()->animationFinished(name);
+}
+
+void RenderLayerModelObject::suspendAnimations(MonotonicTime time)
+{
+ ASSERT(hasLayer());
+ ASSERT(isComposited());
+ layer()->backing()->suspendAnimations(time);
+}
+
} // namespace WebCore
Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.h (243102 => 243103)
--- trunk/Source/WebCore/rendering/RenderLayerModelObject.h 2019-03-18 21:22:53 UTC (rev 243102)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.h 2019-03-18 21:25:37 UTC (rev 243103)
@@ -26,6 +26,7 @@
namespace WebCore {
+class KeyframeList;
class RenderLayer;
struct RepaintLayoutRects {
@@ -68,6 +69,17 @@
void setRepaintLayoutRects(const RepaintLayoutRects&);
void clearRepaintLayoutRects();
+ bool startTransition(double timeOffset, CSSPropertyID, const RenderStyle* fromStyle, const RenderStyle* toStyle) override;
+ void transitionPaused(double timeOffset, CSSPropertyID) override;
+ void transitionFinished(CSSPropertyID) override;
+
+ bool startAnimation(double timeOffset, const Animation*, const KeyframeList& keyframes) override;
+ void animationPaused(double timeOffset, const String& name) override;
+ void animationSeeked(double timeOffset, const String& name) override;
+ void animationFinished(const String& name) override;
+
+ void suspendAnimations(MonotonicTime = MonotonicTime()) override;
+
protected:
RenderLayerModelObject(Element&, RenderStyle&&, BaseTypeFlags);
RenderLayerModelObject(Document&, RenderStyle&&, BaseTypeFlags);