diff options
author | bshe@chromium.org <bshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 13:46:07 +0000 |
---|---|---|
committer | bshe@chromium.org <bshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 13:46:07 +0000 |
commit | ff6c38d6dc90b0bafe92b24f5f4657ff535f813e (patch) | |
tree | 82b06afc5d7d7a109a611b9fbb1cf751ad73f824 /ash | |
parent | f2a6af064c6be8ab69f2fed83d88b875a5c84a48 (diff) | |
download | chromium_src-ff6c38d6dc90b0bafe92b24f5f4657ff535f813e.zip chromium_src-ff6c38d6dc90b0bafe92b24f5f4657ff535f813e.tar.gz chromium_src-ff6c38d6dc90b0bafe92b24f5f4657ff535f813e.tar.bz2 |
Add image layout parameter for wallpaper
+emmanuel's patch: add some new resources and paint background with specified layout.
BUG=None
TEST=None
Review URL: https://chromiumcodereview.appspot.com/9808045
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128474 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/desktop_background/desktop_background_controller.cc | 7 | ||||
-rw-r--r-- | ash/desktop_background/desktop_background_controller.h | 6 | ||||
-rw-r--r-- | ash/desktop_background/desktop_background_resources.cc | 160 | ||||
-rw-r--r-- | ash/desktop_background/desktop_background_resources.h | 8 | ||||
-rw-r--r-- | ash/desktop_background/desktop_background_view.cc | 38 | ||||
-rw-r--r-- | ash/desktop_background/desktop_background_view.h | 6 | ||||
-rw-r--r-- | ash/shell.cc | 3 | ||||
-rw-r--r-- | ash/shell_factory.h | 4 |
8 files changed, 211 insertions, 21 deletions
diff --git a/ash/desktop_background/desktop_background_controller.cc b/ash/desktop_background/desktop_background_controller.cc index d8af460..ccf22f4 100644 --- a/ash/desktop_background/desktop_background_controller.cc +++ b/ash/desktop_background/desktop_background_controller.cc @@ -4,7 +4,6 @@ #include "ash/desktop_background/desktop_background_controller.h" -#include "ash/desktop_background/desktop_background_resources.h" #include "ash/desktop_background/desktop_background_view.h" #include "ash/shell.h" #include "ash/shell_factory.h" @@ -38,16 +37,16 @@ void DesktopBackgroundController::OnDesktopBackgroundChanged() { DCHECK(root_window_layout->background_widget()->widget_delegate()); static_cast<internal::DesktopBackgroundView*>( root_window_layout->background_widget()->widget_delegate())-> - SetWallpaper(GetWallpaper(index)); + SetWallpaper(GetWallpaper(index), GetWallpaperInfo(index).layout); } void DesktopBackgroundController::SetDesktopBackgroundImageMode( - const SkBitmap& wallpaper) { + const SkBitmap& wallpaper, ImageLayout layout) { internal::RootWindowLayoutManager* root_window_layout = Shell::GetInstance()->root_window_layout(); root_window_layout->SetBackgroundLayer(NULL); root_window_layout->SetBackgroundWidget( - internal::CreateDesktopBackground(wallpaper)); + internal::CreateDesktopBackground(wallpaper, layout)); desktop_background_mode_ = BACKGROUND_IMAGE; } diff --git a/ash/desktop_background/desktop_background_controller.h b/ash/desktop_background/desktop_background_controller.h index 7ea56c3..f43cbbd 100644 --- a/ash/desktop_background/desktop_background_controller.h +++ b/ash/desktop_background/desktop_background_controller.h @@ -7,6 +7,7 @@ #pragma once #include "ash/ash_export.h" +#include "ash/desktop_background/desktop_background_resources.h" #include "base/basictypes.h" class SkBitmap; @@ -42,8 +43,9 @@ class ASH_EXPORT DesktopBackgroundController { void OnDesktopBackgroundChanged(); // Sets the desktop background to image mode and create a new background - // widget with |wallpaper|. - void SetDesktopBackgroundImageMode(const SkBitmap& wallpaper); + // widget with |wallpaper| and image |layout|. + void SetDesktopBackgroundImageMode(const SkBitmap& wallpaper, + ImageLayout layout); // Sets the desktop background to solid color mode and create a solid color // layout. diff --git a/ash/desktop_background/desktop_background_resources.cc b/ash/desktop_background/desktop_background_resources.cc index 3214b49..8d5c654 100644 --- a/ash/desktop_background/desktop_background_resources.cc +++ b/ash/desktop_background/desktop_background_resources.cc @@ -16,84 +16,98 @@ const ash::WallpaperInfo kDefaultWallpapers[] = { { IDR_AURA_WALLPAPERS_ROMAINGUY_0, IDR_AURA_WALLPAPERS_ROMAINGUY_0_THUMB, + ash::CENTER_CROPPED, "Romain Guy", "http://www.curious-creature.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_0, IDR_AURA_WALLPAPERS_WALLPAPER_0_THUMB, + ash::TILE, "Test Gradient 0", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_1, IDR_AURA_WALLPAPERS_WALLPAPER_1_THUMB, + ash::TILE, "Test Gradient 1", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_2, IDR_AURA_WALLPAPERS_WALLPAPER_2_THUMB, + ash::TILE, "Test Gradient 2", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_3, IDR_AURA_WALLPAPERS_WALLPAPER_3_THUMB, + ash::TILE, "Test Gradient 3", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_4, IDR_AURA_WALLPAPERS_WALLPAPER_4_THUMB, + ash::TILE, "Test Gradient 4", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_5, IDR_AURA_WALLPAPERS_WALLPAPER_5_THUMB, + ash::TILE, "Test Gradient 5", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_6, IDR_AURA_WALLPAPERS_WALLPAPER_6_THUMB, + ash::TILE, "Test Gradient 6", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_7, IDR_AURA_WALLPAPERS_WALLPAPER_7_THUMB, + ash::TILE, "Test Gradient 7", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_8, IDR_AURA_WALLPAPERS_WALLPAPER_8_THUMB, + ash::TILE, "Test Gradient 8", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_9, IDR_AURA_WALLPAPERS_WALLPAPER_9_THUMB, + ash::TILE, "Test Gradient 9", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_10, IDR_AURA_WALLPAPERS_WALLPAPER_10_THUMB, + ash::TILE, "Test Gradient 10", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_11, IDR_AURA_WALLPAPERS_WALLPAPER_11_THUMB, + ash::TILE, "Test Gradient 11", "http://www.chromium.org" }, { IDR_AURA_WALLPAPERS_WALLPAPER_12, IDR_AURA_WALLPAPERS_WALLPAPER_12_THUMB, + ash::TILE, "Test Gradient 12", "http://www.chromium.org" }, @@ -101,303 +115,449 @@ const ash::WallpaperInfo kDefaultWallpapers[] = { { IDR_AURA_WALLPAPERS_CHARLESDAVEY_0, IDR_AURA_WALLPAPERS_CHARLESDAVEY_0_THUMB, + ash::CENTER_CROPPED, "Charles Davey", "http://500px.com/CharlesDavey" }, { IDR_AURA_WALLPAPERS_JOHANNESVANDONGE_0, IDR_AURA_WALLPAPERS_JOHANNESVANDONGE_0_THUMB, + ash::CENTER_CROPPED, "Johannes van Donge", "http://www.diginature.nl" }, { IDR_AURA_WALLPAPERS_JOHANNESVANDONGE_1, IDR_AURA_WALLPAPERS_JOHANNESVANDONGE_1_THUMB, + ash::CENTER_CROPPED, "Johannes van Donge", "http://www.diginature.nl" }, { IDR_AURA_WALLPAPERS_JOHANNESVANDONGE_2, IDR_AURA_WALLPAPERS_JOHANNESVANDONGE_2_THUMB, + ash::CENTER_CROPPED, "Johannes van Donge", "http://www.diginature.nl" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_0, IDR_AURA_WALLPAPERS_MARIOMORENO_0_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_1, IDR_AURA_WALLPAPERS_MARIOMORENO_1_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_2, IDR_AURA_WALLPAPERS_MARIOMORENO_2_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_3, IDR_AURA_WALLPAPERS_MARIOMORENO_3_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_4, IDR_AURA_WALLPAPERS_MARIOMORENO_4_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_5, IDR_AURA_WALLPAPERS_MARIOMORENO_5_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_6, IDR_AURA_WALLPAPERS_MARIOMORENO_6_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_7, IDR_AURA_WALLPAPERS_MARIOMORENO_7_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARIOMORENO_8, IDR_AURA_WALLPAPERS_MARIOMORENO_8_THUMB, + ash::CENTER_CROPPED, "Mario Moreno", "http://www.mariomorenophotography.com" }, { IDR_AURA_WALLPAPERS_MARKBRIDGER_0, IDR_AURA_WALLPAPERS_MARKBRIDGER_0_THUMB, + ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { IDR_AURA_WALLPAPERS_MARKBRIDGER_1, IDR_AURA_WALLPAPERS_MARKBRIDGER_1_THUMB, + ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { IDR_AURA_WALLPAPERS_MARKBRIDGER_2, IDR_AURA_WALLPAPERS_MARKBRIDGER_2_THUMB, + ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { IDR_AURA_WALLPAPERS_MARKBRIDGER_3, IDR_AURA_WALLPAPERS_MARKBRIDGER_3_THUMB, + ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { IDR_AURA_WALLPAPERS_MARKBRIDGER_4, IDR_AURA_WALLPAPERS_MARKBRIDGER_4_THUMB, + ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { IDR_AURA_WALLPAPERS_MARKBRIDGER_5, IDR_AURA_WALLPAPERS_MARKBRIDGER_5_THUMB, + ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { IDR_AURA_WALLPAPERS_MARKBRIDGER_6, IDR_AURA_WALLPAPERS_MARKBRIDGER_6_THUMB, + ash::CENTER_CROPPED, "Mark Bridger", "http://www.bridgephotography.co.uk" }, { IDR_AURA_WALLPAPERS_MICHELBRICTEUX_0, IDR_AURA_WALLPAPERS_MICHELBRICTEUX_0_THUMB, + ash::CENTER_CROPPED, "Michel Bricteux", "http://500px.com/mbricteux" }, { IDR_AURA_WALLPAPERS_MICHELBRICTEUX_1, IDR_AURA_WALLPAPERS_MICHELBRICTEUX_1_THUMB, + ash::CENTER_CROPPED, "Michel Bricteux", "http://500px.com/mbricteux" }, { IDR_AURA_WALLPAPERS_MICHELBRICTEUX_2, IDR_AURA_WALLPAPERS_MICHELBRICTEUX_2_THUMB, + ash::CENTER_CROPPED, "Michel Bricteux", "http://500px.com/mbricteux" }, { IDR_AURA_WALLPAPERS_MICHELBRICTEUX_3, IDR_AURA_WALLPAPERS_MICHELBRICTEUX_3_THUMB, + ash::CENTER_CROPPED, "Michel Bricteux", "http://500px.com/mbricteux" }, { IDR_AURA_WALLPAPERS_MIKEREYFMAN_0, IDR_AURA_WALLPAPERS_MIKEREYFMAN_0_THUMB, + ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { IDR_AURA_WALLPAPERS_MIKEREYFMAN_1, IDR_AURA_WALLPAPERS_MIKEREYFMAN_1_THUMB, + ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { IDR_AURA_WALLPAPERS_MIKEREYFMAN_2, IDR_AURA_WALLPAPERS_MIKEREYFMAN_2_THUMB, + ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { IDR_AURA_WALLPAPERS_MIKEREYFMAN_3, IDR_AURA_WALLPAPERS_MIKEREYFMAN_3_THUMB, + ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { IDR_AURA_WALLPAPERS_MIKEREYFMAN_4, IDR_AURA_WALLPAPERS_MIKEREYFMAN_4_THUMB, + ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { IDR_AURA_WALLPAPERS_MIKEREYFMAN_5, IDR_AURA_WALLPAPERS_MIKEREYFMAN_5_THUMB, + ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { IDR_AURA_WALLPAPERS_MIKEREYFMAN_6, IDR_AURA_WALLPAPERS_MIKEREYFMAN_6_THUMB, + ash::CENTER_CROPPED, "Mike Reyfman", "http://mikereyfman.com" }, { IDR_AURA_WALLPAPERS_NEILKREMER_0, IDR_AURA_WALLPAPERS_NEILKREMER_0_THUMB, + ash::CENTER_CROPPED, "Neil Kremer", "http://lightshedimagery.smugmug.com" }, { IDR_AURA_WALLPAPERS_NEILKREMER_1, IDR_AURA_WALLPAPERS_NEILKREMER_1_THUMB, + ash::CENTER_CROPPED, "Neil Kremer", "http://lightshedimagery.smugmug.com" }, { IDR_AURA_WALLPAPERS_NEILKREMER_2, IDR_AURA_WALLPAPERS_NEILKREMER_2_THUMB, + ash::CENTER_CROPPED, "Neil Kremer", "http://lightshedimagery.smugmug.com" }, { IDR_AURA_WALLPAPERS_OLEGZHUKOV_0, IDR_AURA_WALLPAPERS_OLEGZHUKOV_0_THUMB, + ash::CENTER_CROPPED, "Oleg Zhukov", "http://500px.com/eosboy" }, { IDR_AURA_WALLPAPERS_OLEGZHUKOV_1, IDR_AURA_WALLPAPERS_OLEGZHUKOV_1_THUMB, + ash::CENTER_CROPPED, "Oleg Zhukov", "http://500px.com/eosboy" }, { IDR_AURA_WALLPAPERS_PAULOFLOP_0, IDR_AURA_WALLPAPERS_PAULOFLOP_0_THUMB, + ash::CENTER_CROPPED, "Paulo FLOP", "http://500px.com/FLOP" }, { IDR_AURA_WALLPAPERS_PAULOFLOP_1, IDR_AURA_WALLPAPERS_PAULOFLOP_1_THUMB, + ash::CENTER_CROPPED, "Paulo FLOP", "http://500px.com/FLOP" }, { IDR_AURA_WALLPAPERS_PAULOFLOP_2, IDR_AURA_WALLPAPERS_PAULOFLOP_2_THUMB, + ash::CENTER_CROPPED, "Paulo FLOP", "http://500px.com/FLOP" }, { IDR_AURA_WALLPAPERS_PAULOFLOP_3, IDR_AURA_WALLPAPERS_PAULOFLOP_3_THUMB, + ash::CENTER_CROPPED, "Paulo FLOP", "http://500px.com/FLOP" }, { IDR_AURA_WALLPAPERS_PAULOFLOP_4, IDR_AURA_WALLPAPERS_PAULOFLOP_4_THUMB, + ash::CENTER_CROPPED, "Paulo FLOP", "http://500px.com/FLOP" }, { IDR_AURA_WALLPAPERS_PAULOFLOP_5, IDR_AURA_WALLPAPERS_PAULOFLOP_5_THUMB, + ash::CENTER_CROPPED, "Paulo FLOP", "http://500px.com/FLOP" }, { IDR_AURA_WALLPAPERS_STEFANORONCHI_0, IDR_AURA_WALLPAPERS_STEFANORONCHI_0_THUMB, + ash::CENTER_CROPPED, "Stefano Ronchi", "http://www.stefanoronchi.com" }, { IDR_AURA_WALLPAPERS_STEFANORONCHI_1, IDR_AURA_WALLPAPERS_STEFANORONCHI_1_THUMB, + ash::CENTER_CROPPED, "Stefano Ronchi", "http://www.stefanoronchi.com" }, { IDR_AURA_WALLPAPERS_STEFANORONCHI_2, IDR_AURA_WALLPAPERS_STEFANORONCHI_2_THUMB, + ash::CENTER_CROPPED, "Stefano Ronchi", "http://www.stefanoronchi.com" }, { IDR_AURA_WALLPAPERS_STEFANORONCHI_3, IDR_AURA_WALLPAPERS_STEFANORONCHI_3_THUMB, + ash::CENTER_CROPPED, "Stefano Ronchi", "http://www.stefanoronchi.com" }, { IDR_AURA_WALLPAPERS_VITALIPROKOPENKO_0, IDR_AURA_WALLPAPERS_VITALIPROKOPENKO_0_THUMB, + ash::CENTER_CROPPED, "Vitali Prokopenko", "http://www.vitphoto.com" }, { IDR_AURA_WALLPAPERS_VITALIPROKOPENKO_1, IDR_AURA_WALLPAPERS_VITALIPROKOPENKO_1_THUMB, + ash::CENTER_CROPPED, "Vitali Prokopenko", "http://www.vitphoto.com" }, { IDR_AURA_WALLPAPERS_VITALIPROKOPENKO_2, IDR_AURA_WALLPAPERS_VITALIPROKOPENKO_2_THUMB, + ash::CENTER_CROPPED, "Vitali Prokopenko", "http://www.vitphoto.com" }, { IDR_AURA_WALLPAPERS_WALTERSOESTBERGEN_0, IDR_AURA_WALLPAPERS_WALTERSOESTBERGEN_0_THUMB, + ash::CENTER_CROPPED, "Walter Soestbergen", "http://www.waltersoestbergen.nl" }, + { + IDR_AURA_WALLPAPERS_BEACH_DAY, + IDR_AURA_WALLPAPERS_BEACH_DAY_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_BEACH_NIGHT, + IDR_AURA_WALLPAPERS_BEACH_NIGHT_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_FOREST_DAY, + IDR_AURA_WALLPAPERS_FOREST_DAY_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_FOREST_NIGHT, + IDR_AURA_WALLPAPERS_FOREST_NIGHT_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_MOUNTAIN_DAY, + IDR_AURA_WALLPAPERS_MOUNTAIN_DAY_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_MOUNTAIN_NIGHT, + IDR_AURA_WALLPAPERS_MOUNTAIN_NIGHT_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_NYC_DAY, + IDR_AURA_WALLPAPERS_NYC_DAY_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_NYC_NIGHT, + IDR_AURA_WALLPAPERS_NYC_NIGHT_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_PLAINS_DAY, + IDR_AURA_WALLPAPERS_PLAINS_DAY_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_PLAINS_NIGHT, + IDR_AURA_WALLPAPERS_PLAINS_NIGHT_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_SF_DAY, + IDR_AURA_WALLPAPERS_SF_DAY_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, + { + IDR_AURA_WALLPAPERS_SF_NIGHT, + IDR_AURA_WALLPAPERS_SF_NIGHT_THUMB, + // TODO(saintlou): change to ash::CENTER once final assets are added. + ash::STRETCH, + "Test", + "http://www.chromium.org", + }, #endif // GOOGLE_CHROME_BUILD }; diff --git a/ash/desktop_background/desktop_background_resources.h b/ash/desktop_background/desktop_background_resources.h index cbea990..8170b54 100644 --- a/ash/desktop_background/desktop_background_resources.h +++ b/ash/desktop_background/desktop_background_resources.h @@ -11,9 +11,17 @@ class SkBitmap; namespace ash { +enum ImageLayout { + CENTER, + CENTER_CROPPED, + STRETCH, + TILE, +}; + struct ASH_EXPORT WallpaperInfo { int id; int thumb_id; + ImageLayout layout; // TODO(bshe): author member should be encoded to UTF16. We need to use i18n // string for this member after M19. const char* author; diff --git a/ash/desktop_background/desktop_background_view.cc b/ash/desktop_background/desktop_background_view.cc index f00ce1a..797d048 100644 --- a/ash/desktop_background/desktop_background_view.cc +++ b/ash/desktop_background/desktop_background_view.cc @@ -28,15 +28,19 @@ static int RoundPositive(double x) { //////////////////////////////////////////////////////////////////////////////// // DesktopBackgroundView, public: -DesktopBackgroundView::DesktopBackgroundView(const SkBitmap& wallpaper) { +DesktopBackgroundView::DesktopBackgroundView(const SkBitmap& wallpaper, + ImageLayout layout) { wallpaper_ = wallpaper; + image_layout_ = layout; wallpaper_.buildMipMap(false); } DesktopBackgroundView::~DesktopBackgroundView() { } -void DesktopBackgroundView::SetWallpaper(const SkBitmap& wallpaper) { +void DesktopBackgroundView::SetWallpaper(const SkBitmap& wallpaper, + ImageLayout layout) { + image_layout_ = layout; wallpaper_ = wallpaper; wallpaper_.buildMipMap(false); SchedulePaint(); @@ -52,7 +56,8 @@ void DesktopBackgroundView::OnPaint(gfx::Canvas* canvas) { // streching to avoid upsampling artifacts (Note that we could tile too, but // decided not to do this at the moment). gfx::Rect wallpaper_rect(0, 0, wallpaper_.width(), wallpaper_.height()); - if (wallpaper_.width() > width() && wallpaper_.height() > height()) { + if (image_layout_ == ash::CENTER_CROPPED && wallpaper_.width() > width() + && wallpaper_.height() > height()) { // The dimension with the smallest ratio must be cropped, the other one // is preserved. Both are set in gfx::Size cropped_size. double horizontal_ratio = static_cast<double>(width()) / @@ -72,13 +77,23 @@ void DesktopBackgroundView::OnPaint(gfx::Canvas* canvas) { gfx::Rect wallpaper_cropped_rect = wallpaper_rect.Center(cropped_size); canvas->DrawBitmapInt(wallpaper_, - wallpaper_cropped_rect.x(), wallpaper_cropped_rect.y(), - wallpaper_cropped_rect.width(), wallpaper_cropped_rect.height(), - 0, 0, width(), height(), - true); - } else { - // Tiling. + wallpaper_cropped_rect.x(), wallpaper_cropped_rect.y(), + wallpaper_cropped_rect.width(), wallpaper_cropped_rect.height(), + 0, 0, width(), height(), + true); + } else if (image_layout_ == ash::TILE) { canvas->TileImageInt(wallpaper_, 0, 0, width(), height()); + } else if (image_layout_ == ash::STRETCH){ + // This is generally not recommended as it may show artifacts. + gfx::Rect centered_rect = wallpaper_rect.Center( + gfx::Size(width(), height())); + canvas->DrawBitmapInt(wallpaper_, centered_rect.x(), centered_rect.y(), + centered_rect.width(), centered_rect.height(), 0, 0, width(), height(), + true); + } else { + // All other are simply centered, and not scaled (but may be clipped). + canvas->DrawBitmapInt(wallpaper_, (width() - wallpaper_.width()) / 2, + (height() - wallpaper_.height()) / 2); } } @@ -91,11 +106,12 @@ void DesktopBackgroundView::OnMouseReleased(const views::MouseEvent& event) { Shell::GetInstance()->ShowBackgroundMenu(GetWidget(), event.location()); } -views::Widget* CreateDesktopBackground(const SkBitmap& wallpaper) { +views::Widget* CreateDesktopBackground(const SkBitmap& wallpaper, + ImageLayout layout) { views::Widget* desktop_widget = new views::Widget; views::Widget::InitParams params( views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); - DesktopBackgroundView* view = new DesktopBackgroundView(wallpaper); + DesktopBackgroundView* view = new DesktopBackgroundView(wallpaper, layout); params.delegate = view; params.parent = Shell::GetInstance()->GetContainer( diff --git a/ash/desktop_background/desktop_background_view.h b/ash/desktop_background/desktop_background_view.h index f1f7652..4e5560c 100644 --- a/ash/desktop_background/desktop_background_view.h +++ b/ash/desktop_background/desktop_background_view.h @@ -6,6 +6,7 @@ #define ASH_DESKTOP_BACKGROUND_DESKTOP_BACKGROUND_VIEW_H_ #pragma once +#include "ash/desktop_background/desktop_background_resources.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/views/view.h" #include "ui/views/widget/widget_delegate.h" @@ -15,13 +16,13 @@ namespace internal { class DesktopBackgroundView : public views::WidgetDelegateView { public: - DesktopBackgroundView(const SkBitmap& wallpaper); + DesktopBackgroundView(const SkBitmap& wallpaper, ImageLayout layout); virtual ~DesktopBackgroundView(); // TODO(bshe): Remove this function once issue 117244 is fixed. It is // currently used in DesktopBackgroundController:: // OnDesktopBackgroundChanged. - void SetWallpaper(const SkBitmap& wallpaper); + void SetWallpaper(const SkBitmap& wallpaper, ImageLayout layout); private: // Overridden from views::View: @@ -30,6 +31,7 @@ class DesktopBackgroundView : public views::WidgetDelegateView { virtual void OnMouseReleased(const views::MouseEvent& event) OVERRIDE; SkBitmap wallpaper_; + ImageLayout image_layout_; DISALLOW_COPY_AND_ASSIGN(DesktopBackgroundView); }; diff --git a/ash/shell.cc b/ash/shell.cc index 79ca48c..eab203c 100644 --- a/ash/shell.cc +++ b/ash/shell.cc @@ -864,8 +864,9 @@ void Shell::InitLayoutManagers() { // Create desktop background widget. // TODO(bshe): We should be able to use OnDesktopBackgroundChanged function // here after issue 117244 got fixed. + int index = user_wallpaper_delegate_->GetUserWallpaperIndex(); desktop_background_controller_->SetDesktopBackgroundImageMode( - GetWallpaper(user_wallpaper_delegate_->GetUserWallpaperIndex())); + GetWallpaper(index), GetWallpaperInfo(index).layout); } void Shell::DisableWorkspaceGridLayout() { diff --git a/ash/shell_factory.h b/ash/shell_factory.h index b90889b..1e57953 100644 --- a/ash/shell_factory.h +++ b/ash/shell_factory.h @@ -7,6 +7,7 @@ #pragma once #include "ash/ash_export.h" +#include "ash/desktop_background/desktop_background_resources.h" class SkBitmap; @@ -20,7 +21,8 @@ class Widget; namespace ash { namespace internal { -views::Widget* CreateDesktopBackground(const SkBitmap& wallpaper); +views::Widget* CreateDesktopBackground(const SkBitmap& wallpaper, + ImageLayout layout); ASH_EXPORT views::Widget* CreateStatusArea(views::View* contents); } // namespace internal |