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

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

Issue 9129013: Panel Overflow on Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cr feedback Created 8 years, 10 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/docked_panel_strip.h" 5 #include "chrome/browser/ui/panels/docked_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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 height = max_panel_height; 133 height = max_panel_height;
134 134
135 panel->set_restored_size(gfx::Size(width, height)); 135 panel->set_restored_size(gfx::Size(width, height));
136 int x = GetRightMostAvailablePosition() - width; 136 int x = GetRightMostAvailablePosition() - width;
137 int y = display_area_.bottom() - height; 137 int y = display_area_.bottom() - height;
138 138
139 // Keep panel visible in the strip even if overlap would occur. 139 // Keep panel visible in the strip even if overlap would occur.
140 // Panel is moved to overflow from the strip after a delay. 140 // Panel is moved to overflow from the strip after a delay.
141 // TODO(jianli): remove the guard when overflow support is enabled on other 141 // TODO(jianli): remove the guard when overflow support is enabled on other
142 // platforms. http://crbug.com/105073 142 // platforms. http://crbug.com/105073
143 #if defined(OS_WIN) 143 #if defined(OS_WIN) || defined(OS_MACOSX)
144 if (x < display_area_.x()) { 144 if (x < display_area_.x()) {
145 x = display_area_.x(); 145 x = display_area_.x();
146 panel->set_has_temporary_layout(true); 146 panel->set_has_temporary_layout(true);
147 panel->set_draggable(false); 147 panel->set_draggable(false);
148 MessageLoop::current()->PostDelayedTask( 148 MessageLoop::current()->PostDelayedTask(
149 FROM_HERE, 149 FROM_HERE,
150 base::Bind(&DockedPanelStrip::DelayedMovePanelToOverflow, 150 base::Bind(&DockedPanelStrip::DelayedMovePanelToOverflow,
151 base::Unretained(this), 151 base::Unretained(this),
152 panel), 152 panel),
153 base::TimeDelta::FromMilliseconds(PanelManager::AdjustTimeInterval( 153 base::TimeDelta::FromMilliseconds(PanelManager::AdjustTimeInterval(
154 kMoveNewPanelToOverflowDelayMs))); 154 kMoveNewPanelToOverflowDelayMs)));
155 } 155 }
156 #endif 156 #endif
157 panel->Initialize(gfx::Rect(x, y, width, height)); 157 panel->Initialize(gfx::Rect(x, y, width, height));
158 } 158 }
159 159
160 panel->ApplyVisualStyleForStrip(DOCKED_STRIP);
161
160 if (panel->has_temporary_layout()) 162 if (panel->has_temporary_layout())
161 panels_in_temporary_layout_.insert(panel); 163 panels_in_temporary_layout_.insert(panel);
162 else 164 else
163 panels_.push_back(panel); 165 panels_.push_back(panel);
164 } 166 }
165 167
166 int DockedPanelStrip::GetMaxPanelWidth() const { 168 int DockedPanelStrip::GetMaxPanelWidth() const {
167 return static_cast<int>(display_area_.width() * kPanelMaxWidthFactor); 169 return static_cast<int>(display_area_.width() * kPanelMaxWidthFactor);
168 } 170 }
169 171
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 int rightmost_position = StartingRightPosition(); 648 int rightmost_position = StartingRightPosition();
647 649
648 size_t panel_index = 0; 650 size_t panel_index = 0;
649 for (; panel_index < panels_.size(); ++panel_index) { 651 for (; panel_index < panels_.size(); ++panel_index) {
650 Panel* panel = panels_[panel_index]; 652 Panel* panel = panels_[panel_index];
651 gfx::Rect new_bounds(panel->GetBounds()); 653 gfx::Rect new_bounds(panel->GetBounds());
652 int x = rightmost_position - new_bounds.width(); 654 int x = rightmost_position - new_bounds.width();
653 655
654 // TODO(jianli): remove the guard when overflow support is enabled on other 656 // TODO(jianli): remove the guard when overflow support is enabled on other
655 // platforms. http://crbug.com/105073 657 // platforms. http://crbug.com/105073
656 #if defined(OS_WIN) 658 #if defined(OS_WIN) || defined(OS_MACOSX)
657 if (x < display_area_.x()) 659 if (x < display_area_.x())
658 break; 660 break;
659 #endif 661 #endif
660 662
661 new_bounds.set_x(x); 663 new_bounds.set_x(x);
662 new_bounds.set_y( 664 new_bounds.set_y(
663 GetBottomPositionForExpansionState(panel->expansion_state()) - 665 GetBottomPositionForExpansionState(panel->expansion_state()) -
664 new_bounds.height()); 666 new_bounds.height());
665 panel->SetPanelBounds(new_bounds); 667 panel->SetPanelBounds(new_bounds);
666 668
667 rightmost_position = new_bounds.x() - kPanelsHorizontalSpacing; 669 rightmost_position = new_bounds.x() - kPanelsHorizontalSpacing;
668 } 670 }
669 671
670 // TODO(jianli): remove the guard when overflow support is enabled on other 672 // TODO(jianli): remove the guard when overflow support is enabled on other
671 // platforms. http://crbug.com/105073 673 // platforms. http://crbug.com/105073
672 #if defined(OS_WIN) 674 #if defined(OS_WIN) || defined(OS_MACOSX)
673 // Add/remove panels from/to overflow. A change in work area or the 675 // Add/remove panels from/to overflow. A change in work area or the
674 // resize/removal of a panel may affect how many panels fit in the strip. 676 // resize/removal of a panel may affect how many panels fit in the strip.
675 if (panel_index < panels_.size()) { 677 if (panel_index < panels_.size()) {
676 // Move panels to overflow in reverse to maintain their order. 678 // Move panels to overflow in reverse to maintain their order.
677 for (size_t overflow_index = panels_.size() - 1; 679 for (size_t overflow_index = panels_.size() - 1;
678 overflow_index >= panel_index; --overflow_index) 680 overflow_index >= panel_index; --overflow_index)
679 panels_[overflow_index]->SetExpansionState(Panel::IN_OVERFLOW); 681 panels_[overflow_index]->SetExpansionState(Panel::IN_OVERFLOW);
680 } else { 682 } else {
681 // Attempt to add more panels from overflow to the strip. 683 // Attempt to add more panels from overflow to the strip.
682 OverflowPanelStrip* overflow_strip = panel_manager_->overflow_strip(); 684 OverflowPanelStrip* overflow_strip = panel_manager_->overflow_strip();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 717
716 // Start from the bottom to avoid reshuffling. 718 // Start from the bottom to avoid reshuffling.
717 for (Panels::reverse_iterator iter = panels_copy.rbegin(); 719 for (Panels::reverse_iterator iter = panels_copy.rbegin();
718 iter != panels_copy.rend(); ++iter) 720 iter != panels_copy.rend(); ++iter)
719 (*iter)->Close(); 721 (*iter)->Close();
720 } 722 }
721 723
722 bool DockedPanelStrip::is_dragging_panel() const { 724 bool DockedPanelStrip::is_dragging_panel() const {
723 return dragging_panel_index_ != kInvalidPanelIndex; 725 return dragging_panel_index_ != kInvalidPanelIndex;
724 } 726 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/panels/native_panel.h » ('j') | chrome/browser/ui/panels/panel_overflow_browsertest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698