Slide 113
Slide 113 text
// engine/flow/layers/physical_shape_layer.cc
#include "third_party/skia/include/utils/SkShadowUtils.h"
namespace flow {
//...
void PhysicalShapeLayer::DrawShadow(
SkCanvas* canvas, const SkPath& path, SkColor color,
float elevation, bool transparentOccluder, SkScalar dpr
) {
// ...
SkShadowFlags flags = // ...
const SkRect& bounds = path.getBounds();
SkScalar shadow_x = (bounds.left() + bounds.right()) / 2;
SkScalar shadow_y = bounds.top() - 600.0f;
SkColor inAmbient = SkColorSetA(color, kAmbientAlpha * SkColorGetA(color));
SkColor inSpot = SkColorSetA(color, kSpotAlpha * SkColorGetA(color));
SkColor ambientColor, spotColor;
SkShadowUtils::ComputeTonalColors(inAmbient, inSpot,
&ambientColor, &spotColor);
SkShadowUtils::DrawShadow(canvas, path, SkPoint3::Make(0, 0, dpr * elevation),
SkPoint3::Make(shadow_x, shadow_y, dpr * kLightHeight),
dpr * kLightRadius, ambientColor, spotColor, flags);
}
// ...
}