15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_COCOA_ANIMATABLE_IMAGE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_COCOA_ANIMATABLE_IMAGE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Cocoa/Cocoa.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <QuartzCore/QuartzCore.h>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/mac/scoped_nsobject.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class helps animate an NSImage's frame and opacity. It works by creating
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a blank NSWindow in the size specified and giving it a layer on which the
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// image can be animated. Clients are free to embed this object as a child
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window for easier window management. This class will clean itself up when
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the animation has finished. Clients that install this as a child window
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// should listen for the NSWindowWillCloseNotification to perform any additional
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cleanup.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@interface AnimatableImage : NSWindow {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @private
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The image to animate.
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<NSImage> image_;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The frame of the image before and after the animation. This is in this
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window's coordinate system.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CGRect startFrame_;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CGRect endFrame_;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Opacity values for the animation.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CGFloat startOpacity_;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CGFloat endOpacity_;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The amount of time it takes to animate the image.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CGFloat duration_;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@property(nonatomic) CGRect startFrame;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@property(nonatomic) CGRect endFrame;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@property(nonatomic) CGFloat startOpacity;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@property(nonatomic) CGFloat endOpacity;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@property(nonatomic) CGFloat duration;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Designated initializer. Do not use any other NSWindow initializers. Creates
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// but does not show the blank animation window of the given size. The
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |animationFrame| should usually be big enough to contain the |startFrame|
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and |endFrame| properties of the animation.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (id)initWithImage:(NSImage*)image
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     animationFrame:(NSRect)animationFrame;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Begins the animation.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (void)startAnimation;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@end
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_COCOA_ANIMATABLE_IMAGE_H_
57