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

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

Issue 8775022: Add Panel::SetPanelBoundsInstantly for all platforms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_strip.h" 5 #include "chrome/browser/ui/panels/panel_strip.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 int x = GetRightMostAvailablePosition() - width; 117 int x = GetRightMostAvailablePosition() - width;
118 panel->Initialize(gfx::Rect(x, y, width, height)); 118 panel->Initialize(gfx::Rect(x, y, width, height));
119 } 119 }
120 120
121 void PanelStrip::AddExistingPanel(Panel* panel) { 121 void PanelStrip::AddExistingPanel(Panel* panel) {
122 gfx::Size restored_size = panel->restored_size(); 122 gfx::Size restored_size = panel->restored_size();
123 int height = restored_size.height(); 123 int height = restored_size.height();
124 int width = restored_size.width(); 124 int width = restored_size.width();
125 int x = GetRightMostAvailablePosition() - width; 125 int x = GetRightMostAvailablePosition() - width;
126 int y = strip_bounds_.bottom() - height; 126 int y = strip_bounds_.bottom() - height;
127 panel->SetPanelBounds(gfx::Rect(x, y, width, height)); 127 panel->SetPanelBounds(gfx::Rect(x, y, width, height),
128 true); // use animation.
128 } 129 }
129 130
130 int PanelStrip::GetMaxPanelWidth() const { 131 int PanelStrip::GetMaxPanelWidth() const {
131 return static_cast<int>(strip_bounds_.width() * kPanelMaxWidthFactor); 132 return static_cast<int>(strip_bounds_.width() * kPanelMaxWidthFactor);
132 } 133 }
133 134
134 int PanelStrip::GetMaxPanelHeight() const { 135 int PanelStrip::GetMaxPanelHeight() const {
135 return strip_bounds_.height(); 136 return strip_bounds_.height();
136 } 137 }
137 138
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 void PanelStrip::Drag(int delta_x) { 192 void PanelStrip::Drag(int delta_x) {
192 DCHECK(dragging_panel_index_ != kInvalidPanelIndex); 193 DCHECK(dragging_panel_index_ != kInvalidPanelIndex);
193 194
194 if (!delta_x) 195 if (!delta_x)
195 return; 196 return;
196 197
197 // Moves this panel to the dragging position. 198 // Moves this panel to the dragging position.
198 Panel* dragging_panel = panels_[dragging_panel_index_]; 199 Panel* dragging_panel = panels_[dragging_panel_index_];
199 gfx::Rect new_bounds(dragging_panel->GetBounds()); 200 gfx::Rect new_bounds(dragging_panel->GetBounds());
200 new_bounds.set_x(new_bounds.x() + delta_x); 201 new_bounds.set_x(new_bounds.x() + delta_x);
201 dragging_panel->SetPanelBounds(new_bounds); 202 dragging_panel->SetPanelBounds(new_bounds, true); // use animation.
202 203
203 // Checks and processes other affected panels. 204 // Checks and processes other affected panels.
204 if (delta_x > 0) 205 if (delta_x > 0)
205 DragRight(); 206 DragRight();
206 else 207 else
207 DragLeft(); 208 DragLeft();
208 } 209 }
209 210
210 void PanelStrip::DragLeft() { 211 void PanelStrip::DragLeft() {
211 Panel* dragging_panel = panels_[dragging_panel_index_]; 212 Panel* dragging_panel = panels_[dragging_panel_index_];
(...skipping 14 matching lines...) Expand all
226 // Current panel will only be affected if the left corner of dragging 227 // Current panel will only be affected if the left corner of dragging
227 // panel goes beyond the middle position of the current panel. 228 // panel goes beyond the middle position of the current panel.
228 if (dragging_panel_left_boundary > current_panel->GetBounds().x() + 229 if (dragging_panel_left_boundary > current_panel->GetBounds().x() +
229 current_panel->GetBounds().width() / 2) 230 current_panel->GetBounds().width() / 2)
230 break; 231 break;
231 232
232 // Moves current panel to the new position. 233 // Moves current panel to the new position.
233 gfx::Rect bounds(current_panel->GetBounds()); 234 gfx::Rect bounds(current_panel->GetBounds());
234 bounds.set_x(current_panel_right_boundary - bounds.width()); 235 bounds.set_x(current_panel_right_boundary - bounds.width());
235 current_panel_right_boundary -= bounds.width() + kPanelsHorizontalSpacing; 236 current_panel_right_boundary -= bounds.width() + kPanelsHorizontalSpacing;
236 current_panel->SetPanelBounds(bounds); 237 current_panel->SetPanelBounds(bounds, true); // use animation.
237 238
238 // Updates the index of current panel since it has been moved to the 239 // Updates the index of current panel since it has been moved to the
239 // position of previous panel. 240 // position of previous panel.
240 panels_[current_panel_index - 1] = current_panel; 241 panels_[current_panel_index - 1] = current_panel;
241 } 242 }
242 243
243 // Updates the position and index of dragging panel as the result of moving 244 // Updates the position and index of dragging panel as the result of moving
244 // other affected panels. 245 // other affected panels.
245 if (current_panel_index != dragging_panel_index_ + 1) { 246 if (current_panel_index != dragging_panel_index_ + 1) {
246 dragging_panel_bounds_.set_x(current_panel_right_boundary - 247 dragging_panel_bounds_.set_x(current_panel_right_boundary -
(...skipping 22 matching lines...) Expand all
269 // Current panel will only be affected if the right corner of dragging 270 // Current panel will only be affected if the right corner of dragging
270 // panel goes beyond the middle position of the current panel. 271 // panel goes beyond the middle position of the current panel.
271 if (dragging_panel_right_boundary < current_panel->GetBounds().x() + 272 if (dragging_panel_right_boundary < current_panel->GetBounds().x() +
272 current_panel->GetBounds().width() / 2) 273 current_panel->GetBounds().width() / 2)
273 break; 274 break;
274 275
275 // Moves current panel to the new position. 276 // Moves current panel to the new position.
276 gfx::Rect bounds(current_panel->GetBounds()); 277 gfx::Rect bounds(current_panel->GetBounds());
277 bounds.set_x(current_panel_left_boundary); 278 bounds.set_x(current_panel_left_boundary);
278 current_panel_left_boundary += bounds.width() + kPanelsHorizontalSpacing; 279 current_panel_left_boundary += bounds.width() + kPanelsHorizontalSpacing;
279 current_panel->SetPanelBounds(bounds); 280 current_panel->SetPanelBounds(bounds, true); // use animation.
280 281
281 // Updates the index of current panel since it has been moved to the 282 // Updates the index of current panel since it has been moved to the
282 // position of previous panel. 283 // position of previous panel.
283 panels_[current_panel_index + 1] = current_panel; 284 panels_[current_panel_index + 1] = current_panel;
284 } 285 }
285 286
286 // Updates the position and index of dragging panel as the result of moving 287 // Updates the position and index of dragging panel as the result of moving
287 // other affected panels. 288 // other affected panels.
288 if (current_panel_index != static_cast<int>(dragging_panel_index_) - 1) { 289 if (current_panel_index != static_cast<int>(dragging_panel_index_) - 1) {
289 dragging_panel_bounds_.set_x(current_panel_left_boundary); 290 dragging_panel_bounds_.set_x(current_panel_left_boundary);
290 dragging_panel_index_ = current_panel_index + 1; 291 dragging_panel_index_ = current_panel_index + 1;
291 panels_[dragging_panel_index_] = dragging_panel; 292 panels_[dragging_panel_index_] = dragging_panel;
292 } 293 }
293 } 294 }
294 295
295 void PanelStrip::EndDragging(bool cancelled) { 296 void PanelStrip::EndDragging(bool cancelled) {
296 DCHECK(dragging_panel_index_ != kInvalidPanelIndex); 297 DCHECK(dragging_panel_index_ != kInvalidPanelIndex);
297 298
298 if (cancelled) { 299 if (cancelled) {
299 Drag(dragging_panel_original_x_ - 300 Drag(dragging_panel_original_x_ -
300 panels_[dragging_panel_index_]->GetBounds().x()); 301 panels_[dragging_panel_index_]->GetBounds().x());
301 } else { 302 } else {
302 panels_[dragging_panel_index_]->SetPanelBounds( 303 panels_[dragging_panel_index_]->SetPanelBounds(
303 dragging_panel_bounds_); 304 dragging_panel_bounds_, true); // use animation.
304 } 305 }
305 306
306 dragging_panel_index_ = kInvalidPanelIndex; 307 dragging_panel_index_ = kInvalidPanelIndex;
307 308
308 DelayedRemove(); 309 DelayedRemove();
309 } 310 }
310 311
311 void PanelStrip::OnPanelExpansionStateChanged( 312 void PanelStrip::OnPanelExpansionStateChanged(
312 Panel::ExpansionState old_state, Panel::ExpansionState new_state) { 313 Panel::ExpansionState old_state, Panel::ExpansionState new_state) {
313 DCHECK_NE(new_state, old_state); 314 DCHECK_NE(new_state, old_state);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 if (panels_[i] == panel) { 363 if (panels_[i] == panel) {
363 panel_index = i; 364 panel_index = i;
364 break; 365 break;
365 } 366 }
366 } 367 }
367 DCHECK(panel_index >= 0); 368 DCHECK(panel_index >= 0);
368 for (int i = static_cast<int>(panels_.size()) -1; i > panel_index; 369 for (int i = static_cast<int>(panels_.size()) -1; i > panel_index;
369 --i) { 370 --i) {
370 gfx::Rect this_bounds = panels_[i]->GetBounds(); 371 gfx::Rect this_bounds = panels_[i]->GetBounds();
371 this_bounds.set_x(this_bounds.x() + delta); 372 this_bounds.set_x(this_bounds.x() + delta);
372 panels_[i]->SetPanelBounds(this_bounds); 373 panels_[i]->SetPanelBounds(this_bounds, true); // use animation.
373 } 374 }
374 } 375 }
375 376
376 // The panel height: 377 // The panel height:
377 // * cannot grow or shrink to go beyond [min_height, max_height] 378 // * cannot grow or shrink to go beyond [min_height, max_height]
378 int new_height = preferred_window_size.height(); 379 int new_height = preferred_window_size.height();
379 if (new_height > panel->max_size().height()) 380 if (new_height > panel->max_size().height())
380 new_height = panel->max_size().height(); 381 new_height = panel->max_size().height();
381 if (new_height < panel->min_size().height()) 382 if (new_height < panel->min_size().height())
382 new_height = panel->min_size().height(); 383 new_height = panel->min_size().height();
383 384
384 // Only need to adjust bounds height when panel is expanded. 385 // Only need to adjust bounds height when panel is expanded.
385 gfx::Size restored_size = panel->restored_size(); 386 gfx::Size restored_size = panel->restored_size();
386 if (new_height != restored_size.height() && 387 if (new_height != restored_size.height() &&
387 panel->expansion_state() == Panel::EXPANDED) { 388 panel->expansion_state() == Panel::EXPANDED) {
388 bounds.set_y(bounds.y() - new_height + bounds.height()); 389 bounds.set_y(bounds.y() - new_height + bounds.height());
389 bounds.set_height(new_height); 390 bounds.set_height(new_height);
390 } 391 }
391 392
392 gfx::Size new_size = gfx::Size(new_width, new_height); 393 gfx::Size new_size = gfx::Size(new_width, new_height);
393 if (new_size != restored_size) 394 if (new_size != restored_size)
394 panel->set_restored_size(new_size); 395 panel->set_restored_size(new_size);
395 396
396 panel->SetPanelBounds(bounds); 397 panel->SetPanelBounds(bounds, true); // use animation.
397 } 398 }
398 399
399 bool PanelStrip::ShouldBringUpTitlebars(int mouse_x, int mouse_y) const { 400 bool PanelStrip::ShouldBringUpTitlebars(int mouse_x, int mouse_y) const {
400 // We should always bring up the titlebar if the mouse is over the 401 // We should always bring up the titlebar if the mouse is over the
401 // visible auto-hiding bottom bar. 402 // visible auto-hiding bottom bar.
402 AutoHidingDesktopBar* desktop_bar = panel_manager_->auto_hiding_desktop_bar(); 403 AutoHidingDesktopBar* desktop_bar = panel_manager_->auto_hiding_desktop_bar();
403 if (desktop_bar->IsEnabled(AutoHidingDesktopBar::ALIGN_BOTTOM) && 404 if (desktop_bar->IsEnabled(AutoHidingDesktopBar::ALIGN_BOTTOM) &&
404 desktop_bar->GetVisibility(AutoHidingDesktopBar::ALIGN_BOTTOM) == 405 desktop_bar->GetVisibility(AutoHidingDesktopBar::ALIGN_BOTTOM) ==
405 AutoHidingDesktopBar::VISIBLE && 406 AutoHidingDesktopBar::VISIBLE &&
406 mouse_y >= strip_bounds_.bottom()) 407 mouse_y >= strip_bounds_.bottom())
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 548
548 void PanelStrip::Rearrange(Panels::iterator iter_to_start, 549 void PanelStrip::Rearrange(Panels::iterator iter_to_start,
549 int rightmost_position) { 550 int rightmost_position) {
550 for (Panels::iterator iter = iter_to_start; iter != panels_.end(); ++iter) { 551 for (Panels::iterator iter = iter_to_start; iter != panels_.end(); ++iter) {
551 Panel* panel = *iter; 552 Panel* panel = *iter;
552 gfx::Rect new_bounds(panel->GetBounds()); 553 gfx::Rect new_bounds(panel->GetBounds());
553 new_bounds.set_x(rightmost_position - new_bounds.width()); 554 new_bounds.set_x(rightmost_position - new_bounds.width());
554 new_bounds.set_y( 555 new_bounds.set_y(
555 GetBottomPositionForExpansionState(panel->expansion_state()) - 556 GetBottomPositionForExpansionState(panel->expansion_state()) -
556 new_bounds.height()); 557 new_bounds.height());
557 panel->SetPanelBounds(new_bounds); 558 panel->SetPanelBounds(new_bounds, true); // use animation.
558 559
559 rightmost_position = new_bounds.x() - kPanelsHorizontalSpacing; 560 rightmost_position = new_bounds.x() - kPanelsHorizontalSpacing;
560 } 561 }
561 } 562 }
562 563
563 void PanelStrip::RemoveAll() { 564 void PanelStrip::RemoveAll() {
564 // This should not be called when we're in the process of dragging. 565 // This should not be called when we're in the process of dragging.
565 DCHECK(dragging_panel_index_ == kInvalidPanelIndex); 566 DCHECK(dragging_panel_index_ == kInvalidPanelIndex);
566 567
567 // Make a copy of the iterator as closing panels can modify the vector. 568 // Make a copy of the iterator as closing panels can modify the vector.
568 Panels panels_copy = panels_; 569 Panels panels_copy = panels_;
569 570
570 // Start from the bottom to avoid reshuffling. 571 // Start from the bottom to avoid reshuffling.
571 for (Panels::reverse_iterator iter = panels_copy.rbegin(); 572 for (Panels::reverse_iterator iter = panels_copy.rbegin();
572 iter != panels_copy.rend(); ++iter) 573 iter != panels_copy.rend(); ++iter)
573 (*iter)->Close(); 574 (*iter)->Close();
574 } 575 }
575 576
576 bool PanelStrip::is_dragging_panel() const { 577 bool PanelStrip::is_dragging_panel() const {
577 return dragging_panel_index_ != kInvalidPanelIndex; 578 return dragging_panel_index_ != kInvalidPanelIndex;
578 } 579 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698