Index: ash/common/frame/caption_buttons/frame_caption_button_container_view.cc |
diff --git a/ash/common/frame/caption_buttons/frame_caption_button_container_view.cc b/ash/common/frame/caption_buttons/frame_caption_button_container_view.cc |
deleted file mode 100644 |
index 3539a04c41bf45a23f8d1d837211fd21477226f5..0000000000000000000000000000000000000000 |
--- a/ash/common/frame/caption_buttons/frame_caption_button_container_view.cc |
+++ /dev/null |
@@ -1,412 +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. |
- |
-#include "ash/common/frame/caption_buttons/frame_caption_button_container_view.h" |
- |
-#include <cmath> |
-#include <map> |
- |
-#include "ash/common/frame/caption_buttons/frame_caption_button.h" |
-#include "ash/common/frame/caption_buttons/frame_size_button.h" |
-#include "ash/common/wm/maximize_mode/maximize_mode_controller.h" |
-#include "ash/common/wm_shell.h" |
-#include "ui/base/hit_test.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/compositor/scoped_animation_duration_scale_mode.h" |
-#include "ui/gfx/animation/slide_animation.h" |
-#include "ui/gfx/animation/tween.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/geometry/insets.h" |
-#include "ui/gfx/geometry/point.h" |
-#include "ui/gfx/vector_icon_types.h" |
-#include "ui/strings/grit/ui_strings.h" // Accessibility names |
-#include "ui/views/widget/widget.h" |
-#include "ui/views/widget/widget_delegate.h" |
- |
-namespace ash { |
- |
-namespace { |
- |
-// Duration of the animation of the position of |minimize_button_|. |
-const int kPositionAnimationDurationMs = 500; |
- |
-// Duration of the animation of the alpha of |size_button_|. |
-const int kAlphaAnimationDurationMs = 250; |
- |
-// Delay during |maximize_mode_animation_| hide to wait before beginning to |
-// animate the position of |minimize_button_|. |
-const int kHidePositionDelayMs = 100; |
- |
-// Duration of |maximize_mode_animation_| hiding. |
-// Hiding size button 250 |
-// |------------------------| |
-// Delay 100 Slide minimize button 500 |
-// |---------|-------------------------------------------------| |
-const int kHideAnimationDurationMs = |
- kHidePositionDelayMs + kPositionAnimationDurationMs; |
- |
-// Delay during |maximize_mode_animation_| show to wait before beginning to |
-// animate the alpha of |size_button_|. |
-const int kShowAnimationAlphaDelayMs = 100; |
- |
-// Duration of |maximize_mode_animation_| showing. |
-// Slide minimize button 500 |
-// |-------------------------------------------------| |
-// Delay 100 Show size button 250 |
-// |---------|-----------------------| |
-const int kShowAnimationDurationMs = kPositionAnimationDurationMs; |
- |
-// Value of |maximize_mode_animation_| showing to begin animating alpha of |
-// |size_button_|. |
-float SizeButtonShowStartValue() { |
- return static_cast<float>(kShowAnimationAlphaDelayMs) / |
- kShowAnimationDurationMs; |
-} |
- |
-// Amount of |maximize_mode_animation_| showing to animate the alpha of |
-// |size_button_|. |
-float SizeButtonShowDuration() { |
- return static_cast<float>(kAlphaAnimationDurationMs) / |
- kShowAnimationDurationMs; |
-} |
- |
-// Amount of |maximize_mode_animation_| hiding to animate the alpha of |
-// |size_button_|. |
-float SizeButtonHideDuration() { |
- return static_cast<float>(kAlphaAnimationDurationMs) / |
- kHideAnimationDurationMs; |
-} |
- |
-// Value of |maximize_mode_animation_| hiding to begin animating the position of |
-// |minimize_button_|. |
-float HidePositionStartValue() { |
- return 1.0f - |
- static_cast<float>(kHidePositionDelayMs) / kHideAnimationDurationMs; |
-} |
- |
-// Converts |point| from |src| to |dst| and hittests against |dst|. |
-bool ConvertPointToViewAndHitTest(const views::View* src, |
- const views::View* dst, |
- const gfx::Point& point) { |
- gfx::Point converted(point); |
- views::View::ConvertPointToTarget(src, dst, &converted); |
- return dst->HitTestPoint(converted); |
-} |
- |
-// Bounds animation values to the range 0.0 - 1.0. Allows for mapping of offset |
-// animations to the expected range so that gfx::Tween::CalculateValue() can be |
-// used. |
-double CapAnimationValue(double value) { |
- return std::min(1.0, std::max(0.0, value)); |
-} |
- |
-} // namespace |
- |
-// static |
-const char FrameCaptionButtonContainerView::kViewClassName[] = |
- "FrameCaptionButtonContainerView"; |
- |
-FrameCaptionButtonContainerView::FrameCaptionButtonContainerView( |
- views::Widget* frame) |
- : frame_(frame), |
- minimize_button_(NULL), |
- size_button_(NULL), |
- close_button_(NULL) { |
- bool size_button_visibility = ShouldSizeButtonBeVisible(); |
- maximize_mode_animation_.reset(new gfx::SlideAnimation(this)); |
- maximize_mode_animation_->SetTweenType(gfx::Tween::LINEAR); |
- |
- // Ensure animation tracks visibility of size button. |
- if (size_button_visibility) |
- maximize_mode_animation_->Reset(1.0f); |
- |
- // Insert the buttons left to right. |
- minimize_button_ = new FrameCaptionButton(this, CAPTION_BUTTON_ICON_MINIMIZE); |
- minimize_button_->SetAccessibleName( |
- l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MINIMIZE)); |
- minimize_button_->SetVisible(frame_->widget_delegate()->CanMinimize()); |
- AddChildView(minimize_button_); |
- |
- size_button_ = new FrameSizeButton(this, frame, this); |
- size_button_->SetAccessibleName( |
- l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MAXIMIZE)); |
- size_button_->SetVisible(size_button_visibility); |
- AddChildView(size_button_); |
- |
- close_button_ = new FrameCaptionButton(this, CAPTION_BUTTON_ICON_CLOSE); |
- close_button_->SetAccessibleName( |
- l10n_util::GetStringUTF16(IDS_APP_ACCNAME_CLOSE)); |
- AddChildView(close_button_); |
-} |
- |
-FrameCaptionButtonContainerView::~FrameCaptionButtonContainerView() {} |
- |
-void FrameCaptionButtonContainerView::TestApi::EndAnimations() { |
- container_view_->maximize_mode_animation_->End(); |
-} |
- |
-void FrameCaptionButtonContainerView::SetButtonImage( |
- CaptionButtonIcon icon, |
- const gfx::VectorIcon& icon_definition) { |
- button_icon_map_[icon] = &icon_definition; |
- |
- FrameCaptionButton* buttons[] = {minimize_button_, size_button_, |
- close_button_}; |
- for (size_t i = 0; i < arraysize(buttons); ++i) { |
- if (buttons[i]->icon() == icon) |
- buttons[i]->SetImage(icon, FrameCaptionButton::ANIMATE_NO, |
- icon_definition); |
- } |
-} |
- |
-void FrameCaptionButtonContainerView::SetPaintAsActive(bool paint_as_active) { |
- minimize_button_->set_paint_as_active(paint_as_active); |
- size_button_->set_paint_as_active(paint_as_active); |
- close_button_->set_paint_as_active(paint_as_active); |
-} |
- |
-void FrameCaptionButtonContainerView::SetUseLightImages(bool light) { |
- minimize_button_->set_use_light_images(light); |
- size_button_->set_use_light_images(light); |
- close_button_->set_use_light_images(light); |
-} |
- |
-void FrameCaptionButtonContainerView::ResetWindowControls() { |
- SetButtonsToNormal(ANIMATE_NO); |
-} |
- |
-int FrameCaptionButtonContainerView::NonClientHitTest( |
- const gfx::Point& point) const { |
- if (close_button_->visible() && |
- ConvertPointToViewAndHitTest(this, close_button_, point)) { |
- return HTCLOSE; |
- } else if (size_button_->visible() && |
- ConvertPointToViewAndHitTest(this, size_button_, point)) { |
- return HTMAXBUTTON; |
- } else if (minimize_button_->visible() && |
- ConvertPointToViewAndHitTest(this, minimize_button_, point)) { |
- return HTMINBUTTON; |
- } |
- return HTNOWHERE; |
-} |
- |
-void FrameCaptionButtonContainerView::UpdateSizeButtonVisibility() { |
- bool visible = ShouldSizeButtonBeVisible(); |
- if (visible) { |
- size_button_->SetVisible(true); |
- maximize_mode_animation_->SetSlideDuration(kShowAnimationDurationMs); |
- maximize_mode_animation_->Show(); |
- } else { |
- maximize_mode_animation_->SetSlideDuration(kHideAnimationDurationMs); |
- maximize_mode_animation_->Hide(); |
- } |
-} |
- |
-void FrameCaptionButtonContainerView::SetButtonSize(const gfx::Size& size) { |
- minimize_button_->set_size(size); |
- size_button_->set_size(size); |
- close_button_->set_size(size); |
-} |
- |
-gfx::Size FrameCaptionButtonContainerView::GetPreferredSize() const { |
- int width = 0; |
- for (int i = 0; i < child_count(); ++i) { |
- const views::View* child = child_at(i); |
- if (child->visible()) |
- width += child_at(i)->GetPreferredSize().width(); |
- } |
- return gfx::Size(width, close_button_->GetPreferredSize().height()); |
-} |
- |
-void FrameCaptionButtonContainerView::Layout() { |
- int x = 0; |
- for (int i = 0; i < child_count(); ++i) { |
- views::View* child = child_at(i); |
- if (!child->visible()) |
- continue; |
- |
- gfx::Size size = child->GetPreferredSize(); |
- child->SetBounds(x, 0, size.width(), size.height()); |
- x += size.width(); |
- } |
- if (maximize_mode_animation_->is_animating()) { |
- AnimationProgressed(maximize_mode_animation_.get()); |
- } |
-} |
- |
-const char* FrameCaptionButtonContainerView::GetClassName() const { |
- return kViewClassName; |
-} |
- |
-void FrameCaptionButtonContainerView::AnimationEnded( |
- const gfx::Animation* animation) { |
- // Ensure that position is calculated at least once. |
- AnimationProgressed(animation); |
- |
- double current_value = maximize_mode_animation_->GetCurrentValue(); |
- if (current_value == 0.0) { |
- size_button_->SetVisible(false); |
- PreferredSizeChanged(); |
- } |
-} |
- |
-void FrameCaptionButtonContainerView::AnimationProgressed( |
- const gfx::Animation* animation) { |
- double current_value = animation->GetCurrentValue(); |
- int size_alpha = 0; |
- int minimize_x = 0; |
- if (maximize_mode_animation_->IsShowing()) { |
- double scaled_value = |
- CapAnimationValue((current_value - SizeButtonShowStartValue()) / |
- SizeButtonShowDuration()); |
- double tweened_value_alpha = |
- gfx::Tween::CalculateValue(gfx::Tween::EASE_OUT, scaled_value); |
- size_alpha = gfx::Tween::LinearIntValueBetween(tweened_value_alpha, 0, 255); |
- |
- double tweened_value_slide = |
- gfx::Tween::CalculateValue(gfx::Tween::EASE_OUT, current_value); |
- minimize_x = gfx::Tween::LinearIntValueBetween(tweened_value_slide, |
- size_button_->x(), 0); |
- } else { |
- double scaled_value_alpha = |
- CapAnimationValue((1.0f - current_value) / SizeButtonHideDuration()); |
- double tweened_value_alpha = |
- gfx::Tween::CalculateValue(gfx::Tween::EASE_IN, scaled_value_alpha); |
- size_alpha = gfx::Tween::LinearIntValueBetween(tweened_value_alpha, 255, 0); |
- |
- double scaled_value_position = CapAnimationValue( |
- (HidePositionStartValue() - current_value) / HidePositionStartValue()); |
- double tweened_value_position = |
- gfx::Tween::CalculateValue(gfx::Tween::EASE_OUT, scaled_value_position); |
- minimize_x = gfx::Tween::LinearIntValueBetween(tweened_value_position, 0, |
- size_button_->x()); |
- } |
- size_button_->SetAlpha(size_alpha); |
- minimize_button_->SetX(minimize_x); |
-} |
- |
-void FrameCaptionButtonContainerView::SetButtonIcon(FrameCaptionButton* button, |
- CaptionButtonIcon icon, |
- Animate animate) { |
- // The early return is dependant on |animate| because callers use |
- // SetButtonIcon() with ANIMATE_NO to progress |button|'s crossfade animation |
- // to the end. |
- if (button->icon() == icon && |
- (animate == ANIMATE_YES || !button->IsAnimatingImageSwap())) { |
- return; |
- } |
- |
- FrameCaptionButton::Animate fcb_animate = |
- (animate == ANIMATE_YES) ? FrameCaptionButton::ANIMATE_YES |
- : FrameCaptionButton::ANIMATE_NO; |
- auto it = button_icon_map_.find(icon); |
- if (it != button_icon_map_.end()) |
- button->SetImage(icon, fcb_animate, *it->second); |
-} |
- |
-bool FrameCaptionButtonContainerView::ShouldSizeButtonBeVisible() const { |
- return !WmShell::Get() |
- ->maximize_mode_controller() |
- ->IsMaximizeModeWindowManagerEnabled() && |
- frame_->widget_delegate()->CanMaximize(); |
-} |
- |
-void FrameCaptionButtonContainerView::ButtonPressed(views::Button* sender, |
- const ui::Event& event) { |
- // Abort any animations of the button icons. |
- SetButtonsToNormal(ANIMATE_NO); |
- |
- UserMetricsAction action = UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MINIMIZE; |
- if (sender == minimize_button_) { |
- frame_->Minimize(); |
- } else if (sender == size_button_) { |
- if (frame_->IsFullscreen()) { // Can be clicked in immersive fullscreen. |
- frame_->Restore(); |
- action = UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_EXIT_FULLSCREEN; |
- } else if (frame_->IsMaximized()) { |
- frame_->Restore(); |
- action = UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_RESTORE; |
- } else { |
- frame_->Maximize(); |
- action = UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MAXIMIZE; |
- } |
- |
- if (event.IsGestureEvent()) |
- WmShell::Get()->RecordGestureAction(GESTURE_FRAMEMAXIMIZE_TAP); |
- } else if (sender == close_button_) { |
- frame_->Close(); |
- action = UMA_WINDOW_CLOSE_BUTTON_CLICK; |
- } else { |
- return; |
- } |
- WmShell::Get()->RecordUserMetricsAction(action); |
-} |
- |
-bool FrameCaptionButtonContainerView::IsMinimizeButtonVisible() const { |
- return minimize_button_->visible(); |
-} |
- |
-void FrameCaptionButtonContainerView::SetButtonsToNormal(Animate animate) { |
- SetButtonIcons(CAPTION_BUTTON_ICON_MINIMIZE, CAPTION_BUTTON_ICON_CLOSE, |
- animate); |
- minimize_button_->SetState(views::Button::STATE_NORMAL); |
- size_button_->SetState(views::Button::STATE_NORMAL); |
- close_button_->SetState(views::Button::STATE_NORMAL); |
-} |
- |
-void FrameCaptionButtonContainerView::SetButtonIcons( |
- CaptionButtonIcon minimize_button_icon, |
- CaptionButtonIcon close_button_icon, |
- Animate animate) { |
- SetButtonIcon(minimize_button_, minimize_button_icon, animate); |
- SetButtonIcon(close_button_, close_button_icon, animate); |
-} |
- |
-const FrameCaptionButton* FrameCaptionButtonContainerView::GetButtonClosestTo( |
- const gfx::Point& position_in_screen) const { |
- // Since the buttons all have the same size, the closest button is the button |
- // with the center point closest to |position_in_screen|. |
- // TODO(pkotwicz): Make the caption buttons not overlap. |
- gfx::Point position(position_in_screen); |
- views::View::ConvertPointFromScreen(this, &position); |
- |
- FrameCaptionButton* buttons[] = {minimize_button_, size_button_, |
- close_button_}; |
- int min_squared_distance = INT_MAX; |
- FrameCaptionButton* closest_button = NULL; |
- for (size_t i = 0; i < arraysize(buttons); ++i) { |
- FrameCaptionButton* button = buttons[i]; |
- if (!button->visible()) |
- continue; |
- |
- gfx::Point center_point = button->GetLocalBounds().CenterPoint(); |
- views::View::ConvertPointToTarget(button, this, ¢er_point); |
- int squared_distance = static_cast<int>( |
- pow(static_cast<double>(position.x() - center_point.x()), 2) + |
- pow(static_cast<double>(position.y() - center_point.y()), 2)); |
- if (squared_distance < min_squared_distance) { |
- min_squared_distance = squared_distance; |
- closest_button = button; |
- } |
- } |
- return closest_button; |
-} |
- |
-void FrameCaptionButtonContainerView::SetHoveredAndPressedButtons( |
- const FrameCaptionButton* to_hover, |
- const FrameCaptionButton* to_press) { |
- FrameCaptionButton* buttons[] = {minimize_button_, size_button_, |
- close_button_}; |
- for (size_t i = 0; i < arraysize(buttons); ++i) { |
- FrameCaptionButton* button = buttons[i]; |
- views::Button::ButtonState new_state = views::Button::STATE_NORMAL; |
- if (button == to_hover) |
- new_state = views::Button::STATE_HOVERED; |
- else if (button == to_press) |
- new_state = views::Button::STATE_PRESSED; |
- button->SetState(new_state); |
- } |
-} |
- |
-} // namespace ash |