Index: ash/desktop_background/desktop_background_controller.cc |
diff --git a/ash/desktop_background/desktop_background_controller.cc b/ash/desktop_background/desktop_background_controller.cc |
index 8575c1e0176941e4d0df8e02ec8923f397ce1539..9639196b2bcac06f5c3181c3bede5658078a6e07 100644 |
--- a/ash/desktop_background/desktop_background_controller.cc |
+++ b/ash/desktop_background/desktop_background_controller.cc |
@@ -18,6 +18,7 @@ |
#include "base/synchronization/cancellation_flag.h" |
#include "base/threading/worker_pool.h" |
#include "content/public/browser/browser_thread.h" |
+#include "grit/ash_wallpaper_resources.h" |
#include "ui/aura/root_window.h" |
#include "ui/aura/window.h" |
#include "ui/base/resource/resource_bundle.h" |
@@ -43,6 +44,24 @@ internal::RootWindowLayoutManager* GetRootWindowLayoutManager( |
} |
} // namespace |
+#if defined(GOOGLE_CHROME_BUILD) |
+const WallpaperInfo kDefaultLargeWallpaper = |
+ { IDR_AURA_WALLPAPERS_2_LANDSCAPE8_LARGE, WALLPAPER_LAYOUT_CENTER_CROPPED }; |
+const WallpaperInfo kDefaultSmallWallpaper = |
+ { IDR_AURA_WALLPAPERS_2_LANDSCAPE8_SMALL, WALLPAPER_LAYOUT_CENTER }; |
+const WallpaperInfo kGuestLargeWallpaper = |
+ { IDR_AURA_WALLPAPERS_2_LANDSCAPE7_LARGE, WALLPAPER_LAYOUT_CENTER_CROPPED }; |
+const WallpaperInfo kGuestSmallWallpaper = |
+ { IDR_AURA_WALLPAPERS_2_LANDSCAPE7_SMALL, WALLPAPER_LAYOUT_CENTER }; |
+#else |
+const WallpaperInfo kDefaultLargeWallpaper = |
+ { IDR_AURA_WALLPAPERS_5_GRADIENT5_LARGE, WALLPAPER_LAYOUT_TILE }; |
+const WallpaperInfo kDefaultSmallWallpaper = |
+ { IDR_AURA_WALLPAPERS_5_GRADIENT5_SMALL, WALLPAPER_LAYOUT_TILE }; |
+const WallpaperInfo kGuestLargeWallpaper = kDefaultLargeWallpaper; |
+const WallpaperInfo kGuestSmallWallpaper = kDefaultSmallWallpaper; |
+#endif |
+ |
const int kSmallWallpaperMaxWidth = 1366; |
const int kSmallWallpaperMaxHeight = 800; |
const int kLargeWallpaperMaxWidth = 2560; |
@@ -50,52 +69,40 @@ const int kLargeWallpaperMaxHeight = 1700; |
// Stores the current wallpaper data. |
struct DesktopBackgroundController::WallpaperData { |
- WallpaperData(int index, WallpaperResolution resolution) |
- : is_default_wallpaper(true), |
- wallpaper_index(index), |
- wallpaper_layout(GetWallpaperViewInfo(index, resolution).layout), |
+ explicit WallpaperData(const WallpaperInfo& info) |
+ : wallpaper_info(info), |
wallpaper_image(*(ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
- GetWallpaperViewInfo(index, resolution).id).ToImageSkia())) { |
+ info.idr).ToImageSkia())) { |
} |
- WallpaperData(WallpaperLayout layout, const gfx::ImageSkia& image) |
- : is_default_wallpaper(false), |
- wallpaper_index(-1), |
- wallpaper_layout(layout), |
+ WallpaperData(const WallpaperInfo& info, const gfx::ImageSkia& image) |
+ : wallpaper_info(info), |
wallpaper_image(image) { |
} |
- const bool is_default_wallpaper; |
- const int wallpaper_index; |
- const WallpaperLayout wallpaper_layout; |
+ const WallpaperInfo wallpaper_info; |
const gfx::ImageSkia wallpaper_image; |
}; |
-// DesktopBackgroundController::WallpaperOperation wraps background wallpaper |
+// DesktopBackgroundController::WallpaperLoader wraps background wallpaper |
// loading. |
-class DesktopBackgroundController::WallpaperOperation |
+class DesktopBackgroundController::WallpaperLoader |
: public base::RefCountedThreadSafe< |
- DesktopBackgroundController::WallpaperOperation> { |
+ DesktopBackgroundController::WallpaperLoader> { |
public: |
- WallpaperOperation(int index, WallpaperResolution resolution) |
- : index_(index), |
- resolution_(resolution) { |
- } |
- |
- static void Run(scoped_refptr<WallpaperOperation> wo) { |
- wo->LoadingWallpaper(); |
+ explicit WallpaperLoader(const WallpaperInfo& info) |
+ : info_(info) { |
} |
- void LoadingWallpaper() { |
- if (cancel_flag_.IsSet()) |
- return; |
- wallpaper_data_.reset(new WallpaperData(index_, resolution_)); |
+ static void LoadOnWorkerPoolThread(scoped_refptr<WallpaperLoader> wl) { |
+ DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ wl->LoadingWallpaper(); |
} |
void Cancel() { |
cancel_flag_.Set(); |
} |
- int index() const { |
- return index_; |
+ int idr() const { |
+ return info_.idr; |
} |
WallpaperData* ReleaseWallpaperData() { |
@@ -104,19 +111,23 @@ class DesktopBackgroundController::WallpaperOperation |
private: |
friend class base::RefCountedThreadSafe< |
- DesktopBackgroundController::WallpaperOperation>; |
+ DesktopBackgroundController::WallpaperLoader>; |
- ~WallpaperOperation() {} |
+ void LoadingWallpaper() { |
+ if (cancel_flag_.IsSet()) |
+ return; |
+ wallpaper_data_.reset(new WallpaperData(info_)); |
+ } |
+ |
+ ~WallpaperLoader() {} |
base::CancellationFlag cancel_flag_; |
scoped_ptr<WallpaperData> wallpaper_data_; |
- const int index_; |
- |
- const WallpaperResolution resolution_; |
+ const WallpaperInfo info_; |
- DISALLOW_COPY_AND_ASSIGN(WallpaperOperation); |
+ DISALLOW_COPY_AND_ASSIGN(WallpaperLoader); |
}; |
DesktopBackgroundController::DesktopBackgroundController() |
@@ -148,8 +159,8 @@ void DesktopBackgroundController::RemoveObserver( |
WallpaperLayout DesktopBackgroundController::GetWallpaperLayout() const { |
if (current_wallpaper_.get()) |
- return current_wallpaper_->wallpaper_layout; |
- return CENTER_CROPPED; |
+ return current_wallpaper_->wallpaper_info.layout; |
+ return WALLPAPER_LAYOUT_CENTER_CROPPED; |
} |
gfx::ImageSkia DesktopBackgroundController::GetCurrentWallpaperImage() { |
@@ -158,6 +169,15 @@ gfx::ImageSkia DesktopBackgroundController::GetCurrentWallpaperImage() { |
return GetWallpaper(); |
} |
+int DesktopBackgroundController::GetWallpaperIDR() const { |
+ if (wallpaper_loader_.get()) |
+ return wallpaper_loader_->idr(); |
+ else if (current_wallpaper_.get()) |
+ return current_wallpaper_->wallpaper_info.idr; |
+ else |
+ return -1; |
+} |
+ |
void DesktopBackgroundController::OnRootWindowAdded( |
aura::RootWindow* root_window) { |
// Handle resolution change for "built-in" images." |
@@ -168,69 +188,30 @@ void DesktopBackgroundController::OnRootWindowAdded( |
// small screen. |
if (kSmallWallpaperMaxWidth < root_window_size.width() || |
kSmallWallpaperMaxHeight < root_window_size.height()) { |
- if (current_wallpaper_->is_default_wallpaper) { |
- ReloadDefaultWallpaper(); |
- } else { |
- ash::Shell::GetInstance()->user_wallpaper_delegate()-> |
- UpdateWallpaper(); |
- } |
+ current_wallpaper_.reset(NULL); |
+ ash::Shell::GetInstance()->user_wallpaper_delegate()-> |
+ UpdateWallpaper(); |
} |
} |
InstallDesktopController(root_window); |
} |
-void DesktopBackgroundController::CacheDefaultWallpaper(int index) { |
- DCHECK(index >= 0); |
- |
- WallpaperResolution resolution = GetAppropriateResolution(); |
- scoped_refptr<WallpaperOperation> wallpaper_op = |
- new WallpaperOperation(index, resolution); |
- base::WorkerPool::PostTask( |
- FROM_HERE, |
- base::Bind(&WallpaperOperation::Run, wallpaper_op), |
- true); |
-} |
- |
-void DesktopBackgroundController::SetDefaultWallpaper(int index) { |
- // We should not change background when index is invalid. For instance, at |
- // login screen or stub_user login. |
- if (index == GetInvalidWallpaperIndex()) { |
- CreateEmptyWallpaper(); |
- return; |
- } else if (index == GetSolidColorIndex()) { |
- SetDesktopBackgroundSolidColorMode(kLoginWallpaperColor); |
- return; |
- } |
- |
- // Prevents loading of the same wallpaper as the currently loading/loaded |
- // one. |
- if ((wallpaper_op_.get() && wallpaper_op_->index() == index) || |
- (current_wallpaper_.get() && |
- current_wallpaper_->wallpaper_index == index)) { |
- return; |
- } |
+void DesktopBackgroundController::SetDefaultWallpaper( |
+ const WallpaperInfo& info) { |
+ DCHECK_NE(GetWallpaperIDR(), info.idr); |
CancelPendingWallpaperOperation(); |
- |
- WallpaperResolution resolution = GetAppropriateResolution(); |
- |
- wallpaper_op_ = new WallpaperOperation(index, resolution); |
+ wallpaper_loader_ = new WallpaperLoader(info); |
base::WorkerPool::PostTaskAndReply( |
FROM_HERE, |
- base::Bind(&WallpaperOperation::Run, wallpaper_op_), |
+ base::Bind(&WallpaperLoader::LoadOnWorkerPoolThread, wallpaper_loader_), |
base::Bind(&DesktopBackgroundController::OnWallpaperLoadCompleted, |
weak_ptr_factory_.GetWeakPtr(), |
- wallpaper_op_), |
+ wallpaper_loader_), |
true /* task_is_slow */); |
} |
-void DesktopBackgroundController::ReloadDefaultWallpaper() { |
- int index = current_wallpaper_->wallpaper_index; |
- current_wallpaper_.reset(NULL); |
- SetDefaultWallpaper(index); |
-} |
- |
void DesktopBackgroundController::SetCustomWallpaper( |
const gfx::ImageSkia& wallpaper, |
WallpaperLayout layout) { |
@@ -240,7 +221,8 @@ void DesktopBackgroundController::SetCustomWallpaper( |
return; |
} |
- current_wallpaper_.reset(new WallpaperData(layout, wallpaper)); |
+ WallpaperInfo info = { -1, layout }; |
+ current_wallpaper_.reset(new WallpaperData(info, wallpaper)); |
FOR_EACH_OBSERVER(DesktopBackgroundControllerObserver, observers_, |
OnWallpaperDataChanged()); |
SetDesktopBackgroundImageMode(); |
@@ -248,8 +230,8 @@ void DesktopBackgroundController::SetCustomWallpaper( |
void DesktopBackgroundController::CancelPendingWallpaperOperation() { |
// Set canceled flag of previous request to skip unneeded loading. |
- if (wallpaper_op_.get()) |
- wallpaper_op_->Cancel(); |
+ if (wallpaper_loader_.get()) |
+ wallpaper_loader_->Cancel(); |
// Cancel reply callback for previous request. |
weak_ptr_factory_.InvalidateWeakPtrs(); |
@@ -270,14 +252,14 @@ void DesktopBackgroundController::CreateEmptyWallpaper() { |
WallpaperResolution DesktopBackgroundController::GetAppropriateResolution() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- WallpaperResolution resolution = SMALL; |
+ WallpaperResolution resolution = WALLPAPER_RESOLUTION_SMALL; |
Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
for (Shell::RootWindowList::iterator iter = root_windows.begin(); |
iter != root_windows.end(); ++iter) { |
gfx::Size root_window_size = (*iter)->GetHostSize(); |
if (root_window_size.width() > kSmallWallpaperMaxWidth || |
root_window_size.height() > kSmallWallpaperMaxHeight) { |
- resolution = LARGE; |
+ resolution = WALLPAPER_RESOLUTION_LARGE; |
} |
} |
return resolution; |
@@ -312,15 +294,15 @@ void DesktopBackgroundController::SetDesktopBackgroundImageMode() { |
} |
void DesktopBackgroundController::OnWallpaperLoadCompleted( |
- scoped_refptr<WallpaperOperation> wo) { |
- current_wallpaper_.reset(wo->ReleaseWallpaperData()); |
+ scoped_refptr<WallpaperLoader> wl) { |
+ current_wallpaper_.reset(wl->ReleaseWallpaperData()); |
FOR_EACH_OBSERVER(DesktopBackgroundControllerObserver, observers_, |
OnWallpaperDataChanged()); |
SetDesktopBackgroundImageMode(); |
- DCHECK(wo.get() == wallpaper_op_.get()); |
- wallpaper_op_ = NULL; |
+ DCHECK(wl.get() == wallpaper_loader_.get()); |
+ wallpaper_loader_ = NULL; |
} |
void DesktopBackgroundController::NotifyAnimationFinished() { |