Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/desktop_background/desktop_background_controller.h" | 5 #include "ash/desktop_background/desktop_background_controller.h" |
| 6 | 6 |
| 7 #include "ash/desktop_background/desktop_background_view.h" | 7 #include "ash/desktop_background/desktop_background_view.h" |
| 8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
| 9 #include "ash/shell_factory.h" | 9 #include "ash/shell_factory.h" |
| 10 #include "ash/shell_window_ids.h" | 10 #include "ash/shell_window_ids.h" |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 118 return GetWallpaper(); | 118 return GetWallpaper(); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void DesktopBackgroundController::OnRootWindowAdded( | 121 void DesktopBackgroundController::OnRootWindowAdded( |
| 122 aura::RootWindow* root_window) { | 122 aura::RootWindow* root_window) { |
| 123 switch (desktop_background_mode_) { | 123 switch (desktop_background_mode_) { |
| 124 case BACKGROUND_IMAGE: | 124 case BACKGROUND_IMAGE: |
| 125 if (current_wallpaper_.get()) { | 125 if (current_wallpaper_.get()) { |
| 126 SetDesktopBackgroundImage(root_window); | 126 SetDesktopBackgroundImage(root_window); |
| 127 } else { | 127 } else { |
| 128 internal::CreateDesktopBackground(root_window); | 128 internal::CreateDesktopBackground(root_window, |
| 129 ash::internal::kShellWindowId_DesktopBackgroundContainer); | |
| 129 } | 130 } |
| 130 break; | 131 break; |
| 131 case BACKGROUND_SOLID_COLOR: | 132 case BACKGROUND_SOLID_COLOR: |
| 132 SetDesktopBackgroundSolidColorMode(background_color_); | 133 SetDesktopBackgroundSolidColorMode(background_color_); |
| 133 break; | 134 break; |
| 134 } | 135 } |
| 135 } | 136 } |
| 136 | 137 |
| 137 void DesktopBackgroundController::SetDefaultWallpaper(int index) { | 138 void DesktopBackgroundController::SetDefaultWallpaper(int index) { |
| 138 // We should not change background when index is invalid. For instance, at | 139 // We should not change background when index is invalid. For instance, at |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 183 // Set a solid black background. | 184 // Set a solid black background. |
| 184 // TODO(derat): Remove this in favor of having the compositor only clear the | 185 // TODO(derat): Remove this in favor of having the compositor only clear the |
| 185 // viewport when there are regions not covered by a layer: | 186 // viewport when there are regions not covered by a layer: |
| 186 // http://crbug.com/113445 | 187 // http://crbug.com/113445 |
| 187 current_wallpaper_.reset(NULL); | 188 current_wallpaper_.reset(NULL); |
| 188 background_color_ = color; | 189 background_color_ = color; |
| 189 desktop_background_mode_ = BACKGROUND_SOLID_COLOR; | 190 desktop_background_mode_ = BACKGROUND_SOLID_COLOR; |
| 190 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 191 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
| 191 for (Shell::RootWindowList::iterator iter = root_windows.begin(); | 192 for (Shell::RootWindowList::iterator iter = root_windows.begin(); |
| 192 iter != root_windows.end(); ++iter) { | 193 iter != root_windows.end(); ++iter) { |
| 194 aura::RootWindow* root_window = *iter; | |
| 195 | |
| 196 SetColorLayerForContainer(color, root_window, | |
| 197 internal::kShellWindowId_DesktopBackgroundContainer); | |
| 198 } | |
| 199 } | |
| 200 | |
| 201 void DesktopBackgroundController::SetColorLayerForContainer( | |
| 202 SkColor color, | |
| 203 aura::RootWindow* root_window, | |
| 204 int container_id) { | |
| 205 | |
|
sky
2012/07/20 23:57:04
nit: remove newline.
Denis Kuznetsov (DE-MUC)
2012/07/23 14:01:08
Done.
| |
| 193 ui::Layer* background_layer = new ui::Layer(ui::LAYER_SOLID_COLOR); | 206 ui::Layer* background_layer = new ui::Layer(ui::LAYER_SOLID_COLOR); |
| 194 background_layer->SetColor(color); | 207 background_layer->SetColor(color); |
| 195 aura::RootWindow* root_window = *iter; | 208 |
| 196 Shell::GetContainer( | 209 Shell::GetContainer(root_window,container_id)-> |
| 197 root_window, | |
| 198 internal::kShellWindowId_DesktopBackgroundContainer)-> | |
| 199 layer()->Add(background_layer); | 210 layer()->Add(background_layer); |
| 200 GetRootWindowLayoutManager(root_window)->SetBackgroundLayer( | 211 GetRootWindowLayoutManager(root_window)->SetBackgroundLayer( |
| 201 background_layer); | 212 background_layer, |
| 202 GetRootWindowLayoutManager(root_window)->SetBackgroundWidget(NULL); | 213 container_id); |
| 203 } | 214 GetRootWindowLayoutManager(root_window)->SetBackgroundWidget( |
| 215 NULL, | |
| 216 container_id); | |
| 204 } | 217 } |
| 205 | 218 |
| 206 void DesktopBackgroundController::SetDesktopBackgroundImage( | 219 void DesktopBackgroundController::SetDesktopBackgroundImage( |
| 207 aura::RootWindow* root_window) { | 220 aura::RootWindow* root_window) { |
| 208 GetRootWindowLayoutManager(root_window)->SetBackgroundLayer(NULL); | 221 GetRootWindowLayoutManager(root_window)->SetBackgroundLayer(NULL, |
| 222 internal::kShellWindowId_DesktopBackgroundContainer); | |
| 209 if (current_wallpaper_.get() && | 223 if (current_wallpaper_.get() && |
| 210 !current_wallpaper_->wallpaper_image.empty()) | 224 !current_wallpaper_->wallpaper_image.empty()) |
| 211 internal::CreateDesktopBackground(root_window); | 225 internal::CreateDesktopBackground(root_window, |
| 226 ash::internal::kShellWindowId_DesktopBackgroundContainer); | |
| 212 } | 227 } |
| 213 | 228 |
| 214 void DesktopBackgroundController::UpdateDesktopBackgroundImageMode() { | 229 void DesktopBackgroundController::UpdateDesktopBackgroundImageMode() { |
| 215 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 230 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
| 216 | 231 |
| 217 for (Shell::RootWindowList::iterator iter = root_windows.begin(); | 232 for (Shell::RootWindowList::iterator iter = root_windows.begin(); |
| 218 iter != root_windows.end(); ++iter) { | 233 iter != root_windows.end(); ++iter) { |
| 219 SetDesktopBackgroundImage(*iter); | 234 SetDesktopBackgroundImage(*iter); |
| 220 } | 235 } |
| 221 desktop_background_mode_ = BACKGROUND_IMAGE; | 236 desktop_background_mode_ = BACKGROUND_IMAGE; |
| 222 } | 237 } |
| 223 | 238 |
| 224 void DesktopBackgroundController::OnWallpaperLoadCompleted( | 239 void DesktopBackgroundController::OnWallpaperLoadCompleted( |
| 225 scoped_refptr<WallpaperOperation> wo) { | 240 scoped_refptr<WallpaperOperation> wo) { |
| 226 current_wallpaper_.reset(wo->ReleaseWallpaperData()); | 241 current_wallpaper_.reset(wo->ReleaseWallpaperData()); |
| 227 | 242 |
| 228 UpdateDesktopBackgroundImageMode(); | 243 UpdateDesktopBackgroundImageMode(); |
| 229 | 244 |
| 230 DCHECK(wo.get() == wallpaper_op_.get()); | 245 DCHECK(wo.get() == wallpaper_op_.get()); |
| 231 wallpaper_op_ = NULL; | 246 wallpaper_op_ = NULL; |
| 232 } | 247 } |
| 233 | 248 |
| 234 void DesktopBackgroundController::CreateEmptyWallpaper() { | 249 void DesktopBackgroundController::CreateEmptyWallpaper() { |
| 235 current_wallpaper_.reset(NULL); | 250 current_wallpaper_.reset(NULL); |
| 236 desktop_background_mode_ = BACKGROUND_IMAGE; | 251 desktop_background_mode_ = BACKGROUND_IMAGE; |
| 237 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 252 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
| 238 for (Shell::RootWindowList::iterator iter = root_windows.begin(); | 253 for (Shell::RootWindowList::iterator iter = root_windows.begin(); |
| 239 iter != root_windows.end(); ++iter) { | 254 iter != root_windows.end(); ++iter) { |
| 240 internal::CreateDesktopBackground(*iter); | 255 internal::CreateDesktopBackground(*iter, |
| 256 ash::internal::kShellWindowId_DesktopBackgroundContainer); | |
| 241 } | 257 } |
| 242 } | 258 } |
| 243 | 259 |
| 260 void DesktopBackgroundController::CreateLockScreenDesktops() { | |
|
bshe
2012/07/23 00:19:36
I am guessing you plan use the new container to re
Denis Kuznetsov (DE-MUC)
2012/07/23 14:01:09
Yes, this is the plan. However, there is an issue
bshe
2012/07/23 14:36:28
Got it. I will drop the priority of post processed
| |
| 261 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | |
| 262 for (Shell::RootWindowList::iterator iter = root_windows.begin(); | |
| 263 iter != root_windows.end(); ++iter) { | |
| 264 if (BACKGROUND_IMAGE == desktop_background_mode_) { | |
|
sky
2012/07/20 23:57:04
spacing is off in the rest of this function.
Denis Kuznetsov (DE-MUC)
2012/07/23 14:01:09
Done.
| |
| 265 internal::CreateDesktopBackground(*iter, | |
| 266 ash::internal::kShellWindowId_LockScreenBackgroundContainer); | |
| 267 } else if (BACKGROUND_SOLID_COLOR == desktop_background_mode_) { | |
| 268 SetColorLayerForContainer(background_color_, *iter, | |
| 269 ash::internal::kShellWindowId_LockScreenBackgroundContainer); | |
| 270 } else { | |
| 271 // If something went wrong, still use some default color to | |
| 272 // hide user's windows. | |
| 273 SetColorLayerForContainer(SK_ColorGRAY, *iter, | |
| 274 ash::internal::kShellWindowId_LockScreenBackgroundContainer); | |
| 275 } | |
| 276 } | |
| 277 } | |
| 278 | |
| 279 void DesktopBackgroundController::RemoveLockScreenDesktops() { | |
| 280 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | |
|
sky
2012/07/20 23:57:04
spacing is off.
Denis Kuznetsov (DE-MUC)
2012/07/23 14:01:09
Done.
| |
| 281 for (Shell::RootWindowList::iterator iter = root_windows.begin(); | |
| 282 iter != root_windows.end(); ++iter) { | |
| 283 GetRootWindowLayoutManager(*iter)->DropBackgroundForContainer( | |
| 284 ash::internal::kShellWindowId_LockScreenBackgroundContainer); | |
| 285 } | |
| 286 } | |
| 287 | |
| 288 | |
| 244 } // namespace ash | 289 } // namespace ash |
| OLD | NEW |