• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ui/gfx/shadow_value.h"
6 
7 #include <algorithm>
8 
9 #include "base/strings/stringprintf.h"
10 #include "ui/gfx/insets.h"
11 #include "ui/gfx/point_conversions.h"
12 
13 namespace gfx {
14 
ShadowValue()15 ShadowValue::ShadowValue()
16     : blur_(0),
17       color_(0) {
18 }
19 
ShadowValue(const gfx::Point & offset,double blur,SkColor color)20 ShadowValue::ShadowValue(const gfx::Point& offset,
21                          double blur,
22                          SkColor color)
23     : offset_(offset),
24       blur_(blur),
25       color_(color) {
26 }
27 
~ShadowValue()28 ShadowValue::~ShadowValue() {
29 }
30 
Scale(float scale) const31 ShadowValue ShadowValue::Scale(float scale) const {
32   gfx::Point scaled_offset =
33       gfx::ToFlooredPoint(gfx::ScalePoint(offset_, scale));
34   return ShadowValue(scaled_offset, blur_ * scale, color_);
35 }
36 
ToString() const37 std::string ShadowValue::ToString() const {
38   return base::StringPrintf(
39       "(%d,%d),%.2f,rgba(%d,%d,%d,%d)",
40       offset_.x(), offset_.y(),
41       blur_,
42       SkColorGetR(color_),
43       SkColorGetG(color_),
44       SkColorGetB(color_),
45       SkColorGetA(color_));
46 }
47 
48 // static
GetMargin(const ShadowValues & shadows)49 Insets ShadowValue::GetMargin(const ShadowValues& shadows) {
50   int left = 0;
51   int top = 0;
52   int right = 0;
53   int bottom = 0;
54 
55   for (size_t i = 0; i < shadows.size(); ++i) {
56     const ShadowValue& shadow = shadows[i];
57 
58     // Add 0.5 to round up to the next integer.
59     int blur = static_cast<int>(shadow.blur() / 2 + 0.5);
60 
61     left = std::max(left, blur - shadow.x());
62     top = std::max(top, blur - shadow.y());
63     right = std::max(right, blur + shadow.x());
64     bottom = std::max(bottom, blur + shadow.y());
65   }
66 
67   return Insets(-top, -left, -bottom, -right);
68 }
69 
70 }  // namespace gfx
71