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