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

Unified Diff: ui/wm/core/shadow.cc

Issue 2589163003: Add shadow/corner radius to notifications (toasts and in-center). (Closed)
Patch Set: sky reviews Created 3 years, 11 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
« no previous file with comments | « ui/views/border.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/wm/core/shadow.cc
diff --git a/ui/wm/core/shadow.cc b/ui/wm/core/shadow.cc
index 31737aa37e20b0b12516720e981d7eb3972da0c0..ac8c37da25ad91d6f0dabfbe20bb3851d9124bce 100644
--- a/ui/wm/core/shadow.cc
+++ b/ui/wm/core/shadow.cc
@@ -4,12 +4,11 @@
#include "ui/wm/core/shadow.h"
-#include "base/lazy_instance.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/gfx/geometry/insets.h"
-#include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/shadow_util.h"
#include "ui/wm/core/shadow_types.h"
namespace wm {
@@ -23,45 +22,6 @@ const int kRoundedCornerRadius = 2;
// Duration for opacity animation in milliseconds.
const int kShadowAnimationDurationMs = 100;
-struct ShadowDetails {
- // Description of the shadows.
- gfx::ShadowValues values;
- // Cached ninebox image based on |values|.
- gfx::ImageSkia ninebox_image;
-};
-
-// Map from elevation to a cached shadow.
-using ShadowDetailsMap = std::map<int, ShadowDetails>;
-base::LazyInstance<ShadowDetailsMap> g_shadow_cache = LAZY_INSTANCE_INITIALIZER;
-
-const ShadowDetails& GetDetailsForElevation(int elevation) {
- auto iter = g_shadow_cache.Get().find(elevation);
- if (iter != g_shadow_cache.Get().end())
- return iter->second;
-
- auto insertion =
- g_shadow_cache.Get().insert(std::make_pair(elevation, ShadowDetails()));
- DCHECK(insertion.second);
- ShadowDetails* shadow = &insertion.first->second;
- // To match the CSS notion of blur (spread outside the bounding box) to the
- // Skia notion of blur (spread outside and inside the bounding box), we have
- // to double the designer-provided blur values.
- const int kBlurCorrection = 2;
- // "Key shadow": y offset is elevation and blur is twice the elevation.
- shadow->values.emplace_back(gfx::Vector2d(0, elevation),
- kBlurCorrection * elevation * 2,
- SkColorSetA(SK_ColorBLACK, 0x3d));
- // "Ambient shadow": no offset and blur matches the elevation.
- shadow->values.emplace_back(gfx::Vector2d(), kBlurCorrection * elevation,
- SkColorSetA(SK_ColorBLACK, 0x1f));
- // To see what this looks like for elevation 24, try this CSS:
- // box-shadow: 0 24px 48px rgba(0, 0, 0, .24),
- // 0 0 24px rgba(0, 0, 0, .12);
- shadow->ninebox_image = gfx::ImageSkiaOperations::CreateShadowNinebox(
- shadow->values, kRoundedCornerRadius);
- return *shadow;
-}
-
} // namespace
Shadow::Shadow() : desired_elevation_(ShadowElevation::NONE) {}
@@ -140,14 +100,14 @@ void Shadow::UpdateLayerBounds() {
// The ninebox assumption breaks down when the window is too small for the
// desired elevation. The height/width of |blur_region| will be 4 * elevation
- // (see GetDetailsForElevation), so cap elevation at the most we can handle.
+ // (see ShadowDetails::Get), so cap elevation at the most we can handle.
const int smaller_dimension =
std::min(content_bounds_.width(), content_bounds_.height());
const int size_adjusted_elevation =
std::min((smaller_dimension - 2 * kRoundedCornerRadius) / 4,
static_cast<int>(desired_elevation_));
- const ShadowDetails& details =
- GetDetailsForElevation(size_adjusted_elevation);
+ const auto& details =
+ gfx::ShadowDetails::Get(size_adjusted_elevation, kRoundedCornerRadius);
gfx::Insets blur_region = gfx::ShadowValue::GetBlurRegion(details.values) +
gfx::Insets(kRoundedCornerRadius);
if (size_adjusted_elevation != effective_elevation_) {
« no previous file with comments | « ui/views/border.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698