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

Unified Diff: mash/wm/move_loop.cc

Issue 1459653002: Gets mustash frames looking like that of ash (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update test Created 5 years, 1 month 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
« no previous file with comments | « mash/wm/move_loop.h ('k') | mash/wm/move_loop_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mash/wm/move_loop.cc
diff --git a/mash/wm/move_loop.cc b/mash/wm/move_loop.cc
deleted file mode 100644
index 6c3ee7df28024e8bf5f1d8b5943fcad5f8785eeb..0000000000000000000000000000000000000000
--- a/mash/wm/move_loop.cc
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2015 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 "mash/wm/move_loop.h"
-
-#include "base/auto_reset.h"
-#include "components/mus/public/cpp/window.h"
-#include "components/mus/public/interfaces/input_event_constants.mojom.h"
-#include "mash/wm/property_util.h"
-#include "ui/gfx/geometry/point_conversions.h"
-#include "ui/gfx/geometry/rect.h"
-
-namespace {
-
-gfx::Point EventLocationToPoint(const mus::mojom::Event& event) {
- return gfx::ToFlooredPoint(gfx::PointF(event.pointer_data->location->x,
- event.pointer_data->location->y));
-}
-
-gfx::Point EventScreenLocationToPoint(const mus::mojom::Event& event) {
- return gfx::ToFlooredPoint(
- gfx::PointF(event.pointer_data->location->screen_x,
- event.pointer_data->location->screen_y));
-}
-
-mus::mojom::EventFlags MouseOnlyEventFlags(mus::mojom::EventFlags flags) {
- return static_cast<mus::mojom::EventFlags>(
- flags & (mus::mojom::EVENT_FLAGS_LEFT_MOUSE_BUTTON |
- mus::mojom::EVENT_FLAGS_MIDDLE_MOUSE_BUTTON |
- mus::mojom::EVENT_FLAGS_RIGHT_MOUSE_BUTTON));
-}
-
-gfx::Rect ClientAreaBounds(const mus::Window* window) {
- gfx::Rect client_area(window->bounds().size());
- client_area.Inset(window->client_area());
- return client_area;
-}
-
-} // namespace
-
-MoveLoop::~MoveLoop() {
- if (target_)
- target_->RemoveObserver(this);
-}
-
-// static
-scoped_ptr<MoveLoop> MoveLoop::Create(mus::Window* target,
- const mus::mojom::Event& event) {
- DCHECK_EQ(event.action, mus::mojom::EVENT_TYPE_POINTER_DOWN);
- const gfx::Point location(EventLocationToPoint(event));
- if (!gfx::Rect(target->bounds().size()).Contains(location) ||
- ClientAreaBounds(target).Contains(location)) {
- return nullptr;
- }
-
- // Start a move on left mouse, or any other type of pointer.
- if (event.pointer_data->kind == mus::mojom::POINTER_KIND_MOUSE &&
- MouseOnlyEventFlags(event.flags) !=
- mus::mojom::EVENT_FLAGS_LEFT_MOUSE_BUTTON) {
- return nullptr;
- }
-
- Type type;
- HorizontalLocation h_loc;
- VerticalLocation v_loc;
- DetermineType(target, location, &type, &h_loc, &v_loc);
-
- return make_scoped_ptr(new MoveLoop(target, event, type, h_loc, v_loc));
-}
-
-MoveLoop::MoveResult MoveLoop::Move(const mus::mojom::Event& event) {
- switch (event.action) {
- case mus::mojom::EVENT_TYPE_POINTER_CANCEL:
- if (event.pointer_data->pointer_id == pointer_id_) {
- if (target_)
- Revert();
- return MoveResult::DONE;
- }
- return MoveResult::CONTINUE;
-
- case mus::mojom::EVENT_TYPE_POINTER_MOVE:
- if (target_ && event.pointer_data->pointer_id == pointer_id_)
- MoveImpl(event);
- return MoveResult::CONTINUE;
-
- case mus::mojom::EVENT_TYPE_POINTER_UP:
- if (event.pointer_data->pointer_id == pointer_id_) {
- // TODO(sky): need to support changed_flags.
- if (target_)
- MoveImpl(event);
- return MoveResult::DONE;
- }
- return MoveResult::CONTINUE;
-
- default:
- break;
- }
-
- return MoveResult::CONTINUE;
-}
-
-MoveLoop::MoveLoop(mus::Window* target,
- const mus::mojom::Event& event,
- Type type,
- HorizontalLocation h_loc,
- VerticalLocation v_loc)
- : target_(target),
- type_(type),
- h_loc_(h_loc),
- v_loc_(v_loc),
- pointer_id_(event.pointer_data->pointer_id),
- initial_event_screen_location_(EventScreenLocationToPoint(event)),
- initial_window_bounds_(target->bounds()),
- initial_user_set_bounds_(GetWindowUserSetBounds(target)),
- changing_bounds_(false) {
- target->AddObserver(this);
-}
-
-// static
-void MoveLoop::DetermineType(mus::Window* target,
- const gfx::Point& location,
- Type* type,
- HorizontalLocation* h_loc,
- VerticalLocation* v_loc) {
- *h_loc = HorizontalLocation::OTHER;
- *v_loc = VerticalLocation::OTHER;
- const int resize_size = static_cast<int>(
- kResizeSize *
- std::max(1.f, target->viewport_metrics().device_pixel_ratio));
-
- const gfx::Rect client_area(ClientAreaBounds(target));
- if (location.x() < client_area.x())
- *h_loc = HorizontalLocation::LEFT;
- else if (location.x() >= client_area.right())
- *h_loc = HorizontalLocation::RIGHT;
- else
- *h_loc = HorizontalLocation::OTHER;
-
- if (location.y() < resize_size)
- *v_loc = VerticalLocation::TOP;
- else if (location.y() >= client_area.bottom())
- *v_loc = VerticalLocation::BOTTOM;
- else
- *v_loc = VerticalLocation::OTHER;
-
- if (*v_loc == VerticalLocation::OTHER && location.y() >= resize_size &&
- *h_loc == HorizontalLocation::OTHER) {
- *type = Type::MOVE;
- return;
- }
- *type = Type::RESIZE;
- DCHECK(*h_loc != HorizontalLocation::OTHER ||
- *v_loc != VerticalLocation::OTHER);
-}
-
-void MoveLoop::MoveImpl(const mus::mojom::Event& event) {
- const gfx::Vector2d delta =
- EventScreenLocationToPoint(event) - initial_event_screen_location_;
- const gfx::Rect new_bounds(DetermineBoundsFromDelta(delta));
- base::AutoReset<bool> resetter(&changing_bounds_, true);
- target_->SetBounds(new_bounds);
- SetWindowUserSetBounds(target_, new_bounds);
-}
-
-void MoveLoop::Cancel() {
- target_->RemoveObserver(this);
- target_ = nullptr;
-}
-
-void MoveLoop::Revert() {
- base::AutoReset<bool> resetter(&changing_bounds_, true);
- target_->SetBounds(initial_window_bounds_);
- SetWindowUserSetBounds(target_, initial_user_set_bounds_);
-}
-
-gfx::Rect MoveLoop::DetermineBoundsFromDelta(const gfx::Vector2d& delta) {
- if (type_ == Type::MOVE) {
- return gfx::Rect(initial_window_bounds_.origin() + delta,
- initial_window_bounds_.size());
- }
-
- // TODO(sky): support better min sizes, make sure doesn't get bigger than
- // screen and max. Also make sure keep some portion on screen.
- gfx::Rect bounds(initial_window_bounds_);
- if (h_loc_ == HorizontalLocation::LEFT) {
- const int x = std::min(bounds.right() - 1, bounds.x() + delta.x());
- const int width = bounds.right() - x;
- bounds.set_x(x);
- bounds.set_width(width);
- } else if (h_loc_ == HorizontalLocation::RIGHT) {
- bounds.set_width(std::max(1, bounds.width() + delta.x()));
- }
-
- if (v_loc_ == VerticalLocation::TOP) {
- const int y = std::min(bounds.bottom() - 1, bounds.y() + delta.y());
- const int height = bounds.bottom() - y;
- bounds.set_y(y);
- bounds.set_height(height);
- } else if (v_loc_ == VerticalLocation::BOTTOM) {
- bounds.set_height(std::max(1, bounds.height() + delta.y()));
- }
-
- return bounds;
-}
-
-void MoveLoop::OnTreeChanged(const TreeChangeParams& params) {
- if (params.target == target_)
- Cancel();
-}
-
-void MoveLoop::OnWindowBoundsChanged(mus::Window* window,
- const gfx::Rect& old_bounds,
- const gfx::Rect& new_bounds) {
- DCHECK_EQ(window, target_);
- if (!changing_bounds_)
- Cancel();
-}
-
-void MoveLoop::OnWindowVisibilityChanged(mus::Window* window) {
- DCHECK_EQ(window, target_);
- Cancel();
-}
« no previous file with comments | « mash/wm/move_loop.h ('k') | mash/wm/move_loop_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698