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

Unified Diff: chrome/browser/ui/views/tabs/media_indicator_button.cc

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/views/tabs/media_indicator_button.cc
diff --git a/chrome/browser/ui/views/tabs/media_indicator_button.cc b/chrome/browser/ui/views/tabs/media_indicator_button.cc
deleted file mode 100644
index 9421d42f1c764fdbee5921cbe2d7eba43aec52f7..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/views/tabs/media_indicator_button.cc
+++ /dev/null
@@ -1,269 +0,0 @@
-// Copyright 2014 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.
-
-#include "chrome/browser/ui/views/tabs/media_indicator_button.h"
-
-#include "base/macros.h"
-#include "chrome/browser/ui/views/tabs/tab.h"
-#include "chrome/browser/ui/views/tabs/tab_controller.h"
-#include "chrome/browser/ui/views/tabs/tab_renderer_data.h"
-#include "content/public/browser/user_metrics.h"
-#include "ui/gfx/animation/animation_delegate.h"
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/image/image.h"
-
-using base::UserMetricsAction;
-
-namespace {
-
-// The minimum required click-to-select area of an inactive Tab before allowing
-// the click-to-mute functionality to be enabled. These values are in terms of
-// some percentage of the MediaIndicatorButton's width. See comments in
-// UpdateEnabledForMuteToggle().
-const int kMinMouseSelectableAreaPercent = 250;
-const int kMinGestureSelectableAreaPercent = 400;
-
-// Returns true if either Shift or Control are being held down. In this case,
-// mouse events are delegated to the Tab, to perform tab selection in the tab
-// strip instead.
-bool IsShiftOrControlDown(const ui::Event& event) {
- return (event.flags() & (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN)) != 0;
-}
-
-} // namespace
-
-const char MediaIndicatorButton::kViewClassName[] = "MediaIndicatorButton";
-
-class MediaIndicatorButton::FadeAnimationDelegate
- : public gfx::AnimationDelegate {
- public:
- explicit FadeAnimationDelegate(MediaIndicatorButton* button)
- : button_(button) {}
- ~FadeAnimationDelegate() override {}
-
- private:
- // gfx::AnimationDelegate
- void AnimationProgressed(const gfx::Animation* animation) override {
- button_->SchedulePaint();
- }
-
- void AnimationCanceled(const gfx::Animation* animation) override {
- AnimationEnded(animation);
- }
-
- void AnimationEnded(const gfx::Animation* animation) override {
- button_->showing_media_state_ = button_->media_state_;
- button_->parent_tab_->MediaStateChanged();
- }
-
- MediaIndicatorButton* const button_;
-
- DISALLOW_COPY_AND_ASSIGN(FadeAnimationDelegate);
-};
-
-MediaIndicatorButton::MediaIndicatorButton(Tab* parent_tab)
- : views::ImageButton(NULL),
- parent_tab_(parent_tab),
- media_state_(TAB_MEDIA_STATE_NONE),
- showing_media_state_(TAB_MEDIA_STATE_NONE) {
- DCHECK(parent_tab_);
- SetEventTargeter(
- scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this)));
-}
-
-MediaIndicatorButton::~MediaIndicatorButton() {}
-
-void MediaIndicatorButton::TransitionToMediaState(TabMediaState next_state) {
- if (next_state == media_state_)
- return;
-
- TabMediaState previous_media_showing_state = showing_media_state_;
-
- if (next_state != TAB_MEDIA_STATE_NONE)
- ResetImages(next_state);
-
- if ((media_state_ == TAB_MEDIA_STATE_AUDIO_PLAYING &&
- next_state == TAB_MEDIA_STATE_AUDIO_MUTING) ||
- (media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING &&
- next_state == TAB_MEDIA_STATE_AUDIO_PLAYING) ||
- (media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING &&
- next_state == TAB_MEDIA_STATE_NONE)) {
- // Instant user feedback: No fade animation.
- showing_media_state_ = next_state;
- fade_animation_.reset();
- } else {
- if (next_state == TAB_MEDIA_STATE_NONE)
- showing_media_state_ = media_state_; // Fading-out indicator.
- else
- showing_media_state_ = next_state; // Fading-in to next indicator.
- fade_animation_ = chrome::CreateTabMediaIndicatorFadeAnimation(next_state);
- if (!fade_animation_delegate_)
- fade_animation_delegate_.reset(new FadeAnimationDelegate(this));
- fade_animation_->set_delegate(fade_animation_delegate_.get());
- fade_animation_->Start();
- }
-
- media_state_ = next_state;
-
- if (previous_media_showing_state != showing_media_state_)
- parent_tab_->MediaStateChanged();
-
- UpdateEnabledForMuteToggle();
-
- // An indicator state change should be made visible immediately, instead of
- // the user being surprised when their mouse leaves the button.
- if (state() == views::CustomButton::STATE_HOVERED) {
- SetState(enabled() ? views::CustomButton::STATE_NORMAL :
- views::CustomButton::STATE_DISABLED);
- }
-
- // Note: The calls to SetImage(), SetEnabled(), and SetState() above will call
- // SchedulePaint() if necessary.
-}
-
-void MediaIndicatorButton::UpdateEnabledForMuteToggle() {
- bool enable = chrome::AreExperimentalMuteControlsEnabled() &&
- (media_state_ == TAB_MEDIA_STATE_AUDIO_PLAYING ||
- media_state_ == 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.
- // Note that IsTriggerableEvent() is also overridden to provide an even wider
- // requirement for tap gestures.
- if (enable && !GetTab()->IsActive()) {
- const int required_width = width() * kMinMouseSelectableAreaPercent / 100;
- enable = (GetTab()->GetWidthOfLargestSelectableRegion() >= required_width);
- }
-
- SetEnabled(enable);
-}
-
-void MediaIndicatorButton::OnParentTabButtonColorChanged() {
- if (media_state_ == TAB_MEDIA_STATE_AUDIO_PLAYING ||
- media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING)
- ResetImages(media_state_);
-}
-
-const char* MediaIndicatorButton::GetClassName() const {
- return kViewClassName;
-}
-
-views::View* MediaIndicatorButton::GetTooltipHandlerForPoint(
- const gfx::Point& point) {
- return NULL; // Tab (the parent View) provides the tooltip.
-}
-
-bool MediaIndicatorButton::OnMousePressed(const ui::MouseEvent& event) {
- // Do not handle this mouse event when anything but the left mouse button is
- // pressed or when any modifier keys are being held down. Instead, the Tab
- // should react (e.g., middle-click for close, right-click for context menu).
- if (!event.IsOnlyLeftMouseButton() || IsShiftOrControlDown(event)) {
- if (state() != views::CustomButton::STATE_DISABLED)
- SetState(views::CustomButton::STATE_NORMAL); // Turn off hover.
- return false; // Event to be handled by Tab.
- }
- return ImageButton::OnMousePressed(event);
-}
-
-bool MediaIndicatorButton::OnMouseDragged(const ui::MouseEvent& event) {
- const ButtonState previous_state = state();
- const bool ret = ImageButton::OnMouseDragged(event);
- if (previous_state != views::CustomButton::STATE_NORMAL &&
- state() == views::CustomButton::STATE_NORMAL)
- content::RecordAction(UserMetricsAction("MediaIndicatorButton_Dragged"));
- return ret;
-}
-
-void MediaIndicatorButton::OnMouseEntered(const ui::MouseEvent& event) {
- // If any modifier keys are being held down, do not turn on hover.
- if (state() != views::CustomButton::STATE_DISABLED &&
- IsShiftOrControlDown(event)) {
- SetState(views::CustomButton::STATE_NORMAL);
- return;
- }
- ImageButton::OnMouseEntered(event);
-}
-
-void MediaIndicatorButton::OnMouseMoved(const ui::MouseEvent& event) {
- // If any modifier keys are being held down, turn off hover.
- if (state() != views::CustomButton::STATE_DISABLED &&
- IsShiftOrControlDown(event)) {
- SetState(views::CustomButton::STATE_NORMAL);
- return;
- }
- ImageButton::OnMouseMoved(event);
-}
-
-void MediaIndicatorButton::OnBoundsChanged(const gfx::Rect& previous_bounds) {
- UpdateEnabledForMuteToggle();
-}
-
-void MediaIndicatorButton::OnPaint(gfx::Canvas* canvas) {
- double opaqueness =
- fade_animation_ ? fade_animation_->GetCurrentValue() : 1.0;
- if (media_state_ == TAB_MEDIA_STATE_NONE)
- opaqueness = 1.0 - opaqueness; // Fading out, not in.
- if (opaqueness < 1.0)
- canvas->SaveLayerAlpha(opaqueness * SK_AlphaOPAQUE);
- ImageButton::OnPaint(canvas);
- if (opaqueness < 1.0)
- canvas->Restore();
-}
-
-bool MediaIndicatorButton::DoesIntersectRect(const views::View* target,
- const gfx::Rect& rect) const {
- // If this button is not enabled, Tab (the parent View) handles all mouse
- // events.
- return enabled() &&
- views::ViewTargeterDelegate::DoesIntersectRect(target, rect);
-}
-
-void MediaIndicatorButton::NotifyClick(const ui::Event& event) {
- if (media_state_ == TAB_MEDIA_STATE_AUDIO_PLAYING)
- content::RecordAction(UserMetricsAction("MediaIndicatorButton_Mute"));
- else if (media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING)
- content::RecordAction(UserMetricsAction("MediaIndicatorButton_Unmute"));
- else
- NOTREACHED();
-
- GetTab()->controller()->ToggleTabAudioMute(GetTab());
-}
-
-bool MediaIndicatorButton::IsTriggerableEvent(const ui::Event& event) {
- // For mouse events, only trigger on the left mouse button and when no
- // modifier keys are being held down.
- if (event.IsMouseEvent() &&
- (!static_cast<const ui::MouseEvent*>(&event)->IsOnlyLeftMouseButton() ||
- IsShiftOrControlDown(event)))
- return false;
-
- // For gesture events on an inactive tab, require an even wider tab before
- // click-to-mute can be triggered. See comments in
- // UpdateEnabledForMuteToggle().
- if (event.IsGestureEvent() && !GetTab()->IsActive()) {
- const int required_width = width() * kMinGestureSelectableAreaPercent / 100;
- if (GetTab()->GetWidthOfLargestSelectableRegion() < required_width)
- return false;
- }
-
- return views::ImageButton::IsTriggerableEvent(event);
-}
-
-Tab* MediaIndicatorButton::GetTab() const {
- DCHECK_EQ(static_cast<views::View*>(parent_tab_), parent());
- return parent_tab_;
-}
-
-void MediaIndicatorButton::ResetImages(TabMediaState state) {
- SkColor color = parent_tab_->button_color();
- gfx::ImageSkia indicator_image =
- chrome::GetTabMediaIndicatorImage(state, color).AsImageSkia();
- SetImage(views::CustomButton::STATE_NORMAL, &indicator_image);
- SetImage(views::CustomButton::STATE_DISABLED, &indicator_image);
- gfx::ImageSkia affordance_image =
- chrome::GetTabMediaIndicatorAffordanceImage(state, color).AsImageSkia();
- SetImage(views::CustomButton::STATE_HOVERED, &affordance_image);
- SetImage(views::CustomButton::STATE_PRESSED, &affordance_image);
-}
« no previous file with comments | « chrome/browser/ui/views/tabs/media_indicator_button.h ('k') | chrome/browser/ui/views/tabs/media_indicator_button_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698