1/* 2 * Copyright (C) 2012 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef ScrollingTreeFrameScrollingNodeMac_h 27#define ScrollingTreeFrameScrollingNodeMac_h 28 29#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC) 30 31#include "ScrollElasticityController.h" 32#include "ScrollbarThemeMac.h" 33#include "ScrollingTreeFrameScrollingNode.h" 34#include <wtf/RetainPtr.h> 35 36OBJC_CLASS CALayer; 37 38namespace WebCore { 39 40class ScrollingTreeFrameScrollingNodeMac : public ScrollingTreeFrameScrollingNode, private ScrollElasticityControllerClient { 41public: 42 static PassRefPtr<ScrollingTreeFrameScrollingNode> create(ScrollingTree&, ScrollingNodeID); 43 virtual ~ScrollingTreeFrameScrollingNodeMac(); 44 45private: 46 ScrollingTreeFrameScrollingNodeMac(ScrollingTree&, ScrollingNodeID); 47 48 // ScrollingTreeNode member functions. 49 virtual void updateBeforeChildren(const ScrollingStateNode&) override; 50 virtual void updateAfterChildren(const ScrollingStateNode&) override; 51 virtual void handleWheelEvent(const PlatformWheelEvent&) override; 52 53 // ScrollElasticityController member functions. 54 virtual bool allowsHorizontalStretching() override; 55 virtual bool allowsVerticalStretching() override; 56 virtual IntSize stretchAmount() override; 57 virtual bool pinnedInDirection(const FloatSize&) override; 58 virtual bool canScrollHorizontally() override; 59 virtual bool canScrollVertically() override; 60 virtual bool shouldRubberBandInDirection(ScrollDirection) override; 61 virtual IntPoint absoluteScrollPosition() override; 62 virtual void immediateScrollBy(const FloatSize&) override; 63 virtual void immediateScrollByWithoutContentEdgeConstraints(const FloatSize&) override; 64 virtual void startSnapRubberbandTimer() override; 65 virtual void stopSnapRubberbandTimer() override; 66 virtual void adjustScrollPositionToBoundsIfNecessary() override; 67 68 virtual FloatPoint scrollPosition() const override; 69 virtual void setScrollPosition(const FloatPoint&) override; 70 virtual void setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&) override; 71 72 virtual void updateLayersAfterViewportChange(const FloatRect& fixedPositionRect, double scale) override; 73 74 virtual void setScrollLayerPosition(const FloatPoint&) override; 75 76 virtual FloatPoint minimumScrollPosition() const override; 77 virtual FloatPoint maximumScrollPosition() const override; 78 79 void updateMainFramePinState(const FloatPoint& scrollPosition); 80 81 void logExposedUnfilledArea(); 82 83 ScrollElasticityController m_scrollElasticityController; 84 RetainPtr<CFRunLoopTimerRef> m_snapRubberbandTimer; 85 86 RetainPtr<CALayer> m_scrollLayer; 87 RetainPtr<CALayer> m_scrolledContentsLayer; 88 RetainPtr<CALayer> m_counterScrollingLayer; 89 RetainPtr<CALayer> m_insetClipLayer; 90 RetainPtr<CALayer> m_contentShadowLayer; 91 RetainPtr<CALayer> m_headerLayer; 92 RetainPtr<CALayer> m_footerLayer; 93 RetainPtr<ScrollbarPainter> m_verticalScrollbarPainter; 94 RetainPtr<ScrollbarPainter> m_horizontalScrollbarPainter; 95 FloatPoint m_probableMainThreadScrollPosition; 96 bool m_lastScrollHadUnfilledPixels; 97}; 98 99} // namespace WebCore 100 101#endif // ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC) 102 103#endif // ScrollingTreeFrameScrollingNodeMac_h 104