diff options
author | bshe@chromium.org <bshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-03 20:45:53 +0000 |
---|---|---|
committer | bshe@chromium.org <bshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-03 20:45:53 +0000 |
commit | 1c7abf7a02fe79fdd77fc09e8b7c658f449ed6f7 (patch) | |
tree | 96e5b831ce305a1684f0c9278d73896267c095ae /ash/desktop_background | |
parent | f861b390b63e33491ed82c3b2fb29eb17a4849e1 (diff) | |
download | chromium_src-1c7abf7a02fe79fdd77fc09e8b7c658f449ed6f7.zip chromium_src-1c7abf7a02fe79fdd77fc09e8b7c658f449ed6f7.tar.gz chromium_src-1c7abf7a02fe79fdd77fc09e8b7c658f449ed6f7.tar.bz2 |
Use low resolution wallpapers for small screens
BUG=140336
TBR=jhawkins
Review URL: https://chromiumcodereview.appspot.com/10837089
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149915 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/desktop_background')
4 files changed, 300 insertions, 73 deletions
diff --git a/ash/desktop_background/desktop_background_controller.cc b/ash/desktop_background/desktop_background_controller.cc index 022ca0b..3f9dcba 100644 --- a/ash/desktop_background/desktop_background_controller.cc +++ b/ash/desktop_background/desktop_background_controller.cc @@ -23,6 +23,10 @@ namespace ash { namespace { + +const int kSmallWallpaperMaximalWidth = 1366; +const int kSmallWallpaperMaximalHeight = 800; + internal::RootWindowLayoutManager* GetRootWindowLayoutManager( aura::RootWindow* root_window) { return static_cast<internal::RootWindowLayoutManager*>( @@ -32,11 +36,11 @@ internal::RootWindowLayoutManager* GetRootWindowLayoutManager( // Stores the current wallpaper data. struct DesktopBackgroundController::WallpaperData { - explicit WallpaperData(int index) + WallpaperData(int index, WallpaperResolution resolution) : wallpaper_index(index), - wallpaper_layout(GetWallpaperInfo(index).layout), + wallpaper_layout(GetWallpaperViewInfo(index, resolution).layout), wallpaper_image(*(ui::ResourceBundle::GetSharedInstance().GetImageNamed( - GetWallpaperInfo(index).id).ToImageSkia())) { + GetWallpaperViewInfo(index, resolution).id).ToImageSkia())) { } WallpaperData(WallpaperLayout layout, const gfx::ImageSkia& image) : wallpaper_index(-1), @@ -54,7 +58,9 @@ class DesktopBackgroundController::WallpaperOperation : public base::RefCountedThreadSafe< DesktopBackgroundController::WallpaperOperation> { public: - explicit WallpaperOperation(int index) : index_(index) { + WallpaperOperation(int index, WallpaperResolution resolution) + : index_(index), + resolution_(resolution) { } static void Run(scoped_refptr<WallpaperOperation> wo) { @@ -64,7 +70,7 @@ class DesktopBackgroundController::WallpaperOperation void LoadingWallpaper() { if (cancel_flag_.IsSet()) return; - wallpaper_data_.reset(new WallpaperData(index_)); + wallpaper_data_.reset(new WallpaperData(index_, resolution_)); } void Cancel() { @@ -85,7 +91,9 @@ class DesktopBackgroundController::WallpaperOperation scoped_ptr<WallpaperData> wallpaper_data_; - int index_; + const int index_; + + const WallpaperResolution resolution_; DISALLOW_COPY_AND_ASSIGN(WallpaperOperation); }; @@ -123,7 +131,17 @@ void DesktopBackgroundController::OnRootWindowAdded( switch (desktop_background_mode_) { case BACKGROUND_IMAGE: if (current_wallpaper_.get()) { - SetDesktopBackgroundImage(root_window); + gfx::Size root_window_size = root_window->GetHostSize(); + int wallpaper_width = current_wallpaper_->wallpaper_image.width(); + int wallpaper_height = current_wallpaper_->wallpaper_image.height(); + // Loads a higher resolution wallpaper if needed. + if ((wallpaper_width < root_window_size.width() || + wallpaper_height < root_window_size.height()) && + current_wallpaper_->wallpaper_index != -1 && + current_wallpaper_->wallpaper_layout != TILE) + SetDefaultWallpaper(current_wallpaper_->wallpaper_index, true); + else + SetDesktopBackgroundImage(root_window); } else { internal::CreateDesktopBackground(root_window); } @@ -134,7 +152,8 @@ void DesktopBackgroundController::OnRootWindowAdded( } } -void DesktopBackgroundController::SetDefaultWallpaper(int index) { +void DesktopBackgroundController::SetDefaultWallpaper(int index, + bool force_reload) { // We should not change background when index is invalid. For instance, at // login screen or stub_user login. if (index == ash::GetInvalidWallpaperIndex()) { @@ -145,12 +164,23 @@ void DesktopBackgroundController::SetDefaultWallpaper(int index) { return; } - if (current_wallpaper_.get() && current_wallpaper_->wallpaper_index == index) + if (!force_reload && current_wallpaper_.get() && + current_wallpaper_->wallpaper_index == index) return; CancelPendingWallpaperOperation(); - wallpaper_op_ = new WallpaperOperation(index); + WallpaperResolution 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() > kSmallWallpaperMaximalWidth || + root_window_size.height() > kSmallWallpaperMaximalHeight) + resolution = LARGE; + } + + wallpaper_op_ = new WallpaperOperation(index, resolution); base::WorkerPool::PostTaskAndReply( FROM_HERE, base::Bind(&WallpaperOperation::Run, wallpaper_op_), diff --git a/ash/desktop_background/desktop_background_controller.h b/ash/desktop_background/desktop_background_controller.h index b575654..813e338 100644 --- a/ash/desktop_background/desktop_background_controller.h +++ b/ash/desktop_background/desktop_background_controller.h @@ -71,8 +71,10 @@ class ASH_EXPORT DesktopBackgroundController { void OnRootWindowAdded(aura::RootWindow* root_window); // Loads default wallpaper at |index| asynchronously and sets to current - // wallpaper after loaded. - void SetDefaultWallpaper(int index); + // wallpaper after loaded. When |force_reload| is true, reload wallpaper + // for all root windows even if |index| is the same as current wallpaper. It + // must be true when a different resolution of current wallpaper is needed. + void SetDefaultWallpaper(int index, bool force_reload); // Sets the user selected custom wallpaper. Called when user selected a file // from file system or changed the layout of wallpaper. diff --git a/ash/desktop_background/desktop_background_resources.cc b/ash/desktop_background/desktop_background_resources.cc index 01f7f46..48a6dcf 100644 --- a/ash/desktop_background/desktop_background_resources.cc +++ b/ash/desktop_background/desktop_background_resources.cc @@ -23,210 +23,384 @@ const char* kWallpaperLayoutArrays[] = { const ash::WallpaperInfo kDefaultWallpapers[] = { #if !defined(GOOGLE_CHROME_BUILD) { - IDR_AURA_WALLPAPERS_ROMAINGUY_0, + { + IDR_AURA_WALLPAPERS_ROMAINGUY_0_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_ROMAINGUY_0_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_ROMAINGUY_0_THUMB, - ash::CENTER_CROPPED, "Romain Guy", "http://www.curious-creature.org" }, #else { - IDR_AURA_WALLPAPERS_1_NATURE0, + { + IDR_AURA_WALLPAPERS_1_NATURE0_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_1_NATURE0_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_1_NATURE0_THUMB, - ash::CENTER_CROPPED, "Kathy Collins / Getty Images", "http://www.gettyimages.com" }, { - IDR_AURA_WALLPAPERS_1_NATURE1, + { + IDR_AURA_WALLPAPERS_1_NATURE1_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_1_NATURE1_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_1_NATURE1_THUMB, - ash::CENTER_CROPPED, "Johannes van Donge", "http://www.diginature.nl" }, { - IDR_AURA_WALLPAPERS_1_NATURE2, + { + IDR_AURA_WALLPAPERS_1_NATURE2_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_1_NATURE2_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_1_NATURE2_THUMB, - ash::CENTER_CROPPED, "Oleg Zhukov", "http://500px.com/eosboy" }, { - IDR_AURA_WALLPAPERS_1_NATURE3, + { + IDR_AURA_WALLPAPERS_1_NATURE3_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_1_NATURE3_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_1_NATURE3_THUMB, - ash::CENTER_CROPPED, "Stefano Ronchi", "http://www.stefanoronchi.com" }, { - IDR_AURA_WALLPAPERS_1_NATURE4, + { + IDR_AURA_WALLPAPERS_1_NATURE4_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_1_NATURE4_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_1_NATURE4_THUMB, - ash::CENTER_CROPPED, "Stefano Ronchi", "http://www.stefanoronchi.com" }, { - IDR_AURA_WALLPAPERS_1_NATURE5, + { + IDR_AURA_WALLPAPERS_1_NATURE5_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_1_NATURE5_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_1_NATURE5_THUMB, - ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { - IDR_AURA_WALLPAPERS_1_NATURE6, + { + IDR_AURA_WALLPAPERS_1_NATURE6_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_1_NATURE6_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_1_NATURE6_THUMB, - ash::CENTER_CROPPED, "Walter Soestbergen", "http://www.waltersoestbergen.nl" }, { - IDR_AURA_WALLPAPERS_1_NATURE7, + { + IDR_AURA_WALLPAPERS_1_NATURE7_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_1_NATURE7_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_1_NATURE7_THUMB, - ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { - IDR_AURA_WALLPAPERS_2_LANDSCAPE0, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE0_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE0_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_2_LANDSCAPE0_THUMB, - ash::CENTER_CROPPED, "Vitali Prokopenko", "http://www.vitphoto.com/" }, { - IDR_AURA_WALLPAPERS_2_LANDSCAPE1, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE1_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE1_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_2_LANDSCAPE1_THUMB, - ash::CENTER_CROPPED, "Romain Guy", "http://www.curious-creature.org" }, { - IDR_AURA_WALLPAPERS_2_LANDSCAPE2, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE2_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE2_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_2_LANDSCAPE2_THUMB, - ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { - IDR_AURA_WALLPAPERS_2_LANDSCAPE3, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE3_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE3_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_2_LANDSCAPE3_THUMB, - ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { - IDR_AURA_WALLPAPERS_2_LANDSCAPE4, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE4_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE4_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_2_LANDSCAPE4_THUMB, - ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { - IDR_AURA_WALLPAPERS_2_LANDSCAPE5, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE5_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE5_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_2_LANDSCAPE5_THUMB, - ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { - IDR_AURA_WALLPAPERS_2_LANDSCAPE6, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE6_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE6_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_2_LANDSCAPE6_THUMB, - ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { - IDR_AURA_WALLPAPERS_2_LANDSCAPE7, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE7_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_2_LANDSCAPE7_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_2_LANDSCAPE7_THUMB, - ash::CENTER_CROPPED, "Romain Guy", "http://www.curious-creature.org" }, { - IDR_AURA_WALLPAPERS_3_URBAN0, + { + IDR_AURA_WALLPAPERS_3_URBAN0_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_3_URBAN0_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_3_URBAN0_THUMB, - ash::CENTER_CROPPED, "Paulo FLOP", "http://500px.com/FLOP" }, { - IDR_AURA_WALLPAPERS_3_URBAN1, + { + IDR_AURA_WALLPAPERS_3_URBAN1_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_3_URBAN1_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_3_URBAN1_THUMB, - ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { - IDR_AURA_WALLPAPERS_3_URBAN2, + { + IDR_AURA_WALLPAPERS_3_URBAN2_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_3_URBAN2_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_3_URBAN2_THUMB, - ash::CENTER_CROPPED, "Neil Kremer", "http://lightshedimagery.smugmug.com" }, { - IDR_AURA_WALLPAPERS_3_URBAN3, + { + IDR_AURA_WALLPAPERS_3_URBAN3_LARGE, + ash::CENTER_CROPPED + }, + { + IDR_AURA_WALLPAPERS_3_URBAN3_SMALL, + ash::CENTER + }, IDR_AURA_WALLPAPERS_3_URBAN3_THUMB, - ash::CENTER_CROPPED, "Neil Kremer", "http://lightshedimagery.smugmug.com" }, #endif { - IDR_AURA_WALLPAPERS_5_GRADIENT0, + { + IDR_AURA_WALLPAPERS_5_GRADIENT0_LARGE, + ash::TILE + }, + { + IDR_AURA_WALLPAPERS_5_GRADIENT0_SMALL, + ash::TILE + }, IDR_AURA_WALLPAPERS_5_GRADIENT0_THUMB, - ash::TILE, "Chromium", "http://www.chromium.org" }, { - IDR_AURA_WALLPAPERS_5_GRADIENT1, + { + IDR_AURA_WALLPAPERS_5_GRADIENT1_LARGE, + ash::TILE + }, + { + IDR_AURA_WALLPAPERS_5_GRADIENT1_SMALL, + ash::TILE + }, IDR_AURA_WALLPAPERS_5_GRADIENT1_THUMB, - ash::TILE, "Chromium", "http://www.chromium.org" }, { - IDR_AURA_WALLPAPERS_5_GRADIENT2, + { + IDR_AURA_WALLPAPERS_5_GRADIENT2_LARGE, + ash::TILE + }, + { + IDR_AURA_WALLPAPERS_5_GRADIENT2_SMALL, + ash::TILE + }, IDR_AURA_WALLPAPERS_5_GRADIENT2_THUMB, - ash::TILE, "Chromium", "http://www.chromium.org" }, { - IDR_AURA_WALLPAPERS_5_GRADIENT3, + { + IDR_AURA_WALLPAPERS_5_GRADIENT3_LARGE, + ash::TILE + }, + { + IDR_AURA_WALLPAPERS_5_GRADIENT3_SMALL, + ash::TILE + }, IDR_AURA_WALLPAPERS_5_GRADIENT3_THUMB, - ash::TILE, "Chromium", "http://www.chromium.org" }, { - IDR_AURA_WALLPAPERS_5_GRADIENT4, + { + IDR_AURA_WALLPAPERS_5_GRADIENT4_LARGE, + ash::TILE + }, + { + IDR_AURA_WALLPAPERS_5_GRADIENT4_SMALL, + ash::TILE + }, IDR_AURA_WALLPAPERS_5_GRADIENT4_THUMB, - ash::TILE, "Chromium", "http://www.chromium.org" }, { - IDR_AURA_WALLPAPERS_5_GRADIENT5, + { + IDR_AURA_WALLPAPERS_5_GRADIENT5_LARGE, + ash::TILE + }, + { + IDR_AURA_WALLPAPERS_5_GRADIENT5_SMALL, + ash::TILE + }, IDR_AURA_WALLPAPERS_5_GRADIENT5_THUMB, - ash::TILE, "Chromium", "http://www.chromium.org" }, { - IDR_AURA_WALLPAPERS_5_GRADIENT6, + { + IDR_AURA_WALLPAPERS_5_GRADIENT6_LARGE, + ash::TILE + }, + { + IDR_AURA_WALLPAPERS_5_GRADIENT6_SMALL, + ash::TILE + }, IDR_AURA_WALLPAPERS_5_GRADIENT6_THUMB, - ash::TILE, "Chromium", "http://www.chromium.org" }, { - IDR_AURA_WALLPAPERS_5_GRADIENT7, + { + IDR_AURA_WALLPAPERS_5_GRADIENT7_LARGE, + ash::TILE + }, + { + IDR_AURA_WALLPAPERS_5_GRADIENT7_SMALL, + ash::TILE + }, IDR_AURA_WALLPAPERS_5_GRADIENT7_THUMB, - ash::TILE, "Chromium", "http://www.chromium.org" - }, + } }; const int kWallpaperLayoutCount = arraysize(kWallpaperLayoutArrays); @@ -294,4 +468,12 @@ const WallpaperInfo& GetWallpaperInfo(int index) { return kDefaultWallpapers[index]; } +const WallpaperViewInfo& GetWallpaperViewInfo(int index, + WallpaperResolution resolution) { + if (resolution == SMALL) + return kDefaultWallpapers[index].small; + else + return kDefaultWallpapers[index].large; +} + } // namespace ash diff --git a/ash/desktop_background/desktop_background_resources.h b/ash/desktop_background/desktop_background_resources.h index 54cdf55..f9c99b5 100644 --- a/ash/desktop_background/desktop_background_resources.h +++ b/ash/desktop_background/desktop_background_resources.h @@ -19,10 +19,21 @@ enum WallpaperLayout { TILE, }; -struct ASH_EXPORT WallpaperInfo { +enum WallpaperResolution { + LARGE, + SMALL +}; + +// Encapsulates wallpaper infomation needed by desktop background view. +struct ASH_EXPORT WallpaperViewInfo { int id; - int thumb_id; WallpaperLayout layout; +}; + +struct ASH_EXPORT WallpaperInfo { + WallpaperViewInfo large; + WallpaperViewInfo small; + int thumb_id; // TODO(bshe): author member should be encoded to UTF16. We need to use i18n // string for this member after M19. const char* author; @@ -39,6 +50,8 @@ ASH_EXPORT int GetNextWallpaperIndex(int index); ASH_EXPORT int GetSolidColorIndex(); ASH_EXPORT int GetWallpaperCount(); ASH_EXPORT const WallpaperInfo& GetWallpaperInfo(int index); +ASH_EXPORT const WallpaperViewInfo& GetWallpaperViewInfo(int index, + WallpaperResolution resolution); } // namespace ash |