| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 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_TABS_MEDIA_INDICATOR_BUTTON_H_ | |
| 6 #define CHROME_BROWSER_UI_COCOA_TABS_MEDIA_INDICATOR_BUTTON_H_ | |
| 7 | |
| 8 #import "base/mac/scoped_nsobject.h" | |
| 9 #include "base/memory/scoped_ptr.h" | |
| 10 #include "chrome/browser/ui/tabs/tab_utils.h" | |
| 11 #import "ui/base/cocoa/hover_button.h" | |
| 12 | |
| 13 namespace gfx { | |
| 14 class Animation; | |
| 15 class AnimationDelegate; | |
| 16 } // namespace gfx | |
| 17 | |
| 18 // This is an HoverButton subclass that serves as both the media indicator icon | |
| 19 // (audio, tab capture, etc.), and as a mute button. It is meant to only be | |
| 20 // used as a subview of TabView. | |
| 21 // | |
| 22 // When the indicator is transitioned to the audio playing or muting state, the | |
| 23 // button functionality is enabled and begins handling mouse events. Otherwise, | |
| 24 // this view behaves like an image and all mouse events will be handled by the | |
| 25 // its superview. | |
| 26 // | |
| 27 // Note: Send the |-setClickTarget:withAction:| message instead of the | |
| 28 // |-setTarget:| and |-setAction:| messages to be notified of button clicks. | |
| 29 @interface MediaIndicatorButton : HoverButton { | |
| 30 @private | |
| 31 class FadeAnimationDelegate; | |
| 32 | |
| 33 // Current TabMediaState. When animating fade-in/out, this reflects the | |
| 34 // indicator state at the end of the animation. | |
| 35 TabMediaState mediaState_; | |
| 36 | |
| 37 // Media indicator fade-in/out animation (i.e., only on show/hide, not a | |
| 38 // continuous animation). | |
| 39 scoped_ptr<gfx::AnimationDelegate> fadeAnimationDelegate_; | |
| 40 scoped_ptr<gfx::Animation> fadeAnimation_; | |
| 41 TabMediaState showingMediaState_; | |
| 42 | |
| 43 // Target and action invoked whenever a fade-in/out animation completes. This | |
| 44 // is used by TabController to layout the TabView after an indicator has | |
| 45 // completely faded out. | |
| 46 __weak id animationDoneTarget_; | |
| 47 SEL animationDoneAction_; | |
| 48 | |
| 49 // The image to show when the mouse hovers over the button. | |
| 50 base::scoped_nsobject<NSImage> affordanceImage_; | |
| 51 | |
| 52 // Target and action invoked whenever an enabled button is clicked. | |
| 53 __weak id clickTarget_; | |
| 54 SEL clickAction_; | |
| 55 } | |
| 56 | |
| 57 @property(readonly, nonatomic) TabMediaState showingMediaState; | |
| 58 | |
| 59 // Initialize a new MediaIndicatorButton in TAB_MEDIA_STATE_NONE (i.e., a | |
| 60 // non-active indicator). | |
| 61 - (id)init; | |
| 62 | |
| 63 // Updates button images, starts fade animations, and activates/deactivates | |
| 64 // button functionality as appropriate. | |
| 65 - (void)transitionToMediaState:(TabMediaState)nextState; | |
| 66 | |
| 67 // Register a message be sent to |target| whenever fade animations complete. A | |
| 68 // weak reference on |target| is held. | |
| 69 - (void)setAnimationDoneTarget:(id)target withAction:(SEL)action; | |
| 70 | |
| 71 // Request a message be sent to |target| whenever the enabled button has been | |
| 72 // clicked. A weak reference on |target| is held. | |
| 73 - (void)setClickTarget:(id)target withAction:(SEL)action; | |
| 74 | |
| 75 @end | |
| 76 | |
| 77 #endif // CHROME_BROWSER_UI_COCOA_TABS_MEDIA_INDICATOR_BUTTON_H_ | |
| OLD | NEW |