1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_COCOA_ANIMATABLE_VIEW_H_
6#define CHROME_BROWSER_UI_COCOA_ANIMATABLE_VIEW_H_
7
8#import <Cocoa/Cocoa.h>
9
10#include "base/mac/scoped_nsobject.h"
11#import "chrome/browser/ui/cocoa/background_gradient_view.h"
12#import "chrome/browser/ui/cocoa/view_resizer.h"
13
14// A view that provides an animatable height property.  Provides methods to
15// animate to a new height, set a new height immediately, or cancel any running
16// animations.
17//
18// AnimatableView sends an |animationDidEnd:| message to its delegate when the
19// animation ends normally and an |animationDidStop:| message when the animation
20// was canceled (even when canceled as a result of a new animation starting).
21
22@interface AnimatableView : BackgroundGradientView<NSAnimationDelegate> {
23 @protected
24  IBOutlet id delegate_;  // weak, used to send animation ended messages.
25
26 @private
27  base::scoped_nsobject<NSAnimation> currentAnimation_;
28  id<ViewResizer> resizeDelegate_;  // weak, usually owns us
29}
30
31// Properties for bindings.
32@property(assign, nonatomic) id delegate;
33@property(assign, nonatomic) id<ViewResizer> resizeDelegate;
34
35// Gets the current height of the view.  If an animation is currently running,
36// this will give the current height at the time of the call, not the target
37// height at the end of the animation.
38- (CGFloat)height;
39
40// Sets the height of the view immediately.  Cancels any running animations.
41- (void)setHeight:(CGFloat)newHeight;
42
43// Starts a new animation to the given |newHeight| for the given |duration|.
44// Cancels any running animations.
45- (void)animateToNewHeight:(CGFloat)newHeight
46                  duration:(NSTimeInterval)duration;
47
48// Cancels any running animations, leaving the view at its current
49// (mid-animation) height.
50- (void)stopAnimation;
51
52// Gets the progress of any current animation.
53- (NSAnimationProgress)currentAnimationProgress;
54
55@end
56
57#endif  // CHROME_BROWSER_UI_COCOA_ANIMATABLE_VIEW_H_
58