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

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: minor cleanup 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" 10 #include "chrome/browser/ui/panels/panel_strip.h"
13 11
14 namespace { 12 namespace {
15 static bool ResizingLeft(panel::ResizingSides sides) { 13 static bool ResizingLeft(panel::ResizingSides sides) {
16 return sides == panel::RESIZE_TOP_LEFT || 14 return sides == panel::RESIZE_TOP_LEFT ||
17 sides == panel::RESIZE_LEFT || 15 sides == panel::RESIZE_LEFT ||
18 sides == panel::RESIZE_BOTTOM_LEFT; 16 sides == panel::RESIZE_BOTTOM_LEFT;
19 } 17 }
(...skipping 20 matching lines...) Expand all
40 PanelResizeController::PanelResizeController(PanelManager* panel_manager) 38 PanelResizeController::PanelResizeController(PanelManager* panel_manager)
41 : panel_manager_(panel_manager), 39 : panel_manager_(panel_manager),
42 resizing_panel_(NULL), 40 resizing_panel_(NULL),
43 sides_resized_(panel::RESIZE_NONE) { 41 sides_resized_(panel::RESIZE_NONE) {
44 } 42 }
45 43
46 void PanelResizeController::StartResizing(Panel* panel, 44 void PanelResizeController::StartResizing(Panel* panel,
47 const gfx::Point& mouse_location, 45 const gfx::Point& mouse_location,
48 panel::ResizingSides sides) { 46 panel::ResizingSides sides) {
49 DCHECK(!IsResizing()); 47 DCHECK(!IsResizing());
50 DCHECK(panel->panel_strip() && 48 DCHECK_NE(panel::NOT_RESIZABLE, panel->CanResizeByMouse());
51 panel->panel_strip()->CanResizePanel(panel));
52
53 DCHECK_NE(panel::RESIZE_NONE, sides); 49 DCHECK_NE(panel::RESIZE_NONE, sides);
54 50
55 mouse_location_at_start_ = mouse_location; 51 mouse_location_at_start_ = mouse_location;
56 bounds_at_start_ = panel->GetBounds(); 52 bounds_at_start_ = panel->GetBounds();
57 sides_resized_ = sides; 53 sides_resized_ = sides;
58 resizing_panel_ = panel; 54 resizing_panel_ = panel;
55 resizing_panel_->SetPreviewMode(true);
59 } 56 }
60 57
61 void PanelResizeController::Resize(const gfx::Point& mouse_location) { 58 void PanelResizeController::Resize(const gfx::Point& mouse_location) {
62 DCHECK(IsResizing()); 59 DCHECK(IsResizing());
63 if (resizing_panel_->panel_strip() == NULL || 60 if (resizing_panel_->CanResizeByMouse() == panel::NOT_RESIZABLE) {
64 !resizing_panel_->panel_strip()->CanResizePanel(resizing_panel_)) {
65 EndResizing(false); 61 EndResizing(false);
66 return; 62 return;
67 } 63 }
68 gfx::Rect bounds = resizing_panel_->GetBounds(); 64 gfx::Rect bounds = resizing_panel_->GetBounds();
69 65
70 if (ResizingRight(sides_resized_)) { 66 if (ResizingRight(sides_resized_)) {
71 bounds.set_width(std::max(bounds_at_start_.width() + 67 bounds.set_width(std::max(bounds_at_start_.width() +
72 mouse_location.x() - mouse_location_at_start_.x(), 0)); 68 mouse_location.x() - mouse_location_at_start_.x(), 0));
73 } 69 }
74 if (ResizingBottom(sides_resized_)) { 70 if (ResizingBottom(sides_resized_)) {
71 DCHECK_EQ(panel::ALL_SIDES, resizing_panel_->CanResizeByMouse());
75 bounds.set_height(std::max(bounds_at_start_.height() + 72 bounds.set_height(std::max(bounds_at_start_.height() +
76 mouse_location.y() - mouse_location_at_start_.y(), 0)); 73 mouse_location.y() - mouse_location_at_start_.y(), 0));
77 } 74 }
78 if (ResizingLeft(sides_resized_)) { 75 if (ResizingLeft(sides_resized_)) {
79 bounds.set_width(std::max(bounds_at_start_.width() + 76 bounds.set_width(std::max(bounds_at_start_.width() +
80 mouse_location_at_start_.x() - mouse_location.x(), 0)); 77 mouse_location_at_start_.x() - mouse_location.x(), 0));
81 } 78 }
82 if (ResizingTop(sides_resized_)) { 79 if (ResizingTop(sides_resized_)) {
83 bounds.set_height(std::max(bounds_at_start_.height() + 80 bounds.set_height(std::max(bounds_at_start_.height() +
84 mouse_location_at_start_.y() - mouse_location.y(), 0)); 81 mouse_location_at_start_.y() - mouse_location.y(), 0));
(...skipping 19 matching lines...) Expand all
104 } 101 }
105 102
106 void PanelResizeController::EndResizing(bool cancelled) { 103 void PanelResizeController::EndResizing(bool cancelled) {
107 DCHECK(IsResizing()); 104 DCHECK(IsResizing());
108 105
109 if (cancelled) { 106 if (cancelled) {
110 panel_manager_->OnPanelResizedByMouse(resizing_panel_, 107 panel_manager_->OnPanelResizedByMouse(resizing_panel_,
111 bounds_at_start_); 108 bounds_at_start_);
112 } 109 }
113 110
111 resizing_panel_->SetPreviewMode(false);
112 if (resizing_panel_->panel_strip())
113 resizing_panel_->panel_strip()->RefreshLayout();
114
114 // Do a thorough cleanup. 115 // Do a thorough cleanup.
115 resizing_panel_ = NULL; 116 resizing_panel_ = NULL;
116 sides_resized_ = panel::RESIZE_NONE; 117 sides_resized_ = panel::RESIZE_NONE;
117 bounds_at_start_ = gfx::Rect(); 118 bounds_at_start_ = gfx::Rect();
118 mouse_location_at_start_ = gfx::Point(); 119 mouse_location_at_start_ = gfx::Point();
119 } 120 }
120 121
121 void PanelResizeController::OnPanelClosed(Panel* panel) { 122 void PanelResizeController::OnPanelClosed(Panel* panel) {
122 if (!resizing_panel_) 123 if (!resizing_panel_)
123 return; 124 return;
124 125
125 // If the resizing panel is closed, abort the resize operation. 126 // If the resizing panel is closed, abort the resize operation.
126 if (resizing_panel_ == panel) 127 if (resizing_panel_ == panel)
127 EndResizing(false); 128 EndResizing(false);
128 } 129 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698