Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / ui / gfx / shadow_value.h
blobc0623f3d1e2a9b1c8fb34b3b9b3aef636fbc4cc3
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.
5 #ifndef UI_GFX_SHADOW_VALUE_H_
6 #define UI_GFX_SHADOW_VALUE_H_
8 #include <string>
9 #include <vector>
11 #include "third_party/skia/include/core/SkColor.h"
12 #include "ui/gfx/geometry/vector2d.h"
13 #include "ui/gfx/gfx_export.h"
15 namespace gfx {
17 class Insets;
19 class ShadowValue;
20 typedef std::vector<ShadowValue> ShadowValues;
22 // ShadowValue encapsulates parameters needed to define a shadow, including the
23 // shadow's offset, blur amount and color.
24 class GFX_EXPORT ShadowValue {
25 public:
26 ShadowValue();
27 ShadowValue(const gfx::Vector2d& offset, double blur, SkColor color);
28 ~ShadowValue();
30 int x() const { return offset_.x(); }
31 int y() const { return offset_.y(); }
32 const gfx::Vector2d& offset() const { return offset_; }
33 double blur() const { return blur_; }
34 SkColor color() const { return color_; }
36 ShadowValue Scale(float scale) const;
38 std::string ToString() const;
40 // Gets margin space needed for shadows. Note that values in returned Insets
41 // are negative because shadow margins are outside a boundary.
42 static Insets GetMargin(const ShadowValues& shadows);
44 private:
45 gfx::Vector2d offset_;
47 // Blur amount of the shadow in pixels. If underlying implementation supports
48 // (e.g. Skia), it can have fraction part such as 0.5 pixel. The value
49 // defines a range from full shadow color at the start point inside the
50 // shadow to fully transparent at the end point outside it. The range is
51 // perpendicular to and centered on the shadow edge. For example, a blur
52 // amount of 4.0 means to have a blurry shadow edge of 4 pixels that
53 // transitions from full shadow color to fully transparent and with 2 pixels
54 // inside the shadow and 2 pixels goes beyond the edge.
55 double blur_;
57 SkColor color_;
60 } // namespace gfx
62 #endif // UI_GFX_SHADOW_VALUE_H_