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

Unified Diff: ash/wm/workspace/snap_sizer.cc

Issue 23471004: Only support left/right maximizing at 50% width when the --ash-enable-alternate-caption-button (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 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/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

Powered by Google App Engine
This is Rietveld 408576698