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

Unified Diff: chrome/browser/ui/panels/panel_strip.cc

Issue 8772029: Reunite PanelStrip::AddPanel and its internals. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 | « chrome/browser/ui/panels/panel_strip.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/panels/panel_strip.cc
diff --git a/chrome/browser/ui/panels/panel_strip.cc b/chrome/browser/ui/panels/panel_strip.cc
index 03289f1c2a6ba81c00d3936ebec19fbe4017e302..1ee74cdc71120b878b0d0273aa130e87f750e8f6 100644
--- a/chrome/browser/ui/panels/panel_strip.cc
+++ b/chrome/browser/ui/panels/panel_strip.cc
@@ -84,16 +84,10 @@ void PanelStrip::SetDisplayArea(const gfx::Rect& new_area) {
}
void PanelStrip::AddPanel(Panel* panel) {
- if (panel->initialized())
- AddExistingPanel(panel);
- else
- AddNewPanel(panel);
- panels_.push_back(panel);
-}
-
-void PanelStrip::AddNewPanel(Panel* panel) {
- DCHECK(!panel->initialized());
+ DCHECK_EQ(Panel::EXPANDED, panel->expansion_state());
jianli 2011/12/02 01:56:38 This might not be true if |panel| is overflow pane
jennb 2011/12/02 02:20:37 Removed check for now as your patch will have logi
+ // Always update limits, even for exiting panels, in case the maximums changed
+ // while panel was out of the strip.
int max_panel_width = GetMaxPanelWidth();
int max_panel_height = GetMaxPanelHeight();
panel->SetSizeRange(gfx::Size(kPanelMinWidth, kPanelMinHeight),
@@ -103,58 +97,58 @@ void PanelStrip::AddNewPanel(Panel* panel) {
int height = restored_size.height();
int width = restored_size.width();
- if (height == 0 && width == 0) {
- // Auto resizable is enabled only if no initial size is provided.
- panel->SetAutoResizable(true);
+ if (panel->initialized()) {
+ // Bump panels in the strip to make room for this panel.
+ int x;
+ while ((x = GetRightMostAvailablePosition() - width) < display_area_.x()) {
+ DCHECK(!panels_.empty());
+ MovePanelToOverflow(panels_.back(), false);
+ }
+ int y = display_area_.bottom() - height;
+ panel->SetPanelBounds(gfx::Rect(x, y, width, height));
} else {
- if (height == 0)
- height = width / kPanelDefaultWidthToHeightRatio;
- if (width == 0)
- width = height * kPanelDefaultWidthToHeightRatio;
- }
+ // Initialize the newly created panel. Does not bump any panels from strip.
+ if (height == 0 && width == 0) {
+ // Auto resizable is enabled only if no initial size is provided.
+ panel->SetAutoResizable(true);
+ } else {
+ if (height == 0)
+ height = width / kPanelDefaultWidthToHeightRatio;
+ if (width == 0)
+ width = height * kPanelDefaultWidthToHeightRatio;
+ }
- // Constrain sizes to limits.
- if (width < kPanelMinWidth)
- width = kPanelMinWidth;
- else if (width > max_panel_width)
- width = max_panel_width;
-
- if (height < kPanelMinHeight)
- height = kPanelMinHeight;
- else if (height > max_panel_height)
- height = max_panel_height;
- panel->set_restored_size(gfx::Size(width, height));
-
- // Layout the new panel.
- int y = display_area_.bottom() - height;
- int x = GetRightMostAvailablePosition() - width;
-
- // Keep panel visible in the strip even if overlap would occur.
- // Panel is moved to overflow from the strip after a delay.
- if (x < display_area_.x()) {
- x = display_area_.x();
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&PanelStrip::MovePanelToOverflow,
- overflow_action_factory_.GetWeakPtr(),
- panel,
- true), // new panel
- kMoveNewPanelToOverflowDelayMilliseconds);
- }
- panel->Initialize(gfx::Rect(x, y, width, height));
-}
+ // Constrain sizes to limits.
+ if (width < kPanelMinWidth)
+ width = kPanelMinWidth;
+ else if (width > max_panel_width)
+ width = max_panel_width;
-void PanelStrip::AddExistingPanel(Panel* panel) {
- gfx::Size restored_size = panel->restored_size();
- int height = restored_size.height();
- int width = restored_size.width();
- int x;
- while ((x = GetRightMostAvailablePosition() - width) < display_area_.x()) {
- DCHECK(!panels_.empty());
- MovePanelToOverflow(panels_.back(), false);
+ if (height < kPanelMinHeight)
+ height = kPanelMinHeight;
+ else if (height > max_panel_height)
+ height = max_panel_height;
+
+ panel->set_restored_size(gfx::Size(width, height));
+ int x = GetRightMostAvailablePosition() - width;
+ int y = display_area_.bottom() - height;
+
+ // Keep panel visible in the strip even if overlap would occur.
+ // Panel is moved to overflow from the strip after a delay.
+ if (x < display_area_.x()) {
+ x = display_area_.x();
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&PanelStrip::MovePanelToOverflow,
+ overflow_action_factory_.GetWeakPtr(),
dcheng 2011/12/02 01:29:20 It may be better to remove the WeakPtrFactory for
jennb 2011/12/02 02:20:37 Done.
+ panel,
+ true), // new panel
+ kMoveNewPanelToOverflowDelayMilliseconds);
jianli 2011/12/02 01:56:38 Can you check remove_delays_for_testing_ here and
jennb 2011/12/02 02:20:37 Done.
+ }
+ panel->Initialize(gfx::Rect(x, y, width, height));
}
- int y = display_area_.bottom() - height;
- panel->SetPanelBounds(gfx::Rect(x, y, width, height));
+
+ panels_.push_back(panel);
}
int PanelStrip::GetMaxPanelWidth() const {
« no previous file with comments | « chrome/browser/ui/panels/panel_strip.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698