| Index: ash/wm/workspace/snap_sizer.cc
|
| diff --git a/ash/wm/workspace/snap_sizer.cc b/ash/wm/workspace/snap_sizer.cc
|
| deleted file mode 100644
|
| index 11b59470fcd87d5be27e934cc992feac57b7c90a..0000000000000000000000000000000000000000
|
| --- a/ash/wm/workspace/snap_sizer.cc
|
| +++ /dev/null
|
| @@ -1,227 +0,0 @@
|
| -// Copyright (c) 2012 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/wm/workspace/snap_sizer.h"
|
| -
|
| -#include <cmath>
|
| -
|
| -#include "ash/screen_ash.h"
|
| -#include "ash/wm/property_util.h"
|
| -#include "ash/wm/window_resizer.h"
|
| -#include "ash/wm/window_util.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/gfx/screen.h"
|
| -
|
| -namespace ash {
|
| -namespace internal {
|
| -
|
| -namespace {
|
| -
|
| -// A list of ideal window width in pixel which will be used to populate the
|
| -// |usable_width_| list.
|
| -const int kIdealWidth[] = { 1280, 1024, 768, 640 };
|
| -
|
| -// Windows are initially snapped to the size in |usable_width_| at index 0.
|
| -// The index into |usable_width_| is changed if any of the following happen:
|
| -// . The user stops moving the mouse for |kDelayBeforeIncreaseMS| and then
|
| -// moves the mouse again.
|
| -// . The mouse moves |kPixelsBeforeAdjust| horizontal pixels.
|
| -// . The mouse is against the edge of the screen and the mouse is moved
|
| -// |kMovesBeforeAdjust| times.
|
| -const int kDelayBeforeIncreaseMS = 500;
|
| -const int kMovesBeforeAdjust = 25;
|
| -const int kPixelsBeforeAdjust = 100;
|
| -
|
| -// When the smallest resolution does not fit on the screen, we take this
|
| -// fraction of the available space.
|
| -const int kMinimumScreenPercent = 90;
|
| -
|
| -// Create the list of possible width for the current screen configuration:
|
| -// Fill the |usable_width_| list with items from |kIdealWidth| which fit on
|
| -// the screen and supplement it with the 'half of screen' size. Furthermore,
|
| -// add an entry for 90% of the screen size if it is smaller then the biggest
|
| -// value in the |kIdealWidth| list (to get a step between the values).
|
| -std::vector<int> BuildIdealWidthList(aura::Window* window) {
|
| - std::vector<int> ideal_width_list;
|
| - gfx::Rect work_area(ScreenAsh::GetDisplayWorkAreaBoundsInParent(window));
|
| - int half_size = work_area.width() / 2;
|
| - int maximum_width = (kMinimumScreenPercent * work_area.width()) / 100;
|
| - for (size_t i = 0; i < arraysize(kIdealWidth); i++) {
|
| - if (maximum_width >= kIdealWidth[i]) {
|
| - if (i && !ideal_width_list.size() && maximum_width != kIdealWidth[i])
|
| - ideal_width_list.push_back(maximum_width);
|
| - if (half_size > kIdealWidth[i])
|
| - ideal_width_list.push_back(half_size);
|
| - if (half_size >= kIdealWidth[i])
|
| - half_size = 0;
|
| - ideal_width_list.push_back(kIdealWidth[i]);
|
| - }
|
| - }
|
| - if (half_size)
|
| - ideal_width_list.push_back(half_size);
|
| -
|
| - return ideal_width_list;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -SnapSizer::SnapSizer(aura::Window* window,
|
| - const gfx::Point& start,
|
| - Edge edge,
|
| - InputType input_type)
|
| - : window_(window),
|
| - edge_(edge),
|
| - time_last_update_(base::TimeTicks::Now()),
|
| - size_index_(0),
|
| - resize_disabled_(false),
|
| - num_moves_since_adjust_(0),
|
| - last_adjust_x_(start.x()),
|
| - last_update_x_(start.x()),
|
| - start_x_(start.x()),
|
| - input_type_(input_type),
|
| - usable_width_(BuildIdealWidthList(window)) {
|
| - DCHECK(!usable_width_.empty());
|
| - target_bounds_ = GetTargetBounds();
|
| -}
|
| -
|
| -SnapSizer::~SnapSizer() {
|
| -}
|
| -
|
| -void SnapSizer::SnapWindow(aura::Window* window, SnapSizer::Edge edge) {
|
| - if (!wm::CanSnapWindow(window))
|
| - return;
|
| - internal::SnapSizer sizer(window, gfx::Point(), edge,
|
| - internal::SnapSizer::OTHER_INPUT);
|
| - if (wm::IsWindowFullscreen(window) || wm::IsWindowMaximized(window)) {
|
| - // Before we can set the bounds we need to restore the window.
|
| - // Restoring the window will set the window to its restored bounds.
|
| - // To avoid an unnecessary bounds changes (which may have side effects)
|
| - // we set the restore bounds to the bounds we want, restore the window,
|
| - // then reset the restore bounds. This way no unnecessary bounds
|
| - // changes occurs and the original restore bounds is remembered.
|
| - gfx::Rect restore = *GetRestoreBoundsInScreen(window);
|
| - SetRestoreBoundsInParent(window, sizer.GetSnapBounds(window->bounds()));
|
| - wm::RestoreWindow(window);
|
| - SetRestoreBoundsInScreen(window, restore);
|
| - } else {
|
| - window->SetBounds(sizer.GetSnapBounds(window->bounds()));
|
| - }
|
| -}
|
| -
|
| -void SnapSizer::Update(const gfx::Point& location) {
|
| - // See description above for details on this behavior.
|
| - num_moves_since_adjust_++;
|
| - if ((base::TimeTicks::Now() - time_last_update_).InMilliseconds() >
|
| - kDelayBeforeIncreaseMS) {
|
| - ChangeBounds(location.x(),
|
| - CalculateIncrement(location.x(), last_update_x_));
|
| - } else {
|
| - bool along_edge = AlongEdge(location.x());
|
| - int pixels_before_adjust = kPixelsBeforeAdjust;
|
| - if (input_type_ == TOUCH_MAXIMIZE_BUTTON_INPUT) {
|
| - const gfx::Rect& workspace_bounds = window_->parent()->bounds();
|
| - if (start_x_ > location.x()) {
|
| - pixels_before_adjust =
|
| - std::min(pixels_before_adjust, start_x_ / 10);
|
| - } else {
|
| - pixels_before_adjust =
|
| - std::min(pixels_before_adjust,
|
| - (workspace_bounds.width() - start_x_) / 10);
|
| - }
|
| - }
|
| - if (std::abs(location.x() - last_adjust_x_) >= pixels_before_adjust ||
|
| - (along_edge && num_moves_since_adjust_ >= kMovesBeforeAdjust)) {
|
| - ChangeBounds(location.x(),
|
| - CalculateIncrement(location.x(), last_adjust_x_));
|
| - }
|
| - }
|
| - last_update_x_ = location.x();
|
| - time_last_update_ = base::TimeTicks::Now();
|
| -}
|
| -
|
| -gfx::Rect SnapSizer::GetSnapBounds(const gfx::Rect& bounds) {
|
| - int current = 0;
|
| - if (!resize_disabled_) {
|
| - for (current = usable_width_.size() - 1; current >= 0; current--) {
|
| - gfx::Rect target = GetTargetBoundsForSize(current);
|
| - if (target == bounds) {
|
| - ++current;
|
| - break;
|
| - }
|
| - }
|
| - }
|
| - return GetTargetBoundsForSize(current % usable_width_.size());
|
| -}
|
| -
|
| -void SnapSizer::SelectDefaultSizeAndDisableResize() {
|
| - resize_disabled_ = true;
|
| - size_index_ = 0;
|
| - target_bounds_ = GetTargetBounds();
|
| -}
|
| -
|
| -gfx::Rect SnapSizer::GetTargetBoundsForSize(size_t size_index) const {
|
| - gfx::Rect work_area(ScreenAsh::GetDisplayWorkAreaBoundsInParent(window_));
|
| - int y = work_area.y();
|
| - // We don't align to the bottom of the grid as the launcher may not
|
| - // necessarily align to the grid (happens when auto-hidden).
|
| - int max_y = work_area.bottom();
|
| - int width = 0;
|
| - if (resize_disabled_) {
|
| - // Make sure that we keep the size of the window smaller then a certain
|
| - // fraction of the screen space.
|
| - int minimum_size = (kMinimumScreenPercent * work_area.width()) / 100;
|
| - width = std::max(std::min(minimum_size, 1024), work_area.width() / 2);
|
| - } else {
|
| - DCHECK(size_index < usable_width_.size());
|
| - width = usable_width_[size_index];
|
| - }
|
| -
|
| - if (edge_ == LEFT_EDGE) {
|
| - int x = work_area.x();
|
| - int mid_x = x + width;
|
| - return gfx::Rect(x, y, mid_x - x, max_y - y);
|
| - }
|
| - int max_x = work_area.right();
|
| - int x = max_x - width;
|
| - return gfx::Rect(x , y, max_x - x, max_y - y);
|
| -}
|
| -
|
| -int SnapSizer::CalculateIncrement(int x, int reference_x) const {
|
| - if (AlongEdge(x))
|
| - return 1;
|
| - if (x == reference_x)
|
| - return 0;
|
| - if (edge_ == LEFT_EDGE) {
|
| - if (x < reference_x)
|
| - return 1;
|
| - return -1;
|
| - }
|
| - // edge_ == RIGHT_EDGE.
|
| - if (x > reference_x)
|
| - return 1;
|
| - return -1;
|
| -}
|
| -
|
| -void SnapSizer::ChangeBounds(int x, int delta) {
|
| - int index = std::min(static_cast<int>(usable_width_.size()) - 1,
|
| - std::max(size_index_ + delta, 0));
|
| - if (index != size_index_) {
|
| - size_index_ = index;
|
| - target_bounds_ = GetTargetBounds();
|
| - }
|
| - num_moves_since_adjust_ = 0;
|
| - last_adjust_x_ = x;
|
| -}
|
| -
|
| -gfx::Rect SnapSizer::GetTargetBounds() const {
|
| - return GetTargetBoundsForSize(size_index_);
|
| -}
|
| -
|
| -bool SnapSizer::AlongEdge(int x) const {
|
| - gfx::Rect area(ScreenAsh::GetDisplayBoundsInParent(window_));
|
| - return (x <= area.x()) || (x >= area.right() - 1);
|
| -}
|
| -
|
| -} // namespace internal
|
| -} // namespace ash
|
|
|