ScrollAnimator.h revision ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb
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; 40ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass ScrollableArea; 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 425abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickclass ScrollAnimator { 435abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickpublic: 44ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static PassOwnPtr<ScrollAnimator> create(ScrollableArea*); 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick virtual ~ScrollAnimator(); 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // Computes a scroll destination for the given parameters. Returns false if 495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // already at the destination. Otherwise, starts scrolling towards the 505abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // destination and returns true. Scrolling may be immediate or animated. 515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick // The base class implementation always scrolls immediately, never animates. 525abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick virtual bool scroll(ScrollbarOrientation, ScrollGranularity, float step, float multiplier); 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 54ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void scrollToOffsetWithoutAnimation(const FloatPoint&); 55ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 56ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch FloatPoint currentPosition() const; 57db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 585abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickprotected: 59ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ScrollAnimator(ScrollableArea*); 60ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void notityPositionChanged(); 62ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 63ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ScrollableArea* m_scrollableArea; 645abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick float m_currentPosX; // We avoid using a FloatPoint in order to reduce 655abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick float m_currentPosY; // subclass code complexity. 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}; 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 685abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} // namespace WebCore 69ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 70ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#endif // ScrollAnimator_h 71