Chromium Code Reviews| Index: chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
| diff --git a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
| index 675f657833b61b87a09e1b6a674d56bc97d0d1ac..f1d71006934a7cd44102d046c08c03a798b44a61 100644 |
| --- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
| +++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
| @@ -327,6 +327,7 @@ class WallpaperManager::PendingWallpaper : |
| manager->DoSetDefaultWallpaper(account_id_, std::move(on_finish_)); |
| } else if (!user_wallpaper_.isNull()) { |
| SetWallpaper(user_wallpaper_, info_.layout); |
| + manager->CalculateProminentColor(user_wallpaper_); |
| } else if (!wallpaper_path_.empty()) { |
| manager->task_runner_->PostTask( |
| FROM_HERE, |
| @@ -727,6 +728,7 @@ void WallpaperManager::DoSetDefaultWallpaper( |
| layout = wallpaper::WALLPAPER_LAYOUT_STRETCH; |
| SetWallpaper(default_wallpaper_image_->image(), layout); |
| + CalculateProminentColor(default_wallpaper_image_->image()); |
| } |
| void WallpaperManager::SetUserWallpaperInfo(const AccountId& account_id, |
| @@ -1245,8 +1247,10 @@ void WallpaperManager::OnWallpaperDecoded( |
| // Update the image, but keep the path which was set earlier. |
| wallpaper_cache_[account_id].second = user_image->image(); |
| - if (update_wallpaper) |
| + if (update_wallpaper) { |
| SetWallpaper(user_image->image(), layout); |
| + CalculateProminentColor(user_image->image()); |
| + } |
| } |
| void WallpaperManager::StartLoad(const AccountId& account_id, |
| @@ -1451,4 +1455,53 @@ void WallpaperManager::RecordWallpaperAppType() { |
| WALLPAPERS_APPS_NUM); |
| } |
| +void WallpaperManager::SetLoginOverlayCalculatorObserver( |
| + wallpaper::WallpaperColorCalculatorObserver* observer) { |
| + if (color_calculator_ && !observer) { |
| + color_calculator_->RemoveObserver(login_overlay_calculator_observer_); |
| + color_calculator_.reset(); |
| + } |
| + login_overlay_calculator_observer_ = observer; |
| +} |
| + |
| +void WallpaperManager::CalculateProminentColor(const gfx::ImageSkia& image) { |
| + // No need to calculate colors if there's no observer. |
| + if (!login_overlay_calculator_observer_) |
| + return; |
| + if (color_calculator_) { |
| + color_calculator_->RemoveObserver(login_overlay_calculator_observer_); |
| + color_calculator_.reset(); |
| + } |
| + |
| + color_utils::LumaRange luma = color_utils::LumaRange::DARK; |
| + color_utils::SaturationRange saturation = color_utils::SaturationRange::MUTED; |
| + |
| + color_calculator_ = base::MakeUnique<wallpaper::WallpaperColorCalculator>( |
| + image, luma, saturation, task_runner_); |
| + color_calculator_->AddObserver(login_overlay_calculator_observer_); |
| + if (!color_calculator_->StartCalculation()) |
| + SetLoginOverlayCalculatorObserver(nullptr); |
| +} |
| + |
| +void WallpaperManager::getLoginOverlayColors(std::string* dm_color, |
| + std::string* scroll_color, |
| + std::string* background_color) { |
| + SkColor dm_sk_color = color_calculator_->prominent_color(); |
| + // The dark muted color should have 100% opacity. |
| + dm_sk_color = SkColorSetA(dm_sk_color, 0xFF); |
| + SkColor base_sk_color = color_utils::GetResultingPaintColor( |
| + SkColorSetA(ash::kShelfDefaultBaseColor, |
| + ash::kShelfTranslucentColorDarkenAlpha), |
| + dm_sk_color); |
| + SkColor background_sk_color = |
| + SkColorSetA(base_sk_color, ash::kShelfTranslucentAlpha); |
| + // The alpha value for the login screen background. This constant will be |
| + // moved to a separate file when views-based login screen is being developed. |
| + constexpr int kLoginTranslucentAlpha = 76; |
| + SkColor scroll_sk_color = SkColorSetA(base_sk_color, kLoginTranslucentAlpha); |
| + *dm_color = color_utils::SkColorToRgbaString(dm_sk_color); |
|
jdufault
2017/06/10 03:05:59
Output the SkColor values and have the string tran
Wenzhao (Colin) Zang
2017/06/12 21:10:57
Done.
|
| + *scroll_color = color_utils::SkColorToRgbaString(scroll_sk_color); |
| + *background_color = color_utils::SkColorToRgbaString(background_sk_color); |
| +} |
| + |
| } // namespace chromeos |