12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_ANIMATION_SCROLLBAR_ANIMATION_CONTROLLER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_ANIMATION_SCROLLBAR_ANIMATION_CONTROLLER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/cancelable_callback.h" 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/weak_ptr.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/vector2d_f.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class CC_EXPORT ScrollbarAnimationControllerClient { 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~ScrollbarAnimationControllerClient() {} 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void PostDelayedScrollbarFade(const base::Closure& start_fade, 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta delay) = 0; 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SetNeedsScrollbarAnimationFrame() = 0; 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This abstract class represents the compositor-side analogy of 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ScrollbarAnimator. Individual platforms should subclass it to provide 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// specialized implementation. 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT ScrollbarAnimationController { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~ScrollbarAnimationController(); 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void Animate(base::TimeTicks now); 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DidScrollBegin(); 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DidScrollUpdate(); 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DidScrollEnd(); 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DidMouseMoveOffScrollbar() {} 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DidMouseMoveNear(float distance) {} 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) protected: 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScrollbarAnimationController(ScrollbarAnimationControllerClient* client, 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta delay_before_starting, 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta duration); 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void RunAnimationFrame(float progress) = 0; 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void StartAnimation(); 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void StopAnimation(); 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private: 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Returns how far through the animation we are as a progress value from 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // 0 to 1. 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) float AnimationProgressAtTime(base::TimeTicks now); 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void PostDelayedFade(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScrollbarAnimationControllerClient* client_; 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeTicks last_awaken_time_; 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta delay_before_starting_; 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeDelta duration_; 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool is_animating_; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool currently_scrolling_; 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool scroll_gesture_has_scrolled_; 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::CancelableClosure delayed_scrollbar_fade_; 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::WeakPtrFactory<ScrollbarAnimationController> weak_factory_; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_ANIMATION_SCROLLBAR_ANIMATION_CONTROLLER_H_ 73