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

Unified Diff: ash/common/frame/caption_buttons/frame_size_button.cc

Issue 2734653002: chromeos: Move files in //ash/common to //ash (Closed)
Patch Set: fix a11y tests, fix docs Created 3 years, 10 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: 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
« no previous file with comments | « ash/common/frame/caption_buttons/frame_size_button.h ('k') | ash/common/frame/caption_buttons/frame_size_button_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698