Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2239)

Unified Diff: chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc

Issue 2931063004: Extract colors from wallpaper and dynamically update login screen overlay (Closed)
Patch Set: Add image-loading class to small pods container Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698