| Index: chrome/browser/ui/search/toolbar_search_animator.h
|
| diff --git a/chrome/browser/ui/search/toolbar_search_animator.h b/chrome/browser/ui/search/toolbar_search_animator.h
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..cd3ba8fa299d0065cae717b98ee032cacb4eea84
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/search/toolbar_search_animator.h
|
| @@ -0,0 +1,118 @@
|
| +// Copyright (c) 2012 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 CHROME_BROWSER_UI_SEARCH_TOOLBAR_SEARCH_ANIMATOR_H_
|
| +#define CHROME_BROWSER_UI_SEARCH_TOOLBAR_SEARCH_ANIMATOR_H_
|
| +#pragma once
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/observer_list.h"
|
| +#include "base/timer.h"
|
| +#include "chrome/browser/ui/search/search_model_observer.h"
|
| +#include "ui/base/animation/animation_delegate.h"
|
| +
|
| +class TabContents;
|
| +
|
| +namespace ui {
|
| +class SlideAnimation;
|
| +}
|
| +
|
| +namespace chrome {
|
| +namespace search {
|
| +
|
| +class SearchModel;
|
| +class ToolbarSearchAnimatorObserver;
|
| +
|
| +// ToolbarSearchAnimator is used to track the background state of the toolbar
|
| +// and related classes. To use ToolbarSearchAnimator, add a
|
| +// ToolbarSearchAnimatorObserver. The ToolbarSearchAnimatorObserver is then
|
| +// notified appropriately.
|
| +class ToolbarSearchAnimator : public SearchModelObserver,
|
| + public ui::AnimationDelegate {
|
| + public:
|
| + // State of background to paint by observers, only applicable for
|
| + // |MODE_SEARCH|.
|
| + enum BackgroundState {
|
| + // Background state is not applicable.
|
| + BACKGROUND_STATE_DEFAULT = 0,
|
| + // Show background for |MODE_NTP|.
|
| + BACKGROUND_STATE_NTP = 0x01,
|
| + // Show background for |MODE_SEARCH|.
|
| + BACKGROUND_STATE_SEARCH = 0x02,
|
| + // Show backgrounds for both |MODE_NTP| and |MODE_SEARCH|.
|
| + BACKGROUND_STATE_NTP_SEARCH = BACKGROUND_STATE_NTP |
|
| + BACKGROUND_STATE_SEARCH,
|
| + };
|
| +
|
| + explicit ToolbarSearchAnimator(SearchModel* search_model);
|
| + virtual ~ToolbarSearchAnimator();
|
| +
|
| + // Get the current background state to paint.
|
| + // |search_background_opacity| contains a valid opacity value only if
|
| + // background for |MODE_SEARCH| needs to be shown i.e. |background_state| is
|
| + // BACKGROUND_STATE_SEARCH or BACKGROUND_STATE_NTP_SEARCH.
|
| + // Only call this for |MODE_SEARCH|.
|
| + void GetCurrentBackgroundState(BackgroundState* background_state,
|
| + double* search_background_opacity) const;
|
| +
|
| + // Called from SearchDelegate::StopObservingTab() when a tab is deactivated or
|
| + // closing or detached, to jump to the end state of the animation.
|
| + // This allows a reactivated tab to show the end state of the animation,
|
| + // rather than the transient state.
|
| + void FinishAnimation(TabContents* tab_contents);
|
| +
|
| + // Add and remove observers.
|
| + void AddObserver(ToolbarSearchAnimatorObserver* observer);
|
| + void RemoveObserver(ToolbarSearchAnimatorObserver* observer);
|
| +
|
| + // Overridden from SearchModelObserver:
|
| + virtual void ModeChanged(const Mode& mode) OVERRIDE;
|
| +
|
| + // Overridden from ui::AnimationDelegate:
|
| + virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE;
|
| + virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE;
|
| +
|
| + private:
|
| + // State of animation.
|
| + enum AnimateState {
|
| + ANIMATE_STATE_NONE, // Doing nothing.
|
| + ANIMATE_STATE_WAITING, // Waiting to run background animation.
|
| + ANIMATE_STATE_RUNNING, // Running background animation.
|
| + };
|
| +
|
| + // Callback for |background_change_timer_| to actually start the background
|
| + // change animation.
|
| + void StartBackgroundChange();
|
| +
|
| + // Reset state of animator: reset animate_state_, stop timer or animation,
|
| + // If we're waiting to animate or animating, i.e. |animate_state| is not
|
| + // ANIMATE_STAET_NONE, wwe'll notify observers via
|
| + // ToolbarSearchAnimatorObserver::BackgroundChangeCanceled.
|
| + // Pass in |tab_contents| if animation is canceled because of deactivating or
|
| + // detaching or closing a tab.
|
| + void Reset(TabContents* tab_contents);
|
| +
|
| + // Weak. Owned by Browser. Non-NULL.
|
| + SearchModel* search_model_;
|
| +
|
| + // State of animation.
|
| + AnimateState animate_state_;
|
| +
|
| + // The background fade animation.
|
| + scoped_ptr<ui::SlideAnimation> background_animation_;
|
| +
|
| + // The timer to delay start of animation after mode changes from |MODE_NTP| to
|
| + // |MODE_SEARCH|.
|
| + base::OneShotTimer<ToolbarSearchAnimator> background_change_timer_;
|
| +
|
| + // Observers.
|
| + ObserverList<ToolbarSearchAnimatorObserver> observers_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ToolbarSearchAnimator);
|
| +};
|
| +
|
| +} // namespace chrome
|
| +} // namespace search
|
| +
|
| +#endif // CHROME_BROWSER_UI_SEARCH_TOOLBAR_SEARCH_ANIMATOR_H_
|
|
|