| Index: ash/common/frame/caption_buttons/frame_size_button.cc
|
| diff --git a/ash/common/frame/caption_buttons/frame_size_button.cc b/ash/common/frame/caption_buttons/frame_size_button.cc
|
| deleted file mode 100644
|
| index cc2fe20e4d08d9c34414220170841325a308efa9..0000000000000000000000000000000000000000
|
| --- a/ash/common/frame/caption_buttons/frame_size_button.cc
|
| +++ /dev/null
|
| @@ -1,270 +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 "ash/common/frame/caption_buttons/frame_size_button.h"
|
| -
|
| -#include "ash/common/wm/window_positioning_utils.h"
|
| -#include "ash/common/wm/window_state.h"
|
| -#include "ash/common/wm/wm_event.h"
|
| -#include "ash/common/wm/workspace/phantom_window_controller.h"
|
| -#include "ash/common/wm_shell.h"
|
| -#include "ash/common/wm_window.h"
|
| -#include "base/i18n/rtl.h"
|
| -#include "ui/gfx/geometry/vector2d.h"
|
| -#include "ui/views/widget/widget.h"
|
| -
|
| -namespace ash {
|
| -
|
| -namespace {
|
| -
|
| -// The default delay between the user pressing the size button and the buttons
|
| -// adjacent to the size button morphing into buttons for snapping left and
|
| -// right.
|
| -const int kSetButtonsToSnapModeDelayMs = 150;
|
| -
|
| -// The amount that a user can overshoot one of the caption buttons while in
|
| -// "snap mode" and keep the button hovered/pressed.
|
| -const int kMaxOvershootX = 200;
|
| -const int kMaxOvershootY = 50;
|
| -
|
| -// Returns true if a mouse drag while in "snap mode" at |location_in_screen|
|
| -// would hover/press |button| or keep it hovered/pressed.
|
| -bool HitTestButton(const FrameCaptionButton* button,
|
| - const gfx::Point& location_in_screen) {
|
| - gfx::Rect expanded_bounds_in_screen = button->GetBoundsInScreen();
|
| - if (button->state() == views::Button::STATE_HOVERED ||
|
| - button->state() == views::Button::STATE_PRESSED) {
|
| - expanded_bounds_in_screen.Inset(-kMaxOvershootX, -kMaxOvershootY);
|
| - }
|
| - return expanded_bounds_in_screen.Contains(location_in_screen);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -FrameSizeButton::FrameSizeButton(views::ButtonListener* listener,
|
| - views::Widget* frame,
|
| - FrameSizeButtonDelegate* delegate)
|
| - : FrameCaptionButton(listener, CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE),
|
| - frame_(frame),
|
| - delegate_(delegate),
|
| - set_buttons_to_snap_mode_delay_ms_(kSetButtonsToSnapModeDelayMs),
|
| - in_snap_mode_(false),
|
| - snap_type_(SNAP_NONE) {}
|
| -
|
| -FrameSizeButton::~FrameSizeButton() {}
|
| -
|
| -bool FrameSizeButton::OnMousePressed(const ui::MouseEvent& event) {
|
| - // The minimize and close buttons are set to snap left and right when snapping
|
| - // is enabled. Do not enable snapping if the minimize button is not visible.
|
| - // The close button is always visible.
|
| - if (IsTriggerableEvent(event) && !in_snap_mode_ &&
|
| - delegate_->IsMinimizeButtonVisible()) {
|
| - StartSetButtonsToSnapModeTimer(event);
|
| - }
|
| - FrameCaptionButton::OnMousePressed(event);
|
| - return true;
|
| -}
|
| -
|
| -bool FrameSizeButton::OnMouseDragged(const ui::MouseEvent& event) {
|
| - UpdateSnapType(event);
|
| - // By default a FrameCaptionButton reverts to STATE_NORMAL once the mouse
|
| - // leaves its bounds. Skip FrameCaptionButton's handling when
|
| - // |in_snap_mode_| == true because we want different behavior.
|
| - if (!in_snap_mode_)
|
| - FrameCaptionButton::OnMouseDragged(event);
|
| - return true;
|
| -}
|
| -
|
| -void FrameSizeButton::OnMouseReleased(const ui::MouseEvent& event) {
|
| - if (!IsTriggerableEvent(event) || !CommitSnap(event))
|
| - FrameCaptionButton::OnMouseReleased(event);
|
| -}
|
| -
|
| -void FrameSizeButton::OnMouseCaptureLost() {
|
| - SetButtonsToNormalMode(FrameSizeButtonDelegate::ANIMATE_YES);
|
| - FrameCaptionButton::OnMouseCaptureLost();
|
| -}
|
| -
|
| -void FrameSizeButton::OnMouseMoved(const ui::MouseEvent& event) {
|
| - // Ignore any synthetic mouse moves during a drag.
|
| - if (!in_snap_mode_)
|
| - FrameCaptionButton::OnMouseMoved(event);
|
| -}
|
| -
|
| -void FrameSizeButton::OnGestureEvent(ui::GestureEvent* event) {
|
| - if (event->details().touch_points() > 1) {
|
| - SetButtonsToNormalMode(FrameSizeButtonDelegate::ANIMATE_YES);
|
| - return;
|
| - }
|
| -
|
| - if (event->type() == ui::ET_GESTURE_TAP_DOWN) {
|
| - StartSetButtonsToSnapModeTimer(*event);
|
| - // Go through FrameCaptionButton's handling so that the button gets pressed.
|
| - FrameCaptionButton::OnGestureEvent(event);
|
| - return;
|
| - }
|
| -
|
| - if (event->type() == ui::ET_GESTURE_SCROLL_BEGIN ||
|
| - event->type() == ui::ET_GESTURE_SCROLL_UPDATE) {
|
| - UpdateSnapType(*event);
|
| - event->SetHandled();
|
| - return;
|
| - }
|
| -
|
| - if (event->type() == ui::ET_GESTURE_TAP ||
|
| - event->type() == ui::ET_GESTURE_SCROLL_END ||
|
| - event->type() == ui::ET_SCROLL_FLING_START ||
|
| - event->type() == ui::ET_GESTURE_END) {
|
| - if (CommitSnap(*event)) {
|
| - event->SetHandled();
|
| - return;
|
| - }
|
| - }
|
| -
|
| - FrameCaptionButton::OnGestureEvent(event);
|
| -}
|
| -
|
| -void FrameSizeButton::StartSetButtonsToSnapModeTimer(
|
| - const ui::LocatedEvent& event) {
|
| - set_buttons_to_snap_mode_timer_event_location_ = event.location();
|
| - if (set_buttons_to_snap_mode_delay_ms_ == 0) {
|
| - AnimateButtonsToSnapMode();
|
| - } else {
|
| - set_buttons_to_snap_mode_timer_.Start(
|
| - FROM_HERE,
|
| - base::TimeDelta::FromMilliseconds(set_buttons_to_snap_mode_delay_ms_),
|
| - this, &FrameSizeButton::AnimateButtonsToSnapMode);
|
| - }
|
| -}
|
| -
|
| -void FrameSizeButton::AnimateButtonsToSnapMode() {
|
| - SetButtonsToSnapMode(FrameSizeButtonDelegate::ANIMATE_YES);
|
| -}
|
| -
|
| -void FrameSizeButton::SetButtonsToSnapMode(
|
| - FrameSizeButtonDelegate::Animate animate) {
|
| - in_snap_mode_ = true;
|
| -
|
| - // When using a right-to-left layout the close button is left of the size
|
| - // button and the minimize button is right of the size button.
|
| - if (base::i18n::IsRTL()) {
|
| - delegate_->SetButtonIcons(CAPTION_BUTTON_ICON_RIGHT_SNAPPED,
|
| - CAPTION_BUTTON_ICON_LEFT_SNAPPED, animate);
|
| - } else {
|
| - delegate_->SetButtonIcons(CAPTION_BUTTON_ICON_LEFT_SNAPPED,
|
| - CAPTION_BUTTON_ICON_RIGHT_SNAPPED, animate);
|
| - }
|
| -}
|
| -
|
| -void FrameSizeButton::UpdateSnapType(const ui::LocatedEvent& event) {
|
| - if (!in_snap_mode_) {
|
| - // Set the buttons adjacent to the size button to snap left and right early
|
| - // if the user drags past the drag threshold.
|
| - // |set_buttons_to_snap_mode_timer_| is checked to avoid entering the snap
|
| - // mode as a result of an unsupported drag type (e.g. only the right mouse
|
| - // button is pressed).
|
| - gfx::Vector2d delta(event.location() -
|
| - set_buttons_to_snap_mode_timer_event_location_);
|
| - if (!set_buttons_to_snap_mode_timer_.IsRunning() ||
|
| - !views::View::ExceededDragThreshold(delta)) {
|
| - return;
|
| - }
|
| - AnimateButtonsToSnapMode();
|
| - }
|
| -
|
| - gfx::Point event_location_in_screen(event.location());
|
| - views::View::ConvertPointToScreen(this, &event_location_in_screen);
|
| - const FrameCaptionButton* to_hover =
|
| - GetButtonToHover(event_location_in_screen);
|
| - bool press_size_button =
|
| - to_hover || HitTestButton(this, event_location_in_screen);
|
| -
|
| - if (to_hover) {
|
| - // Progress the minimize and close icon morph animations to the end if they
|
| - // are in progress.
|
| - SetButtonsToSnapMode(FrameSizeButtonDelegate::ANIMATE_NO);
|
| - }
|
| -
|
| - delegate_->SetHoveredAndPressedButtons(to_hover,
|
| - press_size_button ? this : NULL);
|
| -
|
| - snap_type_ = SNAP_NONE;
|
| - if (to_hover) {
|
| - switch (to_hover->icon()) {
|
| - case CAPTION_BUTTON_ICON_LEFT_SNAPPED:
|
| - snap_type_ = SNAP_LEFT;
|
| - break;
|
| - case CAPTION_BUTTON_ICON_RIGHT_SNAPPED:
|
| - snap_type_ = SNAP_RIGHT;
|
| - break;
|
| - case CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE:
|
| - case CAPTION_BUTTON_ICON_MINIMIZE:
|
| - case CAPTION_BUTTON_ICON_CLOSE:
|
| - case CAPTION_BUTTON_ICON_BACK:
|
| - case CAPTION_BUTTON_ICON_LOCATION:
|
| - case CAPTION_BUTTON_ICON_COUNT:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| - }
|
| -
|
| - if (snap_type_ == SNAP_LEFT || snap_type_ == SNAP_RIGHT) {
|
| - WmWindow* window = WmWindow::Get(frame_->GetNativeWindow());
|
| - if (!phantom_window_controller_.get())
|
| - phantom_window_controller_.reset(new PhantomWindowController(window));
|
| - gfx::Rect phantom_bounds_in_parent =
|
| - (snap_type_ == SNAP_LEFT)
|
| - ? wm::GetDefaultLeftSnappedWindowBoundsInParent(window)
|
| - : wm::GetDefaultRightSnappedWindowBoundsInParent(window);
|
| - phantom_window_controller_->Show(
|
| - window->GetParent()->ConvertRectToScreen(phantom_bounds_in_parent));
|
| - } else {
|
| - phantom_window_controller_.reset();
|
| - }
|
| -}
|
| -
|
| -const FrameCaptionButton* FrameSizeButton::GetButtonToHover(
|
| - const gfx::Point& event_location_in_screen) const {
|
| - const FrameCaptionButton* closest_button =
|
| - delegate_->GetButtonClosestTo(event_location_in_screen);
|
| - if ((closest_button->icon() == CAPTION_BUTTON_ICON_LEFT_SNAPPED ||
|
| - closest_button->icon() == CAPTION_BUTTON_ICON_RIGHT_SNAPPED) &&
|
| - HitTestButton(closest_button, event_location_in_screen)) {
|
| - return closest_button;
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -bool FrameSizeButton::CommitSnap(const ui::LocatedEvent& event) {
|
| - // The position of |event| may be different than the position of the previous
|
| - // event.
|
| - UpdateSnapType(event);
|
| -
|
| - if (in_snap_mode_ && (snap_type_ == SNAP_LEFT || snap_type_ == SNAP_RIGHT)) {
|
| - WmWindow* window = WmWindow::Get(frame_->GetNativeWindow());
|
| - wm::WindowState* window_state = window->GetWindowState();
|
| - const wm::WMEvent snap_event(snap_type_ == SNAP_LEFT
|
| - ? wm::WM_EVENT_SNAP_LEFT
|
| - : wm::WM_EVENT_SNAP_RIGHT);
|
| - window_state->OnWMEvent(&snap_event);
|
| - WmShell::Get()->RecordUserMetricsAction(
|
| - snap_type_ == SNAP_LEFT ? UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_LEFT
|
| - : UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_RIGHT);
|
| - SetButtonsToNormalMode(FrameSizeButtonDelegate::ANIMATE_NO);
|
| - return true;
|
| - }
|
| - SetButtonsToNormalMode(FrameSizeButtonDelegate::ANIMATE_YES);
|
| - return false;
|
| -}
|
| -
|
| -void FrameSizeButton::SetButtonsToNormalMode(
|
| - FrameSizeButtonDelegate::Animate animate) {
|
| - in_snap_mode_ = false;
|
| - snap_type_ = SNAP_NONE;
|
| - set_buttons_to_snap_mode_timer_.Stop();
|
| - delegate_->SetButtonsToNormal(animate);
|
| - phantom_window_controller_.reset();
|
| -}
|
| -
|
| -} // namespace ash
|
|
|