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

Side by Side Diff: ash/wm/default_window_resizer.cc

Issue 10008084: Add ctrl+drag feature for allowing resizing window with exact positioning. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nits. Created 8 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ash/wm/default_window_resizer.h ('k') | ash/wm/toplevel_window_event_filter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/wm/default_window_resizer.h" 5 #include "ash/wm/default_window_resizer.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/wm/root_window_event_filter.h" 8 #include "ash/wm/root_window_event_filter.h"
9 #include "ui/aura/client/aura_constants.h" 9 #include "ui/aura/client/aura_constants.h"
10 #include "ui/aura/root_window.h" 10 #include "ui/aura/root_window.h"
11 #include "ui/aura/window.h" 11 #include "ui/aura/window.h"
12 #include "ui/aura/window_delegate.h" 12 #include "ui/aura/window_delegate.h"
13 #include "ui/base/hit_test.h" 13 #include "ui/base/hit_test.h"
14 #include "ui/base/ui_base_types.h" 14 #include "ui/base/ui_base_types.h"
15 #include "ui/gfx/compositor/layer.h" 15 #include "ui/gfx/compositor/layer.h"
16 #include "ui/gfx/compositor/scoped_layer_animation_settings.h" 16 #include "ui/gfx/compositor/scoped_layer_animation_settings.h"
17 #include "ui/gfx/screen.h" 17 #include "ui/gfx/screen.h"
18 18
19 namespace ash { 19 namespace ash {
20 20
21 DefaultWindowResizer::~DefaultWindowResizer() { 21 DefaultWindowResizer::~DefaultWindowResizer() {
22 if (root_filter_) 22 if (root_filter_)
23 root_filter_->UnlockCursor(); 23 root_filter_->UnlockCursor();
24 } 24 }
25 25
26 // static 26 // static
27 DefaultWindowResizer* 27 DefaultWindowResizer*
28 DefaultWindowResizer::Create(aura::Window* window, 28 DefaultWindowResizer::Create(aura::Window* window,
29 const gfx::Point& location, 29 const gfx::Point& location,
30 int window_component, 30 int window_component) {
31 int grid_size) { 31 Details details(window, location, window_component);
32 Details details(window, location, window_component, grid_size);
33 return details.is_resizable ? new DefaultWindowResizer(details) : NULL; 32 return details.is_resizable ? new DefaultWindowResizer(details) : NULL;
34 } 33 }
35 34
36 void DefaultWindowResizer::Drag(const gfx::Point& location) { 35 void DefaultWindowResizer::Drag(const gfx::Point& location, int event_flags) {
37 gfx::Rect bounds(CalculateBoundsForDrag(details_, location)); 36 int grid_size = event_flags & ui::EF_CONTROL_DOWN ?
37 0 : ash::Shell::GetInstance()->GetGridSize();
38 gfx::Rect bounds(CalculateBoundsForDrag(details_, location, grid_size));
38 if (bounds != details_.window->bounds()) { 39 if (bounds != details_.window->bounds()) {
39 did_move_or_resize_ = true; 40 did_move_or_resize_ = true;
40 details_.window->SetBounds(bounds); 41 details_.window->SetBounds(bounds);
41 } 42 }
42 } 43 }
43 44
44 void DefaultWindowResizer::CompleteDrag() { 45 void DefaultWindowResizer::CompleteDrag(int event_flags) {
45 if (details_.grid_size <= 1 || !did_move_or_resize_) 46 int grid_size = event_flags & ui::EF_CONTROL_DOWN ?
47 0 : ash::Shell::GetInstance()->GetGridSize();
48 if (grid_size <= 1 || !did_move_or_resize_)
46 return; 49 return;
47 gfx::Rect new_bounds( 50 gfx::Rect new_bounds(
48 AdjustBoundsToGrid(details_.window->bounds(), details_.grid_size)); 51 AdjustBoundsToGrid(details_.window->bounds(), grid_size));
49 if (new_bounds == details_.window->bounds()) 52 if (new_bounds == details_.window->bounds())
50 return; 53 return;
51 54
52 if (new_bounds.size() != details_.window->bounds().size()) { 55 if (new_bounds.size() != details_.window->bounds().size()) {
53 // Don't attempt to animate a size change. 56 // Don't attempt to animate a size change.
54 details_.window->SetBounds(new_bounds); 57 details_.window->SetBounds(new_bounds);
55 return; 58 return;
56 } 59 }
57 60
58 ui::ScopedLayerAnimationSettings scoped_setter( 61 ui::ScopedLayerAnimationSettings scoped_setter(
(...skipping 14 matching lines...) Expand all
73 : details_(details), 76 : details_(details),
74 did_move_or_resize_(false), 77 did_move_or_resize_(false),
75 root_filter_(NULL) { 78 root_filter_(NULL) {
76 DCHECK(details_.is_resizable); 79 DCHECK(details_.is_resizable);
77 root_filter_ = Shell::GetInstance()->root_filter(); 80 root_filter_ = Shell::GetInstance()->root_filter();
78 if (root_filter_) 81 if (root_filter_)
79 root_filter_->LockCursor(); 82 root_filter_->LockCursor();
80 } 83 }
81 84
82 } // namespace aura 85 } // namespace aura
OLDNEW
« no previous file with comments | « ash/wm/default_window_resizer.h ('k') | ash/wm/toplevel_window_event_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698