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

Side by Side Diff: ash/wm/panels/panel_layout_manager.cc

Issue 138003007: [Cleanup] Screen cleanup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: make sure screen_for_shutdown is reset everytime Created 6 years, 11 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 "ash/wm/panels/panel_layout_manager.h" 5 #include "ash/wm/panels/panel_layout_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "ash/screen_ash.h" 10 #include "ash/screen_util.h"
11 #include "ash/shelf/shelf.h" 11 #include "ash/shelf/shelf.h"
12 #include "ash/shelf/shelf_layout_manager.h" 12 #include "ash/shelf/shelf_layout_manager.h"
13 #include "ash/shelf/shelf_types.h" 13 #include "ash/shelf/shelf_types.h"
14 #include "ash/shelf/shelf_widget.h" 14 #include "ash/shelf/shelf_widget.h"
15 #include "ash/shell.h" 15 #include "ash/shell.h"
16 #include "ash/shell_window_ids.h" 16 #include "ash/shell_window_ids.h"
17 #include "ash/wm/window_animations.h" 17 #include "ash/wm/window_animations.h"
18 #include "ash/wm/window_state.h" 18 #include "ash/wm/window_state.h"
19 #include "ash/wm/window_util.h" 19 #include "ash/wm/window_util.h"
20 #include "base/auto_reset.h" 20 #include "base/auto_reset.h"
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 225
226 private: 226 private:
227 void InitWidget(aura::Window* parent) { 227 void InitWidget(aura::Window* parent) {
228 views::Widget::InitParams params; 228 views::Widget::InitParams params;
229 params.type = views::Widget::InitParams::TYPE_POPUP; 229 params.type = views::Widget::InitParams::TYPE_POPUP;
230 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; 230 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
231 params.can_activate = false; 231 params.can_activate = false;
232 params.keep_on_top = true; 232 params.keep_on_top = true;
233 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 233 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
234 params.parent = parent; 234 params.parent = parent;
235 params.bounds = ScreenAsh::ConvertRectToScreen(parent, gfx::Rect()); 235 params.bounds = ScreenUtil::ConvertRectToScreen(parent, gfx::Rect());
236 params.bounds.set_width(kArrowWidth); 236 params.bounds.set_width(kArrowWidth);
237 params.bounds.set_height(kArrowHeight); 237 params.bounds.set_height(kArrowHeight);
238 // Why do we need this and can_activate = false? 238 // Why do we need this and can_activate = false?
239 set_focus_on_creation(false); 239 set_focus_on_creation(false);
240 Init(params); 240 Init(params);
241 DCHECK_EQ(GetNativeView()->GetRootWindow(), parent->GetRootWindow()); 241 DCHECK_EQ(GetNativeView()->GetRootWindow(), parent->GetRootWindow());
242 views::View* content_view = new views::View; 242 views::View* content_view = new views::View;
243 background_ = new CalloutWidgetBackground; 243 background_ = new CalloutWidgetBackground;
244 content_view->set_background(background_); 244 content_view->set_background(background_);
245 SetContentsView(content_view); 245 SetContentsView(content_view);
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 if (!shelf_ || !shelf_->shelf_widget()) 579 if (!shelf_ || !shelf_->shelf_widget())
580 return; 580 return;
581 581
582 if (in_layout_) 582 if (in_layout_)
583 return; 583 return;
584 base::AutoReset<bool> auto_reset_in_layout(&in_layout_, true); 584 base::AutoReset<bool> auto_reset_in_layout(&in_layout_, true);
585 585
586 ShelfAlignment alignment = shelf_->shelf_widget()->GetAlignment(); 586 ShelfAlignment alignment = shelf_->shelf_widget()->GetAlignment();
587 bool horizontal = alignment == SHELF_ALIGNMENT_TOP || 587 bool horizontal = alignment == SHELF_ALIGNMENT_TOP ||
588 alignment == SHELF_ALIGNMENT_BOTTOM; 588 alignment == SHELF_ALIGNMENT_BOTTOM;
589 gfx::Rect shelf_bounds = ash::ScreenAsh::ConvertRectFromScreen( 589 gfx::Rect shelf_bounds = ash::ScreenUtil::ConvertRectFromScreen(
590 panel_container_, shelf_->shelf_widget()->GetWindowBoundsInScreen()); 590 panel_container_, shelf_->shelf_widget()->GetWindowBoundsInScreen());
591 int panel_start_bounds = kPanelIdealSpacing; 591 int panel_start_bounds = kPanelIdealSpacing;
592 int panel_end_bounds = horizontal ? 592 int panel_end_bounds = horizontal ?
593 panel_container_->bounds().width() - kPanelIdealSpacing : 593 panel_container_->bounds().width() - kPanelIdealSpacing :
594 panel_container_->bounds().height() - kPanelIdealSpacing; 594 panel_container_->bounds().height() - kPanelIdealSpacing;
595 aura::Window* active_panel = NULL; 595 aura::Window* active_panel = NULL;
596 std::vector<VisiblePanelPositionInfo> visible_panels; 596 std::vector<VisiblePanelPositionInfo> visible_panels;
597 for (PanelList::iterator iter = panel_windows_.begin(); 597 for (PanelList::iterator iter = panel_windows_.begin();
598 iter != panel_windows_.end(); ++iter) { 598 iter != panel_windows_.end(); ++iter) {
599 aura::Window* panel = iter->window; 599 aura::Window* panel = iter->window;
(...skipping 23 matching lines...) Expand all
623 // correctly and the panel can be aligned above where the hidden icon is. 623 // correctly and the panel can be aligned above where the hidden icon is.
624 if (icon_bounds.width() == 0 && icon_bounds.height() == 0) 624 if (icon_bounds.width() == 0 && icon_bounds.height() == 0)
625 continue; 625 continue;
626 626
627 if (panel->HasFocus() || 627 if (panel->HasFocus() ||
628 panel->Contains( 628 panel->Contains(
629 aura::client::GetFocusClient(panel)->GetFocusedWindow())) { 629 aura::client::GetFocusClient(panel)->GetFocusedWindow())) {
630 DCHECK(!active_panel); 630 DCHECK(!active_panel);
631 active_panel = panel; 631 active_panel = panel;
632 } 632 }
633 icon_bounds = ScreenAsh::ConvertRectFromScreen(panel_container_, 633 icon_bounds = ScreenUtil::ConvertRectFromScreen(panel_container_,
634 icon_bounds); 634 icon_bounds);
635 gfx::Point icon_origin = icon_bounds.origin(); 635 gfx::Point icon_origin = icon_bounds.origin();
636 VisiblePanelPositionInfo position_info; 636 VisiblePanelPositionInfo position_info;
637 int icon_start = horizontal ? icon_origin.x() : icon_origin.y(); 637 int icon_start = horizontal ? icon_origin.x() : icon_origin.y();
638 int icon_end = icon_start + (horizontal ? icon_bounds.width() : 638 int icon_end = icon_start + (horizontal ? icon_bounds.width() :
639 icon_bounds.height()); 639 icon_bounds.height());
640 position_info.major_length = horizontal ? 640 position_info.major_length = horizontal ?
641 panel->bounds().width() : panel->bounds().height(); 641 panel->bounds().width() : panel->bounds().height();
642 position_info.min_major = std::max( 642 position_info.min_major = std::max(
643 panel_start_bounds + position_info.major_length / 2, 643 panel_start_bounds + position_info.major_length / 2,
644 icon_end - position_info.major_length / 2); 644 icon_end - position_info.major_length / 2);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 ShelfAlignment alignment = shelf_->alignment(); 789 ShelfAlignment alignment = shelf_->alignment();
790 bool horizontal = alignment == SHELF_ALIGNMENT_TOP || 790 bool horizontal = alignment == SHELF_ALIGNMENT_TOP ||
791 alignment == SHELF_ALIGNMENT_BOTTOM; 791 alignment == SHELF_ALIGNMENT_BOTTOM;
792 792
793 for (PanelList::iterator iter = panel_windows_.begin(); 793 for (PanelList::iterator iter = panel_windows_.begin();
794 iter != panel_windows_.end(); ++iter) { 794 iter != panel_windows_.end(); ++iter) {
795 aura::Window* panel = iter->window; 795 aura::Window* panel = iter->window;
796 views::Widget* callout_widget = iter->callout_widget; 796 views::Widget* callout_widget = iter->callout_widget;
797 797
798 gfx::Rect current_bounds = panel->GetBoundsInScreen(); 798 gfx::Rect current_bounds = panel->GetBoundsInScreen();
799 gfx::Rect bounds = ScreenAsh::ConvertRectToScreen(panel->parent(), 799 gfx::Rect bounds = ScreenUtil::ConvertRectToScreen(
800 panel->GetTargetBounds()); 800 panel->parent(),
801 panel->GetTargetBounds());
801 gfx::Rect icon_bounds = shelf_->GetScreenBoundsOfItemIconForWindow(panel); 802 gfx::Rect icon_bounds = shelf_->GetScreenBoundsOfItemIconForWindow(panel);
802 if (icon_bounds.IsEmpty() || !panel->layer()->GetTargetVisibility() || 803 if (icon_bounds.IsEmpty() || !panel->layer()->GetTargetVisibility() ||
803 panel == dragged_panel_) { 804 panel == dragged_panel_) {
804 callout_widget->Hide(); 805 callout_widget->Hide();
805 callout_widget->GetNativeWindow()->layer()->SetOpacity(0); 806 callout_widget->GetNativeWindow()->layer()->SetOpacity(0);
806 continue; 807 continue;
807 } 808 }
808 809
809 gfx::Rect callout_bounds = callout_widget->GetWindowBoundsInScreen(); 810 gfx::Rect callout_bounds = callout_widget->GetWindowBoundsInScreen();
810 gfx::Vector2d slide_vector = bounds.origin() - current_bounds.origin(); 811 gfx::Vector2d slide_vector = bounds.origin() - current_bounds.origin();
(...skipping 20 matching lines...) Expand all
831 case SHELF_ALIGNMENT_LEFT: 832 case SHELF_ALIGNMENT_LEFT:
832 callout_bounds.set_x(bounds.x() - callout_bounds.width()); 833 callout_bounds.set_x(bounds.x() - callout_bounds.width());
833 break; 834 break;
834 case SHELF_ALIGNMENT_RIGHT: 835 case SHELF_ALIGNMENT_RIGHT:
835 callout_bounds.set_x(bounds.right()); 836 callout_bounds.set_x(bounds.right());
836 break; 837 break;
837 case SHELF_ALIGNMENT_TOP: 838 case SHELF_ALIGNMENT_TOP:
838 callout_bounds.set_y(bounds.y() - callout_bounds.height()); 839 callout_bounds.set_y(bounds.y() - callout_bounds.height());
839 break; 840 break;
840 } 841 }
841 callout_bounds = ScreenAsh::ConvertRectFromScreen( 842 callout_bounds = ScreenUtil::ConvertRectFromScreen(
842 callout_widget->GetNativeWindow()->parent(), 843 callout_widget->GetNativeWindow()->parent(),
843 callout_bounds); 844 callout_bounds);
844 845
845 SetChildBoundsDirect(callout_widget->GetNativeWindow(), callout_bounds); 846 SetChildBoundsDirect(callout_widget->GetNativeWindow(), callout_bounds);
846 panel_container_->StackChildAbove(callout_widget->GetNativeWindow(), 847 panel_container_->StackChildAbove(callout_widget->GetNativeWindow(),
847 panel); 848 panel);
848 callout_widget->Show(); 849 callout_widget->Show();
849 850
850 ui::Layer* layer = callout_widget->GetNativeWindow()->layer(); 851 ui::Layer* layer = callout_widget->GetNativeWindow()->layer();
851 // If the panel is not over the callout position or has just become visible 852 // If the panel is not over the callout position or has just become visible
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 884
884 void PanelLayoutManager::OnKeyboardBoundsChanging( 885 void PanelLayoutManager::OnKeyboardBoundsChanging(
885 const gfx::Rect& keyboard_bounds) { 886 const gfx::Rect& keyboard_bounds) {
886 // This bounds change will have caused a change to the Shelf which does not 887 // This bounds change will have caused a change to the Shelf which does not
887 // propogate automatically to this class, so manually recalculate bounds. 888 // propogate automatically to this class, so manually recalculate bounds.
888 OnWindowResized(); 889 OnWindowResized();
889 } 890 }
890 891
891 } // namespace internal 892 } // namespace internal
892 } // namespace ash 893 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/overview/window_selector_unittest.cc ('k') | ash/wm/panels/panel_layout_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698