1// Copyright (c) 2011 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_IMAGE_H_ 6#define CHROME_BROWSER_UI_COCOA_ANIMATABLE_IMAGE_H_ 7 8#import <Cocoa/Cocoa.h> 9#import <QuartzCore/QuartzCore.h> 10 11#include "base/mac/scoped_nsobject.h" 12 13// This class helps animate an NSImage's frame and opacity. It works by creating 14// a blank NSWindow in the size specified and giving it a layer on which the 15// image can be animated. Clients are free to embed this object as a child 16// window for easier window management. This class will clean itself up when 17// the animation has finished. Clients that install this as a child window 18// should listen for the NSWindowWillCloseNotification to perform any additional 19// cleanup. 20@interface AnimatableImage : NSWindow { 21 @private 22 // The image to animate. 23 base::scoped_nsobject<NSImage> image_; 24 25 // The frame of the image before and after the animation. This is in this 26 // window's coordinate system. 27 CGRect startFrame_; 28 CGRect endFrame_; 29 30 // Opacity values for the animation. 31 CGFloat startOpacity_; 32 CGFloat endOpacity_; 33 34 // The amount of time it takes to animate the image. 35 CGFloat duration_; 36} 37 38@property(nonatomic) CGRect startFrame; 39@property(nonatomic) CGRect endFrame; 40@property(nonatomic) CGFloat startOpacity; 41@property(nonatomic) CGFloat endOpacity; 42@property(nonatomic) CGFloat duration; 43 44// Designated initializer. Do not use any other NSWindow initializers. Creates 45// but does not show the blank animation window of the given size. The 46// |animationFrame| should usually be big enough to contain the |startFrame| 47// and |endFrame| properties of the animation. 48- (id)initWithImage:(NSImage*)image 49 animationFrame:(NSRect)animationFrame; 50 51// Begins the animation. 52- (void)startAnimation; 53 54@end 55 56#endif // CHROME_BROWSER_UI_COCOA_ANIMATABLE_IMAGE_H_ 57