Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1413)

Unified Diff: chrome/browser/ui/cocoa/tabs/media_indicator_button_cocoa.mm

Issue 1827083004: UI: Rename MediaState to AlertState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-tab-indicator
Patch Set: Keep gypi ordered Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/tabs/media_indicator_button_cocoa.mm
diff --git a/chrome/browser/ui/cocoa/tabs/media_indicator_button_cocoa.mm b/chrome/browser/ui/cocoa/tabs/media_indicator_button_cocoa.mm
deleted file mode 100644
index 2d1888e8fe85514e69379140deca34aa18cf901b..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/cocoa/tabs/media_indicator_button_cocoa.mm
+++ /dev/null
@@ -1,240 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "chrome/browser/ui/cocoa/tabs/media_indicator_button_cocoa.h"
-
-#include "base/logging.h"
-#include "base/mac/foundation_util.h"
-#include "base/macros.h"
-#include "base/thread_task_runner_handle.h"
-#import "chrome/browser/ui/cocoa/tabs/tab_view.h"
-#include "content/public/browser/user_metrics.h"
-#include "ui/gfx/animation/animation.h"
-#include "ui/gfx/animation/animation_delegate.h"
-#include "ui/gfx/image/image.h"
-
-namespace {
-
-// The minimum required click-to-select area of an inactive tab before allowing
-// the click-to-mute functionality to be enabled. This value is in terms of
-// some percentage of the MediaIndicatorButton's width. See comments in the
-// updateEnabledForMuteToggle method.
-const int kMinMouseSelectableAreaPercent = 250;
-
-} // namespace
-
-@implementation MediaIndicatorButton
-
-class FadeAnimationDelegate : public gfx::AnimationDelegate {
- public:
- explicit FadeAnimationDelegate(MediaIndicatorButton* button)
- : button_(button) {}
- ~FadeAnimationDelegate() override {}
-
- private:
- // gfx::AnimationDelegate implementation.
- void AnimationProgressed(const gfx::Animation* animation) override {
- [button_ setNeedsDisplay:YES];
- }
-
- void AnimationCanceled(const gfx::Animation* animation) override {
- AnimationEnded(animation);
- }
-
- void AnimationEnded(const gfx::Animation* animation) override {
- button_->showingMediaState_ = button_->mediaState_;
- [button_ setNeedsDisplay:YES];
- [button_->animationDoneTarget_
- performSelector:button_->animationDoneAction_];
- }
-
- MediaIndicatorButton* const button_;
-
- DISALLOW_COPY_AND_ASSIGN(FadeAnimationDelegate);
-};
-
-@synthesize showingMediaState = showingMediaState_;
-
-- (id)init {
- if ((self = [super initWithFrame:NSZeroRect])) {
- mediaState_ = TAB_MEDIA_STATE_NONE;
- showingMediaState_ = TAB_MEDIA_STATE_NONE;
- [self setEnabled:NO];
- [super setTarget:self];
- [super setAction:@selector(handleClick:)];
- }
- return self;
-}
-
-- (void)removeFromSuperview {
- fadeAnimation_.reset();
- [super removeFromSuperview];
-}
-
-- (void)transitionToMediaState:(TabMediaState)nextState {
- if (nextState == mediaState_)
- return;
-
- if (nextState != TAB_MEDIA_STATE_NONE) {
- [self
- setImage:chrome::GetTabMediaIndicatorImage(nextState, 0).ToNSImage()];
- affordanceImage_.reset(
- [chrome::GetTabMediaIndicatorAffordanceImage(nextState, 0)
- .ToNSImage() retain]);
- }
-
- if ((mediaState_ == TAB_MEDIA_STATE_AUDIO_PLAYING &&
- nextState == TAB_MEDIA_STATE_AUDIO_MUTING) ||
- (mediaState_ == TAB_MEDIA_STATE_AUDIO_MUTING &&
- nextState == TAB_MEDIA_STATE_AUDIO_PLAYING) ||
- (mediaState_ == TAB_MEDIA_STATE_AUDIO_MUTING &&
- nextState == TAB_MEDIA_STATE_NONE)) {
- // Instant user feedback: No fade animation.
- showingMediaState_ = nextState;
- fadeAnimation_.reset();
- } else {
- if (nextState == TAB_MEDIA_STATE_NONE)
- showingMediaState_ = mediaState_; // Fading-out indicator.
- else
- showingMediaState_ = nextState; // Fading-in to next indicator.
- // gfx::Animation requires a task runner is available for the current
- // thread. Generally, only certain unit tests would not instantiate a task
- // runner.
- if (base::ThreadTaskRunnerHandle::IsSet()) {
- fadeAnimation_ = chrome::CreateTabMediaIndicatorFadeAnimation(nextState);
- if (!fadeAnimationDelegate_)
- fadeAnimationDelegate_.reset(new FadeAnimationDelegate(self));
- fadeAnimation_->set_delegate(fadeAnimationDelegate_.get());
- fadeAnimation_->Start();
- }
- }
-
- mediaState_ = nextState;
-
- [self updateEnabledForMuteToggle];
-
- // An indicator state change should be made visible immediately, instead of
- // the user being surprised when their mouse leaves the button.
- if ([self hoverState] == kHoverStateMouseOver)
- [self setHoverState:kHoverStateNone];
-
- [self setNeedsDisplay:YES];
-}
-
-- (void)setTarget:(id)aTarget {
- NOTREACHED(); // See class-level comments.
-}
-
-- (void)setAction:(SEL)anAction {
- NOTREACHED(); // See class-level comments.
-}
-
-- (void)setAnimationDoneTarget:(id)target withAction:(SEL)action {
- animationDoneTarget_ = target;
- animationDoneAction_ = action;
-}
-
-- (void)setClickTarget:(id)target withAction:(SEL)action {
- clickTarget_ = target;
- clickAction_ = action;
-}
-
-- (void)mouseDown:(NSEvent*)theEvent {
- // Do not handle this left-button mouse event if any modifier keys are being
- // held down. Instead, the Tab should react (e.g., selection or drag start).
- if ([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask) {
- [self setHoverState:kHoverStateNone]; // Turn off hover.
- [[self nextResponder] mouseDown:theEvent];
- return;
- }
- [super mouseDown:theEvent];
-}
-
-- (void)mouseEntered:(NSEvent*)theEvent {
- // If any modifier keys are being held down, do not turn on hover.
- if ([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask) {
- [self setHoverState:kHoverStateNone];
- return;
- }
- [super mouseEntered:theEvent];
-}
-
-- (void)mouseMoved:(NSEvent*)theEvent {
- // If any modifier keys are being held down, turn off hover.
- if ([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask) {
- [self setHoverState:kHoverStateNone];
- return;
- }
- [super mouseMoved:theEvent];
-}
-
-- (void)rightMouseDown:(NSEvent*)theEvent {
- // All right-button mouse events should be handled by the Tab.
- [self setHoverState:kHoverStateNone]; // Turn off hover.
- [[self nextResponder] rightMouseDown:theEvent];
-}
-
-- (void)drawRect:(NSRect)dirtyRect {
- NSImage* image = ([self hoverState] == kHoverStateNone || ![self isEnabled]) ?
- [self image] : affordanceImage_.get();
- if (!image)
- return;
- NSRect imageRect = NSZeroRect;
- imageRect.size = [image size];
- NSRect destRect = [self bounds];
- destRect.origin.y =
- floor((NSHeight(destRect) / 2) - (NSHeight(imageRect) / 2));
- destRect.size = imageRect.size;
- double opaqueness =
- fadeAnimation_ ? fadeAnimation_->GetCurrentValue() : 1.0;
- if (mediaState_ == TAB_MEDIA_STATE_NONE)
- opaqueness = 1.0 - opaqueness; // Fading out, not in.
- [image drawInRect:destRect
- fromRect:imageRect
- operation:NSCompositeSourceOver
- fraction:opaqueness
- respectFlipped:YES
- hints:nil];
-}
-
-// When disabled, the superview should receive all mouse events.
-- (NSView*)hitTest:(NSPoint)aPoint {
- if ([self isEnabled] && ![self isHidden])
- return [super hitTest:aPoint];
- else
- return nil;
-}
-
-- (void)handleClick:(id)sender {
- using base::UserMetricsAction;
-
- if (mediaState_ == TAB_MEDIA_STATE_AUDIO_PLAYING)
- content::RecordAction(UserMetricsAction("MediaIndicatorButton_Mute"));
- else if (mediaState_ == TAB_MEDIA_STATE_AUDIO_MUTING)
- content::RecordAction(UserMetricsAction("MediaIndicatorButton_Unmute"));
- else
- NOTREACHED();
-
- [clickTarget_ performSelector:clickAction_ withObject:self];
-}
-
-- (void)updateEnabledForMuteToggle {
- BOOL enable = chrome::AreExperimentalMuteControlsEnabled() &&
- (mediaState_ == TAB_MEDIA_STATE_AUDIO_PLAYING ||
- mediaState_ == TAB_MEDIA_STATE_AUDIO_MUTING);
-
- // If the tab is not the currently-active tab, make sure it is wide enough
- // before enabling click-to-mute. This ensures that there is enough click
- // area for the user to activate a tab rather than unintentionally muting it.
- TabView* const tabView = base::mac::ObjCCast<TabView>([self superview]);
- if (enable && tabView && ([tabView state] != NSOnState)) {
- const int requiredWidth =
- NSWidth([self frame]) * kMinMouseSelectableAreaPercent / 100;
- enable = ([tabView widthOfLargestSelectableRegion] >= requiredWidth);
- }
-
- [self setEnabled:enable];
-}
-
-@end

Powered by Google App Engine
This is Rietveld 408576698