1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 25abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * Copyright (c) 2010, Google Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#ifndef ScrollAnimator_h 325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#define ScrollAnimator_h 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 345abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "ScrollTypes.h" 35ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include <wtf/Forward.h> 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 39ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass FloatPoint; 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass PlatformWheelEvent; 41ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass ScrollableArea; 422fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass Scrollbar; 432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS) 452fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass PlatformGestureEvent; 462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickclass ScrollAnimator { 495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickpublic: 50ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static PassOwnPtr<ScrollAnimator> create(ScrollableArea*); 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 525abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick virtual ~ScrollAnimator(); 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 545abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // Computes a scroll destination for the given parameters. Returns false if 555abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // already at the destination. Otherwise, starts scrolling towards the 565abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // destination and returns true. Scrolling may be immediate or animated. 575abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // The base class implementation always scrolls immediately, never animates. 585abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick virtual bool scroll(ScrollbarOrientation, ScrollGranularity, float step, float multiplier); 59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 60ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void scrollToOffsetWithoutAnimation(const FloatPoint&); 61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ScrollableArea* scrollableArea() const { return m_scrollableArea; } 632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void handleWheelEvent(PlatformWheelEvent&); 652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS) 662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void handleGestureEvent(const PlatformGestureEvent&); 672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 69ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch FloatPoint currentPosition() const; 70db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 712bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void cancelAnimations() { } 722bde8e466a4451c7319e3a072d118917957d6554Steve Block 732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void contentAreaWillPaint() const { } 742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void mouseEnteredContentArea() const { } 752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void mouseExitedContentArea() const { } 762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void mouseMovedInContentArea() const { } 772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void willStartLiveResize() { } 782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void contentsResized() const { } 792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void willEndLiveResize() { } 802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void contentAreaDidShow() const { } 812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void contentAreaDidHide() const { } 822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void didAddVerticalScrollbar(Scrollbar*) { } 842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void willRemoveVerticalScrollbar(Scrollbar*) { } 852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void didAddHorizontalScrollbar(Scrollbar*) { } 862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void willRemoveHorizontalScrollbar(Scrollbar*) { } 872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 885abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickprotected: 89ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ScrollAnimator(ScrollableArea*); 90ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void notityPositionChanged(); 92ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 93ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ScrollableArea* m_scrollableArea; 945abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick float m_currentPosX; // We avoid using a FloatPoint in order to reduce 955abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick float m_currentPosY; // subclass code complexity. 96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}; 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 985abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} // namespace WebCore 99ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 100ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#endif // ScrollAnimator_h 101