summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h')
-rw-r--r--Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h177
1 files changed, 177 insertions, 0 deletions
diff --git a/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h b/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h
new file mode 100644
index 000000000..eeaa71fe3
--- /dev/null
+++ b/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2014, 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
+
+#include "EventTrackingRegions.h"
+#include "ScrollTypes.h"
+#include "ScrollbarThemeComposite.h"
+#include "ScrollingCoordinator.h"
+#include "ScrollingStateScrollingNode.h"
+
+namespace WebCore {
+
+class Scrollbar;
+
+class ScrollingStateFrameScrollingNode final : public ScrollingStateScrollingNode {
+public:
+ static Ref<ScrollingStateFrameScrollingNode> create(ScrollingStateTree&, ScrollingNodeID);
+
+ Ref<ScrollingStateNode> clone(ScrollingStateTree&) override;
+
+ virtual ~ScrollingStateFrameScrollingNode();
+
+ enum ChangedProperty {
+ FrameScaleFactor = NumScrollingStateNodeBits,
+ EventTrackingRegion,
+ ReasonsForSynchronousScrolling,
+ ScrolledContentsLayer,
+ CounterScrollingLayer,
+ InsetClipLayer,
+ ContentShadowLayer,
+ HeaderHeight,
+ FooterHeight,
+ HeaderLayer,
+ FooterLayer,
+ PainterForScrollbar,
+ BehaviorForFixedElements,
+ TopContentInset,
+ FixedElementsLayoutRelativeToFrame,
+ VisualViewportEnabled,
+ LayoutViewport,
+ MinLayoutViewportOrigin,
+ MaxLayoutViewportOrigin,
+ };
+
+ float frameScaleFactor() const { return m_frameScaleFactor; }
+ WEBCORE_EXPORT void setFrameScaleFactor(float);
+
+ const EventTrackingRegions& eventTrackingRegions() const { return m_eventTrackingRegions; }
+ WEBCORE_EXPORT void setEventTrackingRegions(const EventTrackingRegions&);
+
+ SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
+ WEBCORE_EXPORT void setSynchronousScrollingReasons(SynchronousScrollingReasons);
+
+ ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; }
+ WEBCORE_EXPORT void setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements);
+
+ FloatRect layoutViewport() const { return m_layoutViewport; };
+ WEBCORE_EXPORT void setLayoutViewport(const FloatRect&);
+
+ FloatPoint minLayoutViewportOrigin() const { return m_minLayoutViewportOrigin; }
+ WEBCORE_EXPORT void setMinLayoutViewportOrigin(const FloatPoint&);
+
+ FloatPoint maxLayoutViewportOrigin() const { return m_maxLayoutViewportOrigin; }
+ WEBCORE_EXPORT void setMaxLayoutViewportOrigin(const FloatPoint&);
+
+ int headerHeight() const { return m_headerHeight; }
+ WEBCORE_EXPORT void setHeaderHeight(int);
+
+ int footerHeight() const { return m_footerHeight; }
+ WEBCORE_EXPORT void setFooterHeight(int);
+
+ float topContentInset() const { return m_topContentInset; }
+ WEBCORE_EXPORT void setTopContentInset(float);
+
+ const LayerRepresentation& scrolledContentsLayer() const { return m_scrolledContentsLayer; }
+ WEBCORE_EXPORT void setScrolledContentsLayer(const LayerRepresentation&);
+
+ // This is a layer moved in the opposite direction to scrolling, for example for background-attachment:fixed
+ const LayerRepresentation& counterScrollingLayer() const { return m_counterScrollingLayer; }
+ WEBCORE_EXPORT void setCounterScrollingLayer(const LayerRepresentation&);
+
+ // This is a clipping layer that will scroll with the page for all y-delta scroll values between 0
+ // and topContentInset(). Once the y-deltas get beyond the content inset point, this layer no longer
+ // needs to move. If the topContentInset() is 0, this layer does not need to move at all. This is
+ // only used on the Mac.
+ const LayerRepresentation& insetClipLayer() const { return m_insetClipLayer; }
+ WEBCORE_EXPORT void setInsetClipLayer(const LayerRepresentation&);
+
+ const LayerRepresentation& contentShadowLayer() const { return m_contentShadowLayer; }
+ WEBCORE_EXPORT void setContentShadowLayer(const LayerRepresentation&);
+
+ // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
+ const LayerRepresentation& headerLayer() const { return m_headerLayer; }
+ WEBCORE_EXPORT void setHeaderLayer(const LayerRepresentation&);
+
+ // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
+ const LayerRepresentation& footerLayer() const { return m_footerLayer; }
+ WEBCORE_EXPORT void setFooterLayer(const LayerRepresentation&);
+
+ bool fixedElementsLayoutRelativeToFrame() const { return m_fixedElementsLayoutRelativeToFrame; }
+ WEBCORE_EXPORT void setFixedElementsLayoutRelativeToFrame(bool);
+
+ bool visualViewportEnabled() const { return m_visualViewportEnabled; };
+ WEBCORE_EXPORT void setVisualViewportEnabled(bool);
+
+#if PLATFORM(MAC)
+ NSScrollerImp *verticalScrollerImp() const { return m_verticalScrollerImp.get(); }
+ NSScrollerImp *horizontalScrollerImp() const { return m_horizontalScrollerImp.get(); }
+#endif
+ void setScrollerImpsFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar);
+
+ void dumpProperties(TextStream&, int indent, ScrollingStateTreeAsTextBehavior) const override;
+
+private:
+ ScrollingStateFrameScrollingNode(ScrollingStateTree&, ScrollingNodeID);
+ ScrollingStateFrameScrollingNode(const ScrollingStateFrameScrollingNode&, ScrollingStateTree&);
+
+ LayerRepresentation m_counterScrollingLayer;
+ LayerRepresentation m_insetClipLayer;
+ LayerRepresentation m_scrolledContentsLayer;
+ LayerRepresentation m_contentShadowLayer;
+ LayerRepresentation m_headerLayer;
+ LayerRepresentation m_footerLayer;
+
+#if PLATFORM(MAC)
+ RetainPtr<NSScrollerImp> m_verticalScrollerImp;
+ RetainPtr<NSScrollerImp> m_horizontalScrollerImp;
+#endif
+
+ EventTrackingRegions m_eventTrackingRegions;
+ FloatPoint m_requestedScrollPosition;
+
+ FloatRect m_layoutViewport;
+ FloatPoint m_minLayoutViewportOrigin;
+ FloatPoint m_maxLayoutViewportOrigin;
+
+ float m_frameScaleFactor { 1 };
+ float m_topContentInset { 0 };
+ int m_headerHeight { 0 };
+ int m_footerHeight { 0 };
+ SynchronousScrollingReasons m_synchronousScrollingReasons { 0 };
+ ScrollBehaviorForFixedElements m_behaviorForFixed { StickToDocumentBounds };
+ bool m_requestedScrollPositionRepresentsProgrammaticScroll { false };
+ bool m_fixedElementsLayoutRelativeToFrame { false };
+ bool m_visualViewportEnabled { false };
+};
+
+} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_SCROLLING_STATE_NODE(ScrollingStateFrameScrollingNode, isFrameScrollingNode())
+
+#endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)