From 3ba4cae36f9c80067c103809fa3f65ad18c7f2d5 Mon Sep 17 00:00:00 2001 From: "tedchoc@chromium.org" Date: Wed, 16 Jan 2013 03:58:38 +0000 Subject: Add support for calculating the position of the top controls in the cc layer. Provides a means for keeping the top controls in sync with the currently renderered frame, which will allow us to move the top controls around the screen. BUG=161303 Review URL: https://chromiumcodereview.appspot.com/11552009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177081 0039d316-1c4b-4281-b951-d872f2087c98 --- cc/top_controls_manager.h | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 cc/top_controls_manager.h (limited to 'cc/top_controls_manager.h') diff --git a/cc/top_controls_manager.h b/cc/top_controls_manager.h new file mode 100644 index 0000000..37d1670 --- /dev/null +++ b/cc/top_controls_manager.h @@ -0,0 +1,77 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CC_TOP_CONTROLS_MANAGER_H_ +#define CC_TOP_CONTROLS_MANAGER_H_ + +#include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" +#include "cc/layer_impl.h" +#include "ui/gfx/size.h" +#include "ui/gfx/vector2d_f.h" + +namespace base { +class TimeTicks; +} + +namespace cc { + +class KeyframedFloatAnimationCurve; +class LayerTreeImpl; +class TopControlsManagerClient; + +// Manages the position of the top controls. +class CC_EXPORT TopControlsManager { + public: + static scoped_ptr Create(TopControlsManagerClient* client, + float top_controls_height); + virtual ~TopControlsManager(); + + void set_content_layer_id(int id) { content_layer_id_ = id; } + float controls_top_offset() { return controls_top_offset_; } + float content_top_offset() { return content_top_offset_; } + float is_overlay_mode() { return is_overlay_mode_; } + KeyframedFloatAnimationCurve* animation() { + return top_controls_animation_.get(); + } + + void UpdateDrawPositions(); + + void ScrollBegin(); + gfx::Vector2dF ScrollBy(const gfx::Vector2dF pending_delta); + void ScrollEnd(); + + void Animate(base::TimeTicks monotonic_time); + + protected: + TopControlsManager(TopControlsManagerClient* client, + float top_controls_height); + + private: + gfx::Vector2dF ScrollInternal(const gfx::Vector2dF pending_delta); + void ResetAnimations(); + LayerImpl* RootScrollLayer(); + float RootScrollLayerTotalScrollY(); + void SetupAnimation(bool show_controls); + void StartAnimationIfNecessary(); + + TopControlsManagerClient* client_; // The client manages the lifecycle of + // this. + + scoped_ptr top_controls_animation_; + int content_layer_id_; + bool is_showing_animation_; + bool is_overlay_mode_; + float controls_top_offset_; + float content_top_offset_; + float top_controls_height_; + bool scroll_readjustment_enabled_; + float previous_root_scroll_offset_; + + DISALLOW_COPY_AND_ASSIGN(TopControlsManager); +}; + +} // namespace cc + +#endif // CC_TOP_CONTROLS_MANAGER_H_ -- cgit v1.1