diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderWidget.h')
-rw-r--r-- | Source/WebCore/rendering/RenderWidget.h | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/Source/WebCore/rendering/RenderWidget.h b/Source/WebCore/rendering/RenderWidget.h index afcef3a87..b7b7c7b12 100644 --- a/Source/WebCore/rendering/RenderWidget.h +++ b/Source/WebCore/rendering/RenderWidget.h @@ -19,8 +19,7 @@ * */ -#ifndef RenderWidget_h -#define RenderWidget_h +#pragma once #include "HTMLFrameOwnerElement.h" #include "OverlapTestRequestClient.h" @@ -45,60 +44,59 @@ public: } static bool isSuspended() { return s_widgetHierarchyUpdateSuspendCount; } - static void scheduleWidgetToMove(Widget* widget, FrameView* frame) { widgetNewParentMap().set(widget, frame); } + static void scheduleWidgetToMove(Widget& widget, FrameView* frame) { widgetNewParentMap().set(&widget, frame); } private: - typedef HashMap<RefPtr<Widget>, FrameView*> WidgetToParentMap; + using WidgetToParentMap = HashMap<RefPtr<Widget>, FrameView*>; static WidgetToParentMap& widgetNewParentMap(); - void moveWidgets(); - - static unsigned s_widgetHierarchyUpdateSuspendCount; + WEBCORE_EXPORT void moveWidgets(); + WEBCORE_EXPORT static unsigned s_widgetHierarchyUpdateSuspendCount; }; class RenderWidget : public RenderReplaced, private OverlapTestRequestClient { public: virtual ~RenderWidget(); - HTMLFrameOwnerElement& frameOwnerElement() const { return toHTMLFrameOwnerElement(nodeForNonAnonymous()); } + HTMLFrameOwnerElement& frameOwnerElement() const { return downcast<HTMLFrameOwnerElement>(nodeForNonAnonymous()); } Widget* widget() const { return m_widget.get(); } - void setWidget(PassRefPtr<Widget>); + WEBCORE_EXPORT void setWidget(RefPtr<Widget>&&); - static RenderWidget* find(const Widget*); + static RenderWidget* find(const Widget&); - void updateWidgetPosition(); - IntRect windowClipRect() const; + enum class ChildWidgetState { Valid, Destroyed }; + ChildWidgetState updateWidgetPosition() WARN_UNUSED_RETURN; + WEBCORE_EXPORT IntRect windowClipRect() const; -#if USE(ACCELERATED_COMPOSITING) bool requiresAcceleratedCompositing() const; -#endif WeakPtr<RenderWidget> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); } + void ref() { ++m_refCount; } + void deref(); + protected: - RenderWidget(HTMLFrameOwnerElement&, PassRef<RenderStyle>); + RenderWidget(HTMLFrameOwnerElement&, RenderStyle&&); - virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override final; - virtual void layout() override; - virtual void paint(PaintInfo&, const LayoutPoint&) override; - virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override; + void willBeDestroyed() override; + void styleDidChange(StyleDifference, const RenderStyle* oldStyle) final; + void layout() override; + void paint(PaintInfo&, const LayoutPoint&) override; + bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override; virtual void paintContents(PaintInfo&, const LayoutPoint&); -#if USE(ACCELERATED_COMPOSITING) - virtual bool requiresLayer() const override; -#endif + bool requiresLayer() const override; private: void element() const = delete; - virtual bool isWidget() const override final { return true; } + bool isWidget() const final { return true; } - virtual bool needsPreferredWidthsRecalculation() const override final; - virtual RenderBox* embeddedContentBox() const override final; + bool needsPreferredWidthsRecalculation() const final; + RenderBox* embeddedContentBox() const final; - virtual void willBeDestroyed() override final; - virtual void setSelectionState(SelectionState) override final; - virtual void setOverlapTestResult(bool) override final; + void setSelectionState(SelectionState) final; + void setOverlapTestResult(bool) final; bool setWidgetGeometry(const LayoutRect&); bool updateWidgetGeometry(); @@ -106,10 +104,16 @@ private: WeakPtrFactory<RenderWidget> m_weakPtrFactory; RefPtr<Widget> m_widget; IntRect m_clipRect; // The rectangle needs to remain correct after scrolling, so it is stored in content view coordinates, and not clipped to window. + unsigned m_refCount { 1 }; }; -RENDER_OBJECT_TYPE_CASTS(RenderWidget, isWidget()) +inline void RenderWidget::deref() +{ + ASSERT(m_refCount); + if (!--m_refCount) + delete this; +} } // namespace WebCore -#endif // RenderWidget_h +SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderWidget, isWidget()) |