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

Side by Side Diff: chrome/browser/ui/panels/panel_resize_controller.cc

Issue 10066032: Enable user resizing for docked Panels (GTK and Mac). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix tests 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
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 "chrome/browser/ui/panels/panel_resize_controller.h" 5 #include "chrome/browser/ui/panels/panel_resize_controller.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/ui/panels/detached_panel_strip.h"
9 #include "chrome/browser/ui/panels/docked_panel_strip.h"
10 #include "chrome/browser/ui/panels/panel.h" 8 #include "chrome/browser/ui/panels/panel.h"
11 #include "chrome/browser/ui/panels/panel_manager.h" 9 #include "chrome/browser/ui/panels/panel_manager.h"
12 #include "chrome/browser/ui/panels/panel_strip.h"
13 10
14 namespace { 11 namespace {
15 static bool ResizingLeft(panel::ResizingSides sides) { 12 static bool ResizingLeft(panel::ResizingSides sides) {
16 return sides == panel::RESIZE_TOP_LEFT || 13 return sides == panel::RESIZE_TOP_LEFT ||
17 sides == panel::RESIZE_LEFT || 14 sides == panel::RESIZE_LEFT ||
18 sides == panel::RESIZE_BOTTOM_LEFT; 15 sides == panel::RESIZE_BOTTOM_LEFT;
19 } 16 }
20 17
21 static bool ResizingRight(panel::ResizingSides sides) { 18 static bool ResizingRight(panel::ResizingSides sides) {
22 return sides == panel::RESIZE_TOP_RIGHT || 19 return sides == panel::RESIZE_TOP_RIGHT ||
(...skipping 17 matching lines...) Expand all
40 PanelResizeController::PanelResizeController(PanelManager* panel_manager) 37 PanelResizeController::PanelResizeController(PanelManager* panel_manager)
41 : panel_manager_(panel_manager), 38 : panel_manager_(panel_manager),
42 resizing_panel_(NULL), 39 resizing_panel_(NULL),
43 sides_resized_(panel::RESIZE_NONE) { 40 sides_resized_(panel::RESIZE_NONE) {
44 } 41 }
45 42
46 void PanelResizeController::StartResizing(Panel* panel, 43 void PanelResizeController::StartResizing(Panel* panel,
47 const gfx::Point& mouse_location, 44 const gfx::Point& mouse_location,
48 panel::ResizingSides sides) { 45 panel::ResizingSides sides) {
49 DCHECK(!IsResizing()); 46 DCHECK(!IsResizing());
50 DCHECK(panel->panel_strip() && 47 DCHECK_NE(panel::RESIZE_NONE, sides);
51 panel->panel_strip()->CanResizePanel(panel));
52 48
53 DCHECK_NE(panel::RESIZE_NONE, sides); 49 panel::Resizability resizability = panel->CanResizeByMouse();
50 DCHECK_NE(panel::NOT_RESIZABLE, resizability);
51 if (panel::RESIZABLE_ALL_SIDES_EXCEPT_BOTTOM == resizability &&
52 ResizingBottom(sides)) {
53 DLOG(WARNING) << "Resizing from bottom not allowed. Is this a test?";
54 return;
55 }
54 56
55 mouse_location_at_start_ = mouse_location; 57 mouse_location_at_start_ = mouse_location;
56 bounds_at_start_ = panel->GetBounds(); 58 bounds_at_start_ = panel->GetBounds();
57 sides_resized_ = sides; 59 sides_resized_ = sides;
58 resizing_panel_ = panel; 60 resizing_panel_ = panel;
61 resizing_panel_->SetPreviewMode(true);
59 } 62 }
60 63
61 void PanelResizeController::Resize(const gfx::Point& mouse_location) { 64 void PanelResizeController::Resize(const gfx::Point& mouse_location) {
62 DCHECK(IsResizing()); 65 DCHECK(IsResizing());
63 if (resizing_panel_->panel_strip() == NULL || 66 panel::Resizability resizability = resizing_panel_->CanResizeByMouse();
64 !resizing_panel_->panel_strip()->CanResizePanel(resizing_panel_)) { 67 if (panel::NOT_RESIZABLE == resizability) {
65 EndResizing(false); 68 EndResizing(false);
66 return; 69 return;
67 } 70 }
68 gfx::Rect bounds = resizing_panel_->GetBounds(); 71 gfx::Rect bounds = resizing_panel_->GetBounds();
69 72
70 if (ResizingRight(sides_resized_)) { 73 if (ResizingRight(sides_resized_)) {
71 bounds.set_width(std::max(bounds_at_start_.width() + 74 bounds.set_width(std::max(bounds_at_start_.width() +
72 mouse_location.x() - mouse_location_at_start_.x(), 0)); 75 mouse_location.x() - mouse_location_at_start_.x(), 0));
73 } 76 }
74 if (ResizingBottom(sides_resized_)) { 77 if (ResizingBottom(sides_resized_)) {
78 DCHECK_EQ(panel::RESIZABLE_ALL_SIDES, resizability);
75 bounds.set_height(std::max(bounds_at_start_.height() + 79 bounds.set_height(std::max(bounds_at_start_.height() +
76 mouse_location.y() - mouse_location_at_start_.y(), 0)); 80 mouse_location.y() - mouse_location_at_start_.y(), 0));
77 } 81 }
78 if (ResizingLeft(sides_resized_)) { 82 if (ResizingLeft(sides_resized_)) {
79 bounds.set_width(std::max(bounds_at_start_.width() + 83 bounds.set_width(std::max(bounds_at_start_.width() +
80 mouse_location_at_start_.x() - mouse_location.x(), 0)); 84 mouse_location_at_start_.x() - mouse_location.x(), 0));
81 } 85 }
82 if (ResizingTop(sides_resized_)) { 86 if (ResizingTop(sides_resized_)) {
83 bounds.set_height(std::max(bounds_at_start_.height() + 87 bounds.set_height(std::max(bounds_at_start_.height() +
84 mouse_location_at_start_.y() - mouse_location.y(), 0)); 88 mouse_location_at_start_.y() - mouse_location.y(), 0));
(...skipping 11 matching lines...) Expand all
96 100
97 if (ResizingTop(sides_resized_)) { 101 if (ResizingTop(sides_resized_)) {
98 bounds.set_y(bounds_at_start_.y() - 102 bounds.set_y(bounds_at_start_.y() -
99 (bounds.height() - bounds_at_start_.height())); 103 (bounds.height() - bounds_at_start_.height()));
100 } 104 }
101 105
102 if (bounds != resizing_panel_->GetBounds()) 106 if (bounds != resizing_panel_->GetBounds())
103 panel_manager_->OnPanelResizedByMouse(resizing_panel_, bounds); 107 panel_manager_->OnPanelResizedByMouse(resizing_panel_, bounds);
104 } 108 }
105 109
106 void PanelResizeController::EndResizing(bool cancelled) { 110 Panel* PanelResizeController::EndResizing(bool cancelled) {
107 DCHECK(IsResizing()); 111 DCHECK(IsResizing());
108 112
109 if (cancelled) { 113 if (cancelled) {
110 panel_manager_->OnPanelResizedByMouse(resizing_panel_, 114 panel_manager_->OnPanelResizedByMouse(resizing_panel_,
111 bounds_at_start_); 115 bounds_at_start_);
112 } 116 }
113 117
114 // Do a thorough cleanup. 118 // Do a thorough cleanup.
119 resizing_panel_->SetPreviewMode(false);
120 Panel* resized_panel = resizing_panel_;
115 resizing_panel_ = NULL; 121 resizing_panel_ = NULL;
116 sides_resized_ = panel::RESIZE_NONE; 122 sides_resized_ = panel::RESIZE_NONE;
117 bounds_at_start_ = gfx::Rect(); 123 bounds_at_start_ = gfx::Rect();
118 mouse_location_at_start_ = gfx::Point(); 124 mouse_location_at_start_ = gfx::Point();
125 return resized_panel;
119 } 126 }
120 127
121 void PanelResizeController::OnPanelClosed(Panel* panel) { 128 void PanelResizeController::OnPanelClosed(Panel* panel) {
122 if (!resizing_panel_) 129 if (!resizing_panel_)
123 return; 130 return;
124 131
125 // If the resizing panel is closed, abort the resize operation. 132 // If the resizing panel is closed, abort the resize operation.
126 if (resizing_panel_ == panel) 133 if (resizing_panel_ == panel)
127 EndResizing(false); 134 EndResizing(false);
128 } 135 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/panels/panel_resize_controller.h ('k') | chrome/browser/ui/panels/panel_strip.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698