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 |