| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/common/wm/dock/docked_window_layout_manager.h" | 5 #include "ash/common/wm/dock/docked_window_layout_manager.h" |
| 6 | 6 |
| 7 #include "ash/common/material_design/material_design_controller.h" | 7 #include "ash/common/material_design/material_design_controller.h" |
| 8 #include "ash/common/shelf/shelf_constants.h" | 8 #include "ash/common/shelf/shelf_constants.h" |
| 9 #include "ash/common/shelf/wm_shelf.h" | 9 #include "ash/common/shelf/wm_shelf.h" |
| 10 #include "ash/common/shelf/wm_shelf_observer.h" | 10 #include "ash/common/shelf/wm_shelf_observer.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 | 48 |
| 49 class DockedBackgroundWidget : public views::Widget, | 49 class DockedBackgroundWidget : public views::Widget, |
| 50 public BackgroundAnimatorDelegate, | 50 public BackgroundAnimatorDelegate, |
| 51 public WmShelfObserver { | 51 public WmShelfObserver { |
| 52 public: | 52 public: |
| 53 explicit DockedBackgroundWidget(DockedWindowLayoutManager* manager) | 53 explicit DockedBackgroundWidget(DockedWindowLayoutManager* manager) |
| 54 : manager_(manager), | 54 : manager_(manager), |
| 55 alignment_(DOCKED_ALIGNMENT_NONE), | 55 alignment_(DOCKED_ALIGNMENT_NONE), |
| 56 background_animator_(this, 0, GetShelfConstant(SHELF_BACKGROUND_ALPHA)), | 56 background_animator_(this, 0, GetShelfConstant(SHELF_BACKGROUND_ALPHA)), |
| 57 alpha_(0), | 57 alpha_(0), |
| 58 // TODO(bruthig): Remove opaque_background_. |
| 58 opaque_background_(ui::LAYER_SOLID_COLOR), | 59 opaque_background_(ui::LAYER_SOLID_COLOR), |
| 59 visible_background_type_(manager_->shelf()->GetBackgroundType()), | 60 visible_background_type_(manager_->shelf()->GetBackgroundType()), |
| 60 visible_background_change_type_(BACKGROUND_CHANGE_IMMEDIATE) { | 61 visible_background_change_type_(BACKGROUND_CHANGE_IMMEDIATE) { |
| 61 manager_->shelf()->AddObserver(this); | 62 manager_->shelf()->AddObserver(this); |
| 62 InitWidget(manager_->dock_container()); | 63 InitWidget(manager_->dock_container()); |
| 63 } | 64 } |
| 64 | 65 |
| 65 ~DockedBackgroundWidget() override { | 66 ~DockedBackgroundWidget() override { |
| 66 manager_->shelf()->RemoveObserver(this); | 67 manager_->shelf()->RemoveObserver(this); |
| 67 } | 68 } |
| 68 | 69 |
| 69 // Sets widget bounds and sizes opaque background layer to fill the widget. | 70 // Sets widget bounds and sizes opaque background layer to fill the widget. |
| 70 void SetBackgroundBounds(const gfx::Rect& bounds, DockedAlignment alignment) { | 71 void SetBackgroundBounds(const gfx::Rect& bounds, DockedAlignment alignment) { |
| 71 SetBounds(bounds); | 72 SetBounds(bounds); |
| 73 // TODO(bruthig): Remove opaque_background_. |
| 72 opaque_background_.SetBounds(gfx::Rect(bounds.size())); | 74 opaque_background_.SetBounds(gfx::Rect(bounds.size())); |
| 73 alignment_ = alignment; | 75 alignment_ = alignment; |
| 74 } | 76 } |
| 75 | 77 |
| 76 private: | 78 private: |
| 77 // views::Widget: | 79 // views::Widget: |
| 78 void OnNativeWidgetVisibilityChanged(bool visible) override { | 80 void OnNativeWidgetVisibilityChanged(bool visible) override { |
| 79 views::Widget::OnNativeWidgetVisibilityChanged(visible); | 81 views::Widget::OnNativeWidgetVisibilityChanged(visible); |
| 80 UpdateBackground(); | 82 UpdateBackground(); |
| 81 } | 83 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 107 ? 0 | 109 ? 0 |
| 108 : shelf_background.width() - 1, | 110 : shelf_background.width() - 1, |
| 109 0, 1, shelf_background.height(), | 111 0, 1, shelf_background.height(), |
| 110 alignment_ == DOCKED_ALIGNMENT_LEFT ? 0 : shelf_background.width(), 0, | 112 alignment_ == DOCKED_ALIGNMENT_LEFT ? 0 : shelf_background.width(), 0, |
| 111 local_window_bounds.width() - shelf_background.width(), | 113 local_window_bounds.width() - shelf_background.width(), |
| 112 local_window_bounds.height(), false, paint); | 114 local_window_bounds.height(), false, paint); |
| 113 } | 115 } |
| 114 } | 116 } |
| 115 | 117 |
| 116 // BackgroundAnimatorDelegate: | 118 // BackgroundAnimatorDelegate: |
| 117 void UpdateBackground(int alpha) override { | 119 void UpdateBackground(BackgroundAnimator* animator, int alpha) override { |
| 118 alpha_ = alpha; | 120 alpha_ = alpha; |
| 119 SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size())); | 121 SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size())); |
| 120 } | 122 } |
| 121 | 123 |
| 122 // ShelfLayoutManagerObserver: | 124 // ShelfLayoutManagerObserver: |
| 123 void OnBackgroundUpdated(ShelfBackgroundType background_type, | 125 void OnBackgroundUpdated(ShelfBackgroundType background_type, |
| 124 BackgroundAnimatorChangeType change_type) override { | 126 BackgroundAnimatorChangeType change_type) override { |
| 125 // Sets the background type. Starts an animation to transition to | 127 // Sets the background type. Starts an animation to transition to |
| 126 // |background_type| if the widget is visible. If the widget is not visible, | 128 // |background_type| if the widget is visible. If the widget is not visible, |
| 127 // the animation is postponed till the widget becomes visible. | 129 // the animation is postponed till the widget becomes visible. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 138 params.keep_on_top = false; | 140 params.keep_on_top = false; |
| 139 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 141 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 140 params.accept_events = false; | 142 params.accept_events = false; |
| 141 set_focus_on_creation(false); | 143 set_focus_on_creation(false); |
| 142 parent->GetRootWindowController()->ConfigureWidgetInitParamsForContainer( | 144 parent->GetRootWindowController()->ConfigureWidgetInitParamsForContainer( |
| 143 this, parent->GetShellWindowId(), ¶ms); | 145 this, parent->GetShellWindowId(), ¶ms); |
| 144 Init(params); | 146 Init(params); |
| 145 SetVisibilityChangedAnimationsEnabled(false); | 147 SetVisibilityChangedAnimationsEnabled(false); |
| 146 WmWindow* wm_window = WmLookup::Get()->GetWindowForWidget(this); | 148 WmWindow* wm_window = WmLookup::Get()->GetWindowForWidget(this); |
| 147 wm_window->SetLockedToRoot(true); | 149 wm_window->SetLockedToRoot(true); |
| 150 // TODO(bruthig): Remove opaque_background_. |
| 148 opaque_background_.SetColor(SK_ColorBLACK); | 151 opaque_background_.SetColor(SK_ColorBLACK); |
| 149 opaque_background_.SetBounds(gfx::Rect(GetWindowBoundsInScreen().size())); | 152 opaque_background_.SetBounds(gfx::Rect(GetWindowBoundsInScreen().size())); |
| 150 opaque_background_.SetOpacity(0.0f); | 153 opaque_background_.SetOpacity(0.0f); |
| 151 wm_window->GetLayer()->Add(&opaque_background_); | 154 wm_window->GetLayer()->Add(&opaque_background_); |
| 152 | 155 |
| 153 if (!MaterialDesignController::IsShelfMaterial()) { | 156 if (!MaterialDesignController::IsShelfMaterial()) { |
| 154 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 157 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| 155 gfx::ImageSkia shelf_background = | 158 gfx::ImageSkia shelf_background = |
| 156 *rb.GetImageSkiaNamed(IDR_ASH_SHELF_BACKGROUND); | 159 *rb.GetImageSkiaNamed(IDR_ASH_SHELF_BACKGROUND); |
| 157 shelf_background_left_ = gfx::ImageSkiaOperations::CreateRotatedImage( | 160 shelf_background_left_ = gfx::ImageSkiaOperations::CreateRotatedImage( |
| 158 shelf_background, SkBitmapOperations::ROTATION_90_CW); | 161 shelf_background, SkBitmapOperations::ROTATION_90_CW); |
| 159 shelf_background_right_ = gfx::ImageSkiaOperations::CreateRotatedImage( | 162 shelf_background_right_ = gfx::ImageSkiaOperations::CreateRotatedImage( |
| 160 shelf_background, SkBitmapOperations::ROTATION_270_CW); | 163 shelf_background, SkBitmapOperations::ROTATION_270_CW); |
| 161 } | 164 } |
| 162 | 165 |
| 163 // This background should be explicitly stacked below any windows already in | 166 // This background should be explicitly stacked below any windows already in |
| 164 // the dock, otherwise the z-order is set by the order in which windows were | 167 // the dock, otherwise the z-order is set by the order in which windows were |
| 165 // added to the container, and UpdateStacking only manages user windows, not | 168 // added to the container, and UpdateStacking only manages user windows, not |
| 166 // the background widget. | 169 // the background widget. |
| 167 parent->StackChildAtBottom(wm_window); | 170 parent->StackChildAtBottom(wm_window); |
| 168 } | 171 } |
| 169 | 172 |
| 173 // TODO(bruthig): Remove opaque_background_ => and this entire method. |
| 170 // Transitions to |visible_background_type_| if the widget is visible and to | 174 // Transitions to |visible_background_type_| if the widget is visible and to |
| 171 // SHELF_BACKGROUND_DEFAULT if it is not. | 175 // SHELF_BACKGROUND_DEFAULT if it is not. |
| 172 void UpdateBackground() { | 176 void UpdateBackground() { |
| 173 ShelfBackgroundType background_type = | 177 ShelfBackgroundType background_type = |
| 174 IsVisible() ? visible_background_type_ : SHELF_BACKGROUND_DEFAULT; | 178 IsVisible() ? visible_background_type_ : SHELF_BACKGROUND_DEFAULT; |
| 175 BackgroundAnimatorChangeType change_type = | 179 BackgroundAnimatorChangeType change_type = |
| 176 IsVisible() ? visible_background_change_type_ | 180 IsVisible() ? visible_background_change_type_ |
| 177 : BACKGROUND_CHANGE_IMMEDIATE; | 181 : BACKGROUND_CHANGE_IMMEDIATE; |
| 178 | 182 |
| 179 float target_opacity = | 183 float target_opacity = |
| (...skipping 13 matching lines...) Expand all Loading... |
| 193 // See also ShelfWidget::SetPaintsBackground. | 197 // See also ShelfWidget::SetPaintsBackground. |
| 194 background_animator_.SetPaintsBackground( | 198 background_animator_.SetPaintsBackground( |
| 195 background_type != SHELF_BACKGROUND_DEFAULT, change_type); | 199 background_type != SHELF_BACKGROUND_DEFAULT, change_type); |
| 196 SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size())); | 200 SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size())); |
| 197 } | 201 } |
| 198 | 202 |
| 199 DockedWindowLayoutManager* manager_; | 203 DockedWindowLayoutManager* manager_; |
| 200 | 204 |
| 201 DockedAlignment alignment_; | 205 DockedAlignment alignment_; |
| 202 | 206 |
| 207 // TODO(bruthig): Replace BackgroundAnimator with ShelfBackgroundAnimator. |
| 203 // The animator for the background transitions. | 208 // The animator for the background transitions. |
| 204 BackgroundAnimator background_animator_; | 209 BackgroundAnimator background_animator_; |
| 205 | 210 |
| 206 // The alpha to use for drawing image assets covering the docked background. | 211 // The alpha to use for drawing image assets covering the docked background. |
| 207 int alpha_; | 212 int alpha_; |
| 208 | 213 |
| 214 // TODO(bruthig): Remove opaque_background_. |
| 209 // Solid black background that can be made fully opaque. | 215 // Solid black background that can be made fully opaque. |
| 210 ui::Layer opaque_background_; | 216 ui::Layer opaque_background_; |
| 211 | 217 |
| 212 // Backgrounds created from shelf background by 90 or 270 degree rotation. | 218 // Backgrounds created from shelf background by 90 or 270 degree rotation. |
| 213 // TODO(tdanderson): These members can be removed once the material design | 219 // TODO(tdanderson): These members can be removed once the material design |
| 214 // shelf is enabled by default. See crbug.com/614453. | 220 // shelf is enabled by default. See crbug.com/614453. |
| 215 gfx::ImageSkia shelf_background_left_; | 221 gfx::ImageSkia shelf_background_left_; |
| 216 gfx::ImageSkia shelf_background_right_; | 222 gfx::ImageSkia shelf_background_right_; |
| 217 | 223 |
| 218 // The background type to use when the widget is visible. When not visible, | 224 // The background type to use when the widget is visible. When not visible, |
| (...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1326 | 1332 |
| 1327 void DockedWindowLayoutManager::OnKeyboardBoundsChanging( | 1333 void DockedWindowLayoutManager::OnKeyboardBoundsChanging( |
| 1328 const gfx::Rect& keyboard_bounds) { | 1334 const gfx::Rect& keyboard_bounds) { |
| 1329 // This bounds change will have caused a change to the Shelf which does not | 1335 // This bounds change will have caused a change to the Shelf which does not |
| 1330 // propagate automatically to this class, so manually recalculate bounds. | 1336 // propagate automatically to this class, so manually recalculate bounds. |
| 1331 Relayout(); | 1337 Relayout(); |
| 1332 UpdateDockBounds(DockedWindowLayoutManagerObserver::KEYBOARD_BOUNDS_CHANGING); | 1338 UpdateDockBounds(DockedWindowLayoutManagerObserver::KEYBOARD_BOUNDS_CHANGING); |
| 1333 } | 1339 } |
| 1334 | 1340 |
| 1335 } // namespace ash | 1341 } // namespace ash |
| OLD | NEW |