diff options
Diffstat (limited to 'Source/WebCore/page/FrameView.h')
| -rw-r--r-- | Source/WebCore/page/FrameView.h | 451 |
1 files changed, 158 insertions, 293 deletions
diff --git a/Source/WebCore/page/FrameView.h b/Source/WebCore/page/FrameView.h index b2735ad85..8ece6e51d 100644 --- a/Source/WebCore/page/FrameView.h +++ b/Source/WebCore/page/FrameView.h @@ -4,7 +4,7 @@ (C) 1998, 1999 Torben Weis (weis@kde.org) (C) 1999 Lars Knoll (knoll@kde.org) (C) 1999 Antti Koivisto (koivisto@kde.org) - Copyright (C) 2004-2009, 2014-2015 Apple Inc. All rights reserved. + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -27,17 +27,15 @@ #include "AdjustViewSizeOrNot.h" #include "Color.h" -#include "ContainerNode.h" #include "LayoutMilestones.h" #include "LayoutRect.h" #include "Pagination.h" #include "PaintPhase.h" #include "RenderPtr.h" #include "ScrollView.h" -#include <memory> #include <wtf/Forward.h> -#include <wtf/HashSet.h> #include <wtf/ListHashSet.h> +#include <wtf/OwnPtr.h> #include <wtf/text/WTFString.h> namespace WebCore { @@ -69,23 +67,23 @@ public: friend class RenderView; friend class Internals; - WEBCORE_EXPORT static Ref<FrameView> create(Frame&); - static Ref<FrameView> create(Frame&, const IntSize& initialSize); + static PassRefPtr<FrameView> create(Frame&); + static PassRefPtr<FrameView> create(Frame&, const IntSize& initialSize); virtual ~FrameView(); virtual HostWindow* hostWindow() const override; - WEBCORE_EXPORT virtual void invalidateRect(const IntRect&) override; + virtual void invalidateRect(const IntRect&) override; virtual void setFrameRect(const IntRect&) override; #if ENABLE(REQUEST_ANIMATION_FRAME) virtual bool scheduleAnimation() override; #endif - Frame& frame() const { return const_cast<Frame&>(m_frame.get()); } + Frame& frame() const { return *m_frame; } - WEBCORE_EXPORT RenderView* renderView() const; + RenderView* renderView() const; int mapFromLayoutToCSSUnits(LayoutUnit) const; LayoutUnit mapFromCSSToLayoutUnits(int) const; @@ -95,66 +93,52 @@ public: void setMarginWidth(LayoutUnit); void setMarginHeight(LayoutUnit); - WEBCORE_EXPORT virtual void setCanHaveScrollbars(bool) override; - WEBCORE_EXPORT void updateCanHaveScrollbars(); + virtual void setCanHaveScrollbars(bool) override; + void updateCanHaveScrollbars(); virtual PassRefPtr<Scrollbar> createScrollbar(ScrollbarOrientation) override; virtual bool avoidScrollbarCreation() const override; virtual void setContentsSize(const IntSize&) override; - virtual void updateContentsSize() override; void layout(bool allowSubtree = true); - WEBCORE_EXPORT bool didFirstLayout() const; - void layoutTimerFired(); + bool didFirstLayout() const; + void layoutTimerFired(Timer<FrameView>&); void scheduleRelayout(); void scheduleRelayoutOfSubtree(RenderElement&); void unscheduleRelayout(); - void queuePostLayoutCallback(std::function<void()>); bool layoutPending() const; - bool isInLayout() const { return m_layoutPhase != OutsideLayout; } - bool isInRenderTreeLayout() const { return m_layoutPhase == InRenderTreeLayout; } - WEBCORE_EXPORT bool inPaintableState() { return m_layoutPhase != InRenderTreeLayout && m_layoutPhase != InViewSizeAdjust && m_layoutPhase != InPostLayout; } + bool isInLayout() const { return m_layoutPhase == InLayout; } - RenderElement* layoutRoot() const { return m_layoutRoot; } + RenderObject* layoutRoot(bool onlyDuringLayout = false) const; void clearLayoutRoot() { m_layoutRoot = nullptr; } int layoutCount() const { return m_layoutCount; } - WEBCORE_EXPORT bool needsLayout() const; - WEBCORE_EXPORT void setNeedsLayout(); + bool needsLayout() const; + void setNeedsLayout(); void setViewportConstrainedObjectsNeedLayout(); - bool needsStyleRecalcOrLayout(bool includeSubframes = true) const; - bool needsFullRepaint() const { return m_needsFullRepaint; } - WEBCORE_EXPORT bool renderedCharactersExceed(unsigned threshold); - - WEBCORE_EXPORT void setViewportIsStable(bool stable) { m_viewportIsStable = stable; } - bool viewportIsStable() const { return m_viewportIsStable; } + bool renderedCharactersExceed(unsigned threshold); #if PLATFORM(IOS) bool useCustomFixedPositionLayoutRect() const { return m_useCustomFixedPositionLayoutRect; } + void setUseCustomFixedPositionLayoutRect(bool); IntRect customFixedPositionLayoutRect() const { return m_customFixedPositionLayoutRect; } - WEBCORE_EXPORT void setCustomFixedPositionLayoutRect(const IntRect&); + void setCustomFixedPositionLayoutRect(const IntRect&); bool updateFixedPositionLayoutRect(); - - IntSize customSizeForResizeEvent() const { return m_customSizeForResizeEvent; } - WEBCORE_EXPORT void setCustomSizeForResizeEvent(IntSize); - - WEBCORE_EXPORT void setScrollVelocity(double horizontalVelocity, double verticalVelocity, double scaleChangeRate, double timestamp); -#else - bool useCustomFixedPositionLayoutRect() const { return false; } #endif #if ENABLE(REQUEST_ANIMATION_FRAME) - WEBCORE_EXPORT void serviceScriptedAnimations(double monotonicAnimationStartTime); + void serviceScriptedAnimations(double monotonicAnimationStartTime); #endif - void willRecalcStyle(); - bool updateCompositingLayersAfterStyleChange(); +#if USE(ACCELERATED_COMPOSITING) + void updateCompositingLayersAfterStyleChange(); void updateCompositingLayersAfterLayout(); + bool flushCompositingStateForThisFrame(Frame* rootFrameForFlush); void clearBackingStores(); void restoreBackingStores(); @@ -163,97 +147,91 @@ public: // content rendered via the normal painting path. void setNeedsOneShotDrawingSynchronization(); - WEBCORE_EXPORT GraphicsLayer* graphicsLayerForPlatformWidget(PlatformWidget); - WEBCORE_EXPORT void scheduleLayerFlushAllowingThrottling(); + GraphicsLayer* graphicsLayerForPlatformWidget(PlatformWidget); + void scheduleLayerFlushAllowingThrottling(); - WEBCORE_EXPORT virtual TiledBacking* tiledBacking() const override; + virtual TiledBacking* tiledBacking() const override; // In the future when any ScrollableArea can have a node in th ScrollingTree, this should // become a virtual function on ScrollableArea. uint64_t scrollLayerID() const; - ScrollableArea* scrollableAreaForScrollLayerID(uint64_t) const; +#endif bool hasCompositedContent() const; - WEBCORE_EXPORT void enterCompositingMode(); - WEBCORE_EXPORT bool isEnclosedInCompositingLayer() const; + bool hasCompositedContentIncludingDescendants() const; + bool hasCompositingAncestor() const; + void enterCompositingMode(); + bool isEnclosedInCompositingLayer() const; // Only used with accelerated compositing, but outside the #ifdef to make linkage easier. // Returns true if the flush was completed. - WEBCORE_EXPORT bool flushCompositingStateIncludingSubframes(); + bool flushCompositingStateIncludingSubframes(); // Returns true when a paint with the PaintBehaviorFlattenCompositingLayers flag set gives // a faithful representation of the content. - WEBCORE_EXPORT bool isSoftwareRenderable() const; + bool isSoftwareRenderable() const; + void didMoveOnscreen(); + void willMoveOffscreen(); void setIsInWindow(bool); void resetScrollbars(); void resetScrollbarsAndClearContentsSize(); void prepareForDetach(); void detachCustomScrollbars(); - WEBCORE_EXPORT void recalculateScrollbarOverlayStyle(); + void recalculateScrollbarOverlayStyle(); void clear(); - WEBCORE_EXPORT bool isTransparent() const; - WEBCORE_EXPORT void setTransparent(bool isTransparent); + bool isTransparent() const; + void setTransparent(bool isTransparent); // True if the FrameView is not transparent, and the base background color is opaque. bool hasOpaqueBackground() const; - WEBCORE_EXPORT Color baseBackgroundColor() const; - WEBCORE_EXPORT void setBaseBackgroundColor(const Color&); + Color baseBackgroundColor() const; + void setBaseBackgroundColor(const Color&); void updateBackgroundRecursively(const Color&, bool); - enum ExtendedBackgroundModeFlags { - ExtendedBackgroundModeNone = 0, - ExtendedBackgroundModeVertical = 1 << 0, - ExtendedBackgroundModeHorizontal = 1 << 1, - ExtendedBackgroundModeAll = ExtendedBackgroundModeVertical | ExtendedBackgroundModeHorizontal, - }; - typedef unsigned ExtendedBackgroundMode; - - void updateExtendBackgroundIfNecessary(); - void updateTilesForExtendedBackgroundMode(ExtendedBackgroundMode); - ExtendedBackgroundMode calculateExtendedBackgroundMode() const; - - bool hasExtendedBackgroundRectForPainting() const; - IntRect extendedBackgroundRectForPainting() const; + // extendedBackgroundRect() is in the viewport's coordinate space. + bool hasExtendedBackground() const; + IntRect extendedBackgroundRect() const; + +#if USE(ACCELERATED_COMPOSITING) + void setBackgroundExtendsBeyondPage(bool); +#endif bool shouldUpdateWhileOffscreen() const; - WEBCORE_EXPORT void setShouldUpdateWhileOffscreen(bool); - bool shouldUpdate() const; + void setShouldUpdateWhileOffscreen(bool); + bool shouldUpdate(bool = false) const; - WEBCORE_EXPORT void adjustViewSize(); - - WEBCORE_EXPORT void setViewportSizeForCSSViewportUnits(IntSize); - IntSize viewportSizeForCSSViewportUnits() const; + void adjustViewSize(); - virtual IntRect windowClipRect() const override; - WEBCORE_EXPORT IntRect windowClipRectForFrameOwner(const HTMLFrameOwnerElement*, bool clipToLayerContents) const; + virtual IntRect windowClipRect(bool clipToContents = true) const override; + IntRect windowClipRectForFrameOwner(const HTMLFrameOwnerElement*, bool clipToLayerContents) const; + + virtual IntRect windowResizerRect() const override; virtual float visibleContentScaleFactor() const override; -#if USE(COORDINATED_GRAPHICS) +#if USE(TILED_BACKING_STORE) virtual void setFixedVisibleContentRect(const IntRect&) override; #endif - WEBCORE_EXPORT virtual void setScrollPosition(const ScrollPosition&) override; + virtual void setScrollPosition(const IntPoint&) override; + void scrollPositionChangedViaPlatformWidget(); virtual void updateLayerPositionsAfterScrolling() override; virtual void updateCompositingLayersAfterScrolling() override; - virtual bool requestScrollPositionUpdate(const ScrollPosition&) override; + virtual bool requestScrollPositionUpdate(const IntPoint&) override; virtual bool isRubberBandInProgress() const override; - WEBCORE_EXPORT virtual ScrollPosition minimumScrollPosition() const override; - WEBCORE_EXPORT virtual ScrollPosition maximumScrollPosition() const override; - - void viewportContentsChanged(); - WEBCORE_EXPORT void resumeVisibleImageAnimationsIncludingSubframes(); + virtual IntPoint minimumScrollPosition() const override; + virtual IntPoint maximumScrollPosition() const override; // This is different than visibleContentRect() in that it ignores negative (or overly positive) // offsets from rubber-banding, and it takes zooming into account. LayoutRect viewportConstrainedVisibleContentRect() const; String mediaType() const; - WEBCORE_EXPORT void setMediaType(const String&); + void setMediaType(const String&); void adjustMediaTypeForPrinting(bool printing); void setCannotBlitToWindow(); @@ -264,7 +242,7 @@ public: void addSlowRepaintObject(RenderElement*); void removeSlowRepaintObject(RenderElement*); - bool hasSlowRepaintObject(const RenderElement& renderer) const { return m_slowRepaintObjects && m_slowRepaintObjects->contains(&renderer); } + bool hasSlowRepaintObject(RenderElement* o) const { return m_slowRepaintObjects && m_slowRepaintObjects->contains(o); } bool hasSlowRepaintObjects() const { return m_slowRepaintObjects && m_slowRepaintObjects->size(); } // Includes fixed- and sticky-position objects. @@ -273,49 +251,31 @@ public: void removeViewportConstrainedObject(RenderElement*); const ViewportConstrainedObjectSet* viewportConstrainedObjects() const { return m_viewportConstrainedObjects.get(); } bool hasViewportConstrainedObjects() const { return m_viewportConstrainedObjects && m_viewportConstrainedObjects->size() > 0; } - - float frameScaleFactor() const; // Functions for querying the current scrolled position, negating the effects of overhang // and adjusting for page scale. - LayoutPoint scrollPositionForFixedPosition() const - { - return scrollPositionForFixedPosition(visibleContentRect(), totalContentsSize(), scrollPosition(), scrollOrigin(), frameScaleFactor(), fixedElementsLayoutRelativeToFrame(), scrollBehaviorForFixedElements(), headerHeight(), footerHeight()); - } - + IntSize scrollOffsetForFixedPosition() const; // Static function can be called from another thread. - static LayoutPoint scrollPositionForFixedPosition(const LayoutRect& visibleContentRect, const LayoutSize& totalContentsSize, const LayoutPoint& scrollPosition, const LayoutPoint& scrollOrigin, float frameScaleFactor, bool fixedElementsLayoutRelativeToFrame, ScrollBehaviorForFixedElements, int headerHeight, int footerHeight); - - // These layers are positioned differently when there is a topContentInset, a header, or a footer. These value need to be computed - // on both the main thread and the scrolling thread. - static float yPositionForInsetClipLayer(const FloatPoint& scrollPosition, float topContentInset); - WEBCORE_EXPORT static FloatPoint positionForRootContentLayer(const FloatPoint& scrollPosition, const FloatPoint& scrollOrigin, float topContentInset, float headerHeight); - WEBCORE_EXPORT FloatPoint positionForRootContentLayer() const; + static IntSize scrollOffsetForFixedPosition(const IntRect& visibleContentRect, const IntSize& totalContentsSize, const IntPoint& scrollPosition, const IntPoint& scrollOrigin, float frameScaleFactor, bool fixedElementsLayoutRelativeToFrame, ScrollBehaviorForFixedElements, int headerHeight, int footerHeight); - static float yPositionForHeaderLayer(const FloatPoint& scrollPosition, float topContentInset); - static float yPositionForFooterLayer(const FloatPoint& scrollPosition, float topContentInset, float totalContentsHeight, float footerHeight); - -#if PLATFORM(IOS) - WEBCORE_EXPORT LayoutRect viewportConstrainedObjectsRect() const; - // Static function can be called from another thread. - WEBCORE_EXPORT static LayoutRect rectForViewportConstrainedObjects(const LayoutRect& visibleContentRect, const LayoutSize& totalContentsSize, float frameScaleFactor, bool fixedElementsLayoutRelativeToFrame, ScrollBehaviorForFixedElements); -#endif - bool fixedElementsLayoutRelativeToFrame() const; - WEBCORE_EXPORT void disableLayerFlushThrottlingTemporarilyForInteraction(); + void disableLayerFlushThrottlingTemporarilyForInteraction(); + void updateLayerFlushThrottlingInAllFrames(); + void adjustTiledBackingCoverage(); bool speculativeTilingEnabled() const { return m_speculativeTilingEnabled; } - void loadProgressingStatusChanged(); #if ENABLE(DASHBOARD_SUPPORT) void updateAnnotatedRegions(); #endif - WEBCORE_EXPORT void updateControlTints(); + void updateControlTints(); void restoreScrollbar(); - WEBCORE_EXPORT bool wasScrolledByUser() const; - WEBCORE_EXPORT void setWasScrolledByUser(bool); + void postLayoutTimerFired(Timer<FrameView>&); + + bool wasScrolledByUser() const; + void setWasScrolledByUser(bool); bool safeToPropagateScrollToParent() const { return m_safeToPropagateScrollToParent; } void setSafeToPropagateScrollToParent(bool isSafe) { m_safeToPropagateScrollToParent = isSafe; } @@ -323,64 +283,40 @@ public: void addEmbeddedObjectToUpdate(RenderEmbeddedObject&); void removeEmbeddedObjectToUpdate(RenderEmbeddedObject&); - WEBCORE_EXPORT virtual void paintContents(GraphicsContext&, const IntRect& dirtyRect) override; - - struct PaintingState { - PaintBehavior paintBehavior; - bool isTopLevelPainter; - bool isFlatteningPaintOfRootFrame; - PaintingState() - : paintBehavior() - , isTopLevelPainter(false) - , isFlatteningPaintOfRootFrame(false) - { - } - }; - - void willPaintContents(GraphicsContext&, const IntRect& dirtyRect, PaintingState&); - void didPaintContents(GraphicsContext&, const IntRect& dirtyRect, PaintingState&); - -#if PLATFORM(IOS) - WEBCORE_EXPORT void didReplaceMultipartContent(); -#endif - - WEBCORE_EXPORT void setPaintBehavior(PaintBehavior); - WEBCORE_EXPORT PaintBehavior paintBehavior() const; + virtual void paintContents(GraphicsContext*, const IntRect& damageRect) override; + void setPaintBehavior(PaintBehavior); + PaintBehavior paintBehavior() const; bool isPainting() const; bool hasEverPainted() const { return m_lastPaintTime; } void setLastPaintTime(double lastPaintTime) { m_lastPaintTime = lastPaintTime; } - WEBCORE_EXPORT void setNodeToDraw(Node*); + void setNodeToDraw(Node*); enum SelectionInSnapshot { IncludeSelection, ExcludeSelection }; enum CoordinateSpaceForSnapshot { DocumentCoordinates, ViewCoordinates }; - WEBCORE_EXPORT void paintContentsForSnapshot(GraphicsContext&, const IntRect& imageRect, SelectionInSnapshot shouldPaintSelection, CoordinateSpaceForSnapshot); + void paintContentsForSnapshot(GraphicsContext*, const IntRect& imageRect, SelectionInSnapshot shouldPaintSelection, CoordinateSpaceForSnapshot); - virtual void paintOverhangAreas(GraphicsContext&, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect) override; - virtual void paintScrollCorner(GraphicsContext&, const IntRect& cornerRect) override; - virtual void paintScrollbar(GraphicsContext&, Scrollbar&, const IntRect&) override; + virtual void paintOverhangAreas(GraphicsContext*, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect) override; + virtual void paintScrollCorner(GraphicsContext*, const IntRect& cornerRect) override; + virtual void paintScrollbar(GraphicsContext*, Scrollbar*, const IntRect&) override; - WEBCORE_EXPORT Color documentBackgroundColor() const; + Color documentBackgroundColor() const; bool isInChildFrameWithFrameFlattening() const; - void startDisallowingLayout() { ++m_layoutDisallowed; } - void endDisallowingLayout() { ASSERT(m_layoutDisallowed > 0); --m_layoutDisallowed; } - bool layoutDisallowed() const { return m_layoutDisallowed; } - static double currentPaintTimeStamp() { return sCurrentPaintTimeStamp; } // returns 0 if not painting - WEBCORE_EXPORT void updateLayoutAndStyleIfNeededRecursive(); + void updateLayoutAndStyleIfNeededRecursive(); void incrementVisuallyNonEmptyCharacterCount(unsigned); void incrementVisuallyNonEmptyPixelCount(const IntSize&); void updateIsVisuallyNonEmpty(); bool isVisuallyNonEmpty() const { return m_isVisuallyNonEmpty; } - WEBCORE_EXPORT void enableAutoSizeMode(bool enable, const IntSize& minSize, const IntSize& maxSize); - WEBCORE_EXPORT void setAutoSizeFixedMinimumHeight(int); + void enableAutoSizeMode(bool enable, const IntSize& minSize, const IntSize& maxSize); + void setAutoSizeFixedMinimumHeight(int fixedMinimumHeight); IntSize autoSizingIntrinsicContentSize() const { return m_autoSizeContentSize; } - WEBCORE_EXPORT void forceLayout(bool allowSubtree = false); - WEBCORE_EXPORT void forceLayoutForPagination(const FloatSize& pageSize, const FloatSize& originalPageSize, float maximumShrinkFactor, AdjustViewSizeOrNot); + void forceLayout(bool allowSubtree = false); + void forceLayoutForPagination(const FloatSize& pageSize, const FloatSize& originalPageSize, float maximumShrinkFactor, AdjustViewSizeOrNot); // FIXME: This method is retained because of embedded WebViews in AppKit. When a WebView is embedded inside // some enclosing view with auto-pagination, no call happens to resize the view. The new pagination model @@ -398,37 +334,22 @@ public: // but that doesn't solve the general problem of how other AppKit views could opt in to the better model. // // NO OTHER PLATFORM BESIDES MAC SHOULD USE THIS METHOD. - WEBCORE_EXPORT void adjustPageHeightDeprecated(float* newBottom, float oldTop, float oldBottom, float bottomLimit); + void adjustPageHeightDeprecated(float* newBottom, float oldTop, float oldBottom, float bottomLimit); bool scrollToFragment(const URL&); bool scrollToAnchor(const String&); - void maintainScrollPositionAtAnchor(ContainerNode*); - WEBCORE_EXPORT void scrollElementToRect(const Element&, const IntRect&); + void maintainScrollPositionAtAnchor(Node*); + void scrollElementToRect(Element*, const IntRect&); // Methods to convert points and rects between the coordinate space of the renderer, and this view. - WEBCORE_EXPORT IntRect convertFromRendererToContainingView(const RenderElement*, const IntRect&) const; - WEBCORE_EXPORT IntRect convertFromContainingViewToRenderer(const RenderElement*, const IntRect&) const; - WEBCORE_EXPORT IntPoint convertFromRendererToContainingView(const RenderElement*, const IntPoint&) const; - WEBCORE_EXPORT IntPoint convertFromContainingViewToRenderer(const RenderElement*, const IntPoint&) const; - - // Override ScrollView methods to do point conversion via renderers, in order to take transforms into account. - virtual IntRect convertToContainingView(const IntRect&) const override; - virtual IntRect convertFromContainingView(const IntRect&) const override; - virtual IntPoint convertToContainingView(const IntPoint&) const override; - virtual IntPoint convertFromContainingView(const IntPoint&) const override; - - bool isFrameViewScrollCorner(const RenderScrollbarPart& scrollCorner) const { return m_scrollCorner == &scrollCorner; } + IntRect convertFromRenderer(const RenderElement*, const IntRect&) const; + IntRect convertToRenderer(const RenderElement*, const IntRect&) const; + IntPoint convertFromRenderer(const RenderElement*, const IntPoint&) const; + IntPoint convertToRenderer(const RenderElement*, const IntPoint&) const; - // isScrollable() takes an optional Scrollability parameter that allows the caller to define what they mean by 'scrollable.' - // Most callers are interested in the default value, Scrollability::Scrollable, which means that there is actually content - // to scroll to, and a scrollbar that will allow you to access it. In some cases, callers want to know if the FrameView is allowed - // to rubber-band, which the main frame might be allowed to do even if there is no content to scroll to. In that case, - // callers use Scrollability::ScrollableOrRubberbandable. - enum class Scrollability { Scrollable, ScrollableOrRubberbandable }; - WEBCORE_EXPORT bool isScrollable(Scrollability definitionOfScrollable = Scrollability::Scrollable); + bool isFrameViewScrollCorner(RenderScrollbarPart* scrollCorner) const { return m_scrollCorner == scrollCorner; } - virtual bool isScrollableOrRubberbandable() override; - virtual bool hasScrollableOrRubberbandableAncestor() override; + bool isScrollable(); enum ScrollbarModesCalculationStrategy { RulesFromWebContentOnly, AnyRule }; void calculateScrollbarModesForLayout(ScrollbarMode& hMode, ScrollbarMode& vMode, ScrollbarModesCalculationStrategy = AnyRule); @@ -441,32 +362,32 @@ public: void flushAnyPendingPostLayoutTasks(); virtual bool shouldSuspendScrollAnimations() const override; - virtual void scrollbarStyleChanged(ScrollbarStyle, bool forceUpdate) override; + virtual void scrollbarStyleChanged(int newStyle, bool forceUpdate) override; RenderBox* embeddedContentBox() const; - WEBCORE_EXPORT void setTracksRepaints(bool); + void setTracksRepaints(bool); bool isTrackingRepaints() const { return m_isTrackingRepaints; } - WEBCORE_EXPORT void resetTrackedRepaints(); - const Vector<FloatRect>& trackedRepaintRects() const { return m_trackedRepaintRects; } + void resetTrackedRepaints(); + const Vector<IntRect>& trackedRepaintRects() const { return m_trackedRepaintRects; } String trackedRepaintRectsAsText() const; typedef HashSet<ScrollableArea*> ScrollableAreaSet; // Returns whether the scrollable area has just been newly added. - WEBCORE_EXPORT bool addScrollableArea(ScrollableArea*); + bool addScrollableArea(ScrollableArea*); // Returns whether the scrollable area has just been removed. - WEBCORE_EXPORT bool removeScrollableArea(ScrollableArea*); + bool removeScrollableArea(ScrollableArea*); bool containsScrollableArea(ScrollableArea*) const; const ScrollableAreaSet* scrollableAreas() const { return m_scrollableAreas.get(); } - virtual void removeChild(Widget&) override; + virtual void removeChild(Widget*) override; // This function exists for ports that need to handle wheel events manually. // On Mac WebKit1 the underlying NSScrollView just does the scrolling, but on most other platforms // we need this function in order to do the scroll ourselves. bool wheelEvent(const PlatformWheelEvent&); - WEBCORE_EXPORT void setScrollingPerformanceLoggingEnabled(bool); + void setScrollingPerformanceLoggingEnabled(bool); // Page and FrameView both store a Pagination value. Page::pagination() is set only by API, // and FrameView::pagination() is set only by CSS. Page::pagination() will affect all @@ -477,7 +398,7 @@ public: const Pagination& pagination() const; void setPagination(const Pagination&); - bool inProgrammaticScroll() const override { return m_inProgrammaticScroll; } + bool inProgrammaticScroll() const { return m_inProgrammaticScroll; } void setInProgrammaticScroll(bool programmaticScroll) { m_inProgrammaticScroll = programmaticScroll; } #if ENABLE(CSS_DEVICE_ADAPTATION) @@ -487,74 +408,44 @@ public: virtual bool isActive() const override; virtual bool updatesScrollLayerPositionOnMainThread() const override; - virtual bool forceUpdateScrollbarsOnMainThreadForPerformanceTesting() const override; #if ENABLE(RUBBER_BANDING) - WEBCORE_EXPORT GraphicsLayer* setWantsLayerForTopOverHangArea(bool) const; - WEBCORE_EXPORT GraphicsLayer* setWantsLayerForBottomOverHangArea(bool) const; + GraphicsLayer* setWantsLayerForTopOverHangArea(bool) const; + GraphicsLayer* setWantsLayerForBottomOverHangArea(bool) const; #endif - LayoutRect fixedScrollableAreaBoundsInflatedForScrolling(const LayoutRect& uninflatedBounds) const; - LayoutPoint scrollPositionRespectingCustomFixedPosition() const; - virtual int headerHeight() const override { return m_headerHeight; } - WEBCORE_EXPORT void setHeaderHeight(int); + void setHeaderHeight(int); virtual int footerHeight() const override { return m_footerHeight; } - WEBCORE_EXPORT void setFooterHeight(int); - - WEBCORE_EXPORT virtual float topContentInset(TopContentInsetType = TopContentInsetType::WebCoreContentInset) const override; - void topContentInsetDidChange(float newTopContentInset); - - WEBCORE_EXPORT virtual void willStartLiveResize() override; - WEBCORE_EXPORT virtual void willEndLiveResize() override; + void setFooterHeight(int); - WEBCORE_EXPORT virtual void availableContentSizeChanged(AvailableSizeChangeReason) override; + virtual void willStartLiveResize() override; + virtual void willEndLiveResize() override; void addPaintPendingMilestones(LayoutMilestones); - void firePaintRelatedMilestonesIfNeeded(); - void fireLayoutRelatedMilestonesIfNeeded(); + void firePaintRelatedMilestones(); LayoutMilestones milestonesPendingPaint() const { return m_milestonesPendingPaint; } bool visualUpdatesAllowedByClient() const { return m_visualUpdatesAllowedByClient; } - WEBCORE_EXPORT void setVisualUpdatesAllowedByClient(bool); + void setVisualUpdatesAllowedByClient(bool); - WEBCORE_EXPORT void setScrollPinningBehavior(ScrollPinningBehavior); + void setScrollPinningBehavior(ScrollPinningBehavior); ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const; - bool hasFlippedBlockRenderers() const { return m_hasFlippedBlockRenderers; } - void setHasFlippedBlockRenderers(bool b) { m_hasFlippedBlockRenderers = b; } - void updateWidgetPositions(); void didAddWidgetToRenderTree(Widget&); void willRemoveWidgetFromRenderTree(Widget&); - const HashSet<Widget*>& widgetsInRenderTree() const { return m_widgetsInRenderTree; } - - typedef Vector<Ref<FrameView>, 16> FrameViewList; - FrameViewList renderedChildFrameViews() const; - - void addTrackedRepaintRect(const FloatRect&); + void addTrackedRepaintRect(const IntRect&); // exposedRect represents WebKit's understanding of what part // of the view is actually exposed on screen (taking into account // clipping by other UI elements), whereas visibleContentRect is // internal to WebCore and doesn't respect those things. - WEBCORE_EXPORT void setExposedRect(FloatRect); + void setExposedRect(FloatRect); FloatRect exposedRect() const { return m_exposedRect; } -#if ENABLE(CSS_SCROLL_SNAP) - void updateSnapOffsets() override; - bool isScrollSnapInProgress() const override; - void updateScrollingCoordinatorScrollSnapProperties() const; -#endif - - virtual float adjustScrollStepForFixedContent(float step, ScrollbarOrientation, ScrollGranularity) override; - - void didChangeScrollOffset(); - - void show() override; - protected: virtual bool scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect) override; virtual void scrollContentsSlowPath(const IntRect& updateRect) override; @@ -574,10 +465,9 @@ private: OutsideLayout, InPreLayout, InPreLayoutStyleUpdate, - InRenderTreeLayout, + InLayout, InViewSizeAdjust, InPostLayout, - InPostLayerPositionsUpdatedAfterLayout, }; LayoutPhase layoutPhase() const { return m_layoutPhase; } @@ -589,46 +479,45 @@ private: bool useSlowRepaints(bool considerOverlap = true) const; bool useSlowRepaintsIfNotOverlapped() const; void updateCanBlitOnScrollRecursively(); - bool shouldLayoutAfterContentsResized() const; + bool contentsInCompositedLayer() const; bool shouldUpdateCompositingLayersAfterScrolling() const; - bool flushCompositingStateForThisFrame(const Frame& rootFrameForFlush); - - virtual bool shouldDeferScrollUpdateAfterContentSizeChange() override; - virtual void scrollOffsetChangedViaPlatformWidgetImpl(const ScrollOffset& oldOffset, const ScrollOffset& newOffset) override; - - void applyOverflowToViewport(const RenderElement&, ScrollbarMode& hMode, ScrollbarMode& vMode); + void applyOverflowToViewport(RenderElement*, ScrollbarMode& hMode, ScrollbarMode& vMode); void applyPaginationToViewport(); void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow); - WEBCORE_EXPORT void paintControlTints(); + void paintControlTints(); void forceLayoutParentViewIfNeeded(); - void flushPostLayoutTasksQueue(); void performPostLayoutTasks(); void autoSizeIfEnabled(); - void applyRecursivelyWithVisibleRect(const std::function<void (FrameView& frameView, const IntRect& visibleRect)>&); - void resumeVisibleImageAnimations(const IntRect& visibleRect); - void updateScriptedAnimationsAndTimersThrottlingState(const IntRect& visibleRect); - - void updateLayerFlushThrottling(); - WEBCORE_EXPORT void adjustTiledBackingCoverage(); - - virtual void repaintContentRectangle(const IntRect&) override; + virtual void repaintContentRectangle(const IntRect&, bool immediate) override; + virtual void contentsResized() override; + virtual void visibleContentsResized() override; virtual void addedOrRemovedScrollbar() override; + virtual void fixedLayoutSizeChanged() override; virtual void delegatesScrollingDidChange() override; + // Override ScrollView methods to do point conversion via renderers, in order to + // take transforms into account. + virtual IntRect convertToContainingView(const IntRect&) const override; + virtual IntRect convertFromContainingView(const IntRect&) const override; + virtual IntPoint convertToContainingView(const IntPoint&) const override; + virtual IntPoint convertFromContainingView(const IntPoint&) const override; + // ScrollableArea interface virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) override; - virtual void scrollTo(const ScrollPosition&) override; + virtual void scrollTo(const IntSize&) override; virtual void setVisibleScrollerThumbRect(const IntRect&) override; virtual ScrollableArea* enclosingScrollableArea() const override; - virtual IntRect scrollableAreaBoundingBox(bool* = nullptr) const override; + virtual IntRect scrollableAreaBoundingBox() const override; virtual bool scrollAnimatorEnabled() const override; +#if USE(ACCELERATED_COMPOSITING) + virtual bool usesCompositedScrolling() const override; virtual GraphicsLayer* layerForScrolling() const override; virtual GraphicsLayer* layerForHorizontalScrollbar() const override; virtual GraphicsLayer* layerForVerticalScrollbar() const override; @@ -636,17 +525,12 @@ private: #if ENABLE(RUBBER_BANDING) virtual GraphicsLayer* layerForOverhangAreas() const override; #endif - - virtual bool usesCompositedScrolling() const override; - virtual bool usesAsyncScrolling() const override; - bool usesMockScrollAnimator() const override; - void logMockScrollAnimatorMessage(const String&) const override; +#endif // Override scrollbar notifications to update the AXObject cache. virtual void didAddScrollbar(Scrollbar*, ScrollbarOrientation) override; virtual void willRemoveScrollbar(Scrollbar*, ScrollbarOrientation) override; - IntSize sizeForResizeEvent() const; void sendResizeEventIfNeeded(); void updateScrollableAreaSet(); @@ -654,15 +538,13 @@ private: virtual void notifyPageThatContentAreaWillPaint() const override; void enableSpeculativeTilingIfNeeded(); - void speculativeTilingEnableTimerFired(); + void speculativeTilingEnableTimerFired(Timer<FrameView>&); - void updateEmbeddedObjectsTimerFired(); + void updateEmbeddedObjectsTimerFired(Timer<FrameView>*); bool updateEmbeddedObjects(); void updateEmbeddedObject(RenderEmbeddedObject&); void scrollToAnchor(); - void scrollPositionChanged(const ScrollPosition& oldPosition, const ScrollPosition& newPosition); - void scrollableAreaSetChanged(); - void sendScrollEvent(); + void scrollPositionChanged(); bool hasCustomScrollbars() const; @@ -675,17 +557,12 @@ private: bool isFrameFlatteningValidForThisFrame() const; bool qualifiesAsVisuallyNonEmpty() const; - bool isViewForDocumentInFrame() const; AXObjectCache* axObjectCache() const; void notifyWidgetsInAllFrames(WidgetNotification); void removeFromAXObjectCache(); void notifyWidgets(WidgetNotification); - void convertSubtreeLayoutToFullLayout(); - - RenderElement* viewportRenderer() const; - HashSet<Widget*> m_widgetsInRenderTree; static double sCurrentPaintTimeStamp; // used for detecting decoded resource thrash in the cache @@ -693,10 +570,10 @@ private: LayoutSize m_size; LayoutSize m_margins; - std::unique_ptr<ListHashSet<RenderEmbeddedObject*>> m_embeddedObjectsToUpdate; - const Ref<Frame> m_frame; + OwnPtr<ListHashSet<RenderEmbeddedObject*>> m_embeddedObjectsToUpdate; + const RefPtr<Frame> m_frame; - std::unique_ptr<HashSet<const RenderElement*>> m_slowRepaintObjects; + OwnPtr<HashSet<RenderElement*>> m_slowRepaintObjects; bool m_needsFullRepaint; @@ -705,17 +582,20 @@ private: bool m_isOverlapped; bool m_contentIsOpaque; - Timer m_layoutTimer; + int m_borderX; + int m_borderY; + + Timer<FrameView> m_layoutTimer; bool m_delayedLayout; - RenderElement* m_layoutRoot { nullptr }; + RenderElement* m_layoutRoot; LayoutPhase m_layoutPhase; bool m_layoutSchedulingEnabled; bool m_inSynchronousPostLayout; int m_layoutCount; unsigned m_nestedLayoutCount; - Timer m_postLayoutTasksTimer; - Timer m_updateEmbeddedObjectsTimer; + Timer<FrameView> m_postLayoutTasksTimer; + Timer<FrameView> m_updateEmbeddedObjectsTimer; bool m_firstLayoutCallbackPending; bool m_firstLayout; @@ -729,29 +609,26 @@ private: bool m_overflowStatusDirty; bool m_horizontalOverflow; - bool m_verticalOverflow; - enum class ViewportRendererType { None, Document, Body }; - ViewportRendererType m_viewportRendererType { ViewportRendererType::None }; + bool m_verticalOverflow; + RenderElement* m_viewportRenderer; Pagination m_pagination; bool m_wasScrolledByUser; bool m_inProgrammaticScroll; bool m_safeToPropagateScrollToParent; - Timer m_delayedScrollEventTimer; double m_lastPaintTime; bool m_isTrackingRepaints; // Used for testing. - Vector<FloatRect> m_trackedRepaintRects; + Vector<IntRect> m_trackedRepaintRects; bool m_shouldUpdateWhileOffscreen; FloatRect m_exposedRect; - unsigned m_deferSetNeedsLayoutCount; + unsigned m_deferSetNeedsLayouts; bool m_setNeedsLayoutWasDeferred; - int m_layoutDisallowed { 0 }; RefPtr<Node> m_nodeToDraw; PaintBehavior m_paintBehavior; @@ -762,27 +639,19 @@ private: bool m_isVisuallyNonEmpty; bool m_firstVisuallyNonEmptyLayoutCallbackPending; - bool m_viewportIsStable { true }; - - RefPtr<ContainerNode> m_maintainScrollPositionAnchor; + RefPtr<Node> m_maintainScrollPositionAnchor; // Renderer to hold our custom scroll corner. RenderPtr<RenderScrollbarPart> m_scrollCorner; bool m_speculativeTilingEnabled; - Timer m_speculativeTilingEnableTimer; + Timer<FrameView> m_speculativeTilingEnableTimer; #if PLATFORM(IOS) bool m_useCustomFixedPositionLayoutRect; IntRect m_customFixedPositionLayoutRect; - - bool m_useCustomSizeForResizeEvent; - IntSize m_customSizeForResizeEvent; #endif - IntSize m_overrideViewportSize; - bool m_hasOverrideViewportSize; - // If true, automatically resize the frame view around its content. bool m_shouldAutoSize; bool m_inAutoSize; @@ -797,8 +666,8 @@ private: // The intrinsic content size decided by autosizing. IntSize m_autoSizeContentSize; - std::unique_ptr<ScrollableAreaSet> m_scrollableAreas; - std::unique_ptr<ViewportConstrainedObjectSet> m_viewportConstrainedObjects; + OwnPtr<ScrollableAreaSet> m_scrollableAreas; + OwnPtr<ViewportConstrainedObjectSet> m_viewportConstrainedObjects; int m_headerHeight; int m_footerHeight; @@ -815,12 +684,8 @@ private: #endif bool m_visualUpdatesAllowedByClient; - bool m_hasFlippedBlockRenderers; - + ScrollPinningBehavior m_scrollPinningBehavior; - - IntRect* m_cachedWindowClipRect { nullptr }; - Vector<std::function<void()>> m_postLayoutCallbackQueue; }; inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count) @@ -843,8 +708,8 @@ inline void FrameView::incrementVisuallyNonEmptyPixelCount(const IntSize& size) updateIsVisuallyNonEmpty(); } -} // namespace WebCore +WIDGET_TYPE_CASTS(FrameView, isFrameView()); -SPECIALIZE_TYPE_TRAITS_WIDGET(FrameView, isFrameView()) +} // namespace WebCore #endif // FrameView_h |
