blob: 9bfdb9a0ccc7847022a862130bb4809065a9eb37 [file] [log] [blame]
/*
* Copyright (C) 2012 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.
*/
#ifndef ScrollingStateScrollingNode_h
#define ScrollingStateScrollingNode_h
#if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
#include "IntRect.h"
#include "Region.h"
#include "ScrollTypes.h"
#include "ScrollbarThemeComposite.h"
#include "ScrollingCoordinator.h"
#include "ScrollingStateNode.h"
#include <wtf/PassOwnPtr.h>
namespace WebCore {
class Scrollbar;
class ScrollingStateScrollingNode FINAL : public ScrollingStateNode {
public:
static PassOwnPtr<ScrollingStateScrollingNode> create(ScrollingStateTree*, ScrollingNodeID);
virtual PassOwnPtr<ScrollingStateNode> clone();
virtual ~ScrollingStateScrollingNode();
enum ChangedProperty {
ViewportRect = NumStateNodeBits,
TotalContentsSize,
ScrollOrigin,
ScrollableAreaParams,
FrameScaleFactor,
NonFastScrollableRegion,
WheelEventHandlerCount,
ReasonsForSynchronousScrolling,
RequestedScrollPosition,
CounterScrollingLayer,
HeaderHeight,
FooterHeight,
HeaderLayer,
FooterLayer,
PainterForScrollbar,
BehaviorForFixedElements
};
const IntRect& viewportRect() const { return m_viewportRect; }
void setViewportRect(const IntRect&);
const IntSize& totalContentsSize() const { return m_totalContentsSize; }
void setTotalContentsSize(const IntSize&);
const IntPoint& scrollOrigin() const { return m_scrollOrigin; }
void setScrollOrigin(const IntPoint&);
float frameScaleFactor() const { return m_frameScaleFactor; }
void setFrameScaleFactor(float);
const Region& nonFastScrollableRegion() const { return m_nonFastScrollableRegion; }
void setNonFastScrollableRegion(const Region&);
unsigned wheelEventHandlerCount() const { return m_wheelEventHandlerCount; }
void setWheelEventHandlerCount(unsigned);
SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
void setSynchronousScrollingReasons(SynchronousScrollingReasons);
const ScrollableAreaParameters& scrollableAreaParameters() const { return m_scrollableAreaParameters; }
void setScrollableAreaParameters(const ScrollableAreaParameters& params);
ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; }
void setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements);
const IntPoint& requestedScrollPosition() const { return m_requestedScrollPosition; }
void setRequestedScrollPosition(const IntPoint&, bool representsProgrammaticScroll);
int headerHeight() const { return m_headerHeight; }
void setHeaderHeight(int);
int footerHeight() const { return m_footerHeight; }
void setFooterHeight(int);
// This is a layer moved in the opposite direction to scrolling, for example for background-attachment:fixed
GraphicsLayer* counterScrollingLayer() const { return m_counterScrollingLayer; }
void setCounterScrollingLayer(GraphicsLayer*);
PlatformLayer* counterScrollingPlatformLayer() const;
// The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
GraphicsLayer* headerLayer() const { return m_headerLayer; }
void setHeaderLayer(GraphicsLayer*);
PlatformLayer* headerPlatformLayer() const;
// The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
GraphicsLayer* footerLayer() const { return m_footerLayer; }
void setFooterLayer(GraphicsLayer*);
PlatformLayer* footerPlatformLayer() const;
#if PLATFORM(MAC)
ScrollbarPainter verticalScrollbarPainter() const { return m_verticalScrollbarPainter; }
ScrollbarPainter horizontalScrollbarPainter() const { return m_horizontalScrollbarPainter; }
#endif
void setScrollbarPaintersFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar);
bool requestedScrollPositionRepresentsProgrammaticScroll() const { return m_requestedScrollPositionRepresentsProgrammaticScroll; }
virtual void dumpProperties(TextStream&, int indent) const OVERRIDE;
private:
ScrollingStateScrollingNode(ScrollingStateTree*, ScrollingNodeID);
ScrollingStateScrollingNode(const ScrollingStateScrollingNode&);
virtual bool isScrollingNode() const OVERRIDE { return true; }
GraphicsLayer* m_counterScrollingLayer;
GraphicsLayer* m_headerLayer;
GraphicsLayer* m_footerLayer;
#if PLATFORM(MAC)
RetainPtr<PlatformLayer> m_counterScrollingPlatformLayer;
RetainPtr<PlatformLayer> m_headerPlatformLayer;
RetainPtr<PlatformLayer> m_footerPlatformLayer;
ScrollbarPainter m_verticalScrollbarPainter;
ScrollbarPainter m_horizontalScrollbarPainter;
#endif
IntRect m_viewportRect;
IntSize m_totalContentsSize;
IntPoint m_scrollOrigin;
ScrollableAreaParameters m_scrollableAreaParameters;
Region m_nonFastScrollableRegion;
float m_frameScaleFactor;
unsigned m_wheelEventHandlerCount;
SynchronousScrollingReasons m_synchronousScrollingReasons;
ScrollBehaviorForFixedElements m_behaviorForFixed;
int m_headerHeight;
int m_footerHeight;
IntPoint m_requestedScrollPosition;
bool m_requestedScrollPositionRepresentsProgrammaticScroll;
};
SCROLLING_STATE_NODE_TYPE_CASTS(ScrollingStateScrollingNode, isScrollingNode());
} // namespace WebCore
#endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
#endif // ScrollingStateScrollingNode_h