|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "ui/gfx/shadow_value.h" | 
|  |  | 
|  | #include <algorithm> | 
|  |  | 
|  | #include "base/strings/stringprintf.h" | 
|  | #include "ui/gfx/geometry/insets.h" | 
|  | #include "ui/gfx/geometry/vector2d_conversions.h" | 
|  |  | 
|  | namespace gfx { | 
|  |  | 
|  | ShadowValue::ShadowValue() : blur_(0), color_(0) { | 
|  | } | 
|  |  | 
|  | ShadowValue::ShadowValue(const gfx::Vector2d& offset, | 
|  | double blur, | 
|  | SkColor color) | 
|  | : offset_(offset), blur_(blur), color_(color) { | 
|  | } | 
|  |  | 
|  | ShadowValue::~ShadowValue() { | 
|  | } | 
|  |  | 
|  | ShadowValue ShadowValue::Scale(float scale) const { | 
|  | gfx::Vector2d scaled_offset = | 
|  | gfx::ToFlooredVector2d(gfx::ScaleVector2d(offset_, scale)); | 
|  | return ShadowValue(scaled_offset, blur_ * scale, color_); | 
|  | } | 
|  |  | 
|  | std::string ShadowValue::ToString() const { | 
|  | return base::StringPrintf("(%d,%d),%.2f,rgba(%d,%d,%d,%d)", offset_.x(), | 
|  | offset_.y(), blur_, SkColorGetR(color_), | 
|  | SkColorGetG(color_), SkColorGetB(color_), | 
|  | SkColorGetA(color_)); | 
|  | } | 
|  |  | 
|  | // static | 
|  | Insets ShadowValue::GetMargin(const ShadowValues& shadows) { | 
|  | int left = 0; | 
|  | int top = 0; | 
|  | int right = 0; | 
|  | int bottom = 0; | 
|  |  | 
|  | for (size_t i = 0; i < shadows.size(); ++i) { | 
|  | const ShadowValue& shadow = shadows[i]; | 
|  |  | 
|  | // Add 0.5 to round up to the next integer. | 
|  | int blur = static_cast<int>(shadow.blur() / 2 + 0.5); | 
|  |  | 
|  | left = std::max(left, blur - shadow.x()); | 
|  | top = std::max(top, blur - shadow.y()); | 
|  | right = std::max(right, blur + shadow.x()); | 
|  | bottom = std::max(bottom, blur + shadow.y()); | 
|  | } | 
|  |  | 
|  | return Insets(-top, -left, -bottom, -right); | 
|  | } | 
|  |  | 
|  | }  // namespace gfx |