diff options
| author | 2018-01-31 23:17:12 +0000 | |
|---|---|---|
| committer | 2018-01-31 23:17:12 +0000 | |
| commit | 70f93ee6737ae1e5c0e39841d6e66cfc1792a48c (patch) | |
| tree | e62de47d1f309ce087a33156fa64199fb0edc5c6 /libs | |
| parent | b0c854ef9945c3f1713927d87c5ee82cba343a23 (diff) | |
| parent | d8be4a0abe7e2439813b384482346d1ccf11ef53 (diff) | |
Merge "Add API to set tonal shadow color"
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/hwui/RenderProperties.h | 19 | ||||
| -rw-r--r-- | libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp | 8 |
2 files changed, 21 insertions, 6 deletions
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h index 3d2c2520624b..55f4d895265c 100644 --- a/libs/hwui/RenderProperties.h +++ b/libs/hwui/RenderProperties.h @@ -507,12 +507,20 @@ public: getOutline().getAlpha() != 0.0f; } - SkColor getShadowColor() const { - return mPrimitiveFields.mShadowColor; + SkColor getSpotShadowColor() const { + return mPrimitiveFields.mSpotShadowColor; } - bool setShadowColor(SkColor shadowColor) { - return RP_SET(mPrimitiveFields.mShadowColor, shadowColor); + bool setSpotShadowColor(SkColor shadowColor) { + return RP_SET(mPrimitiveFields.mSpotShadowColor, shadowColor); + } + + SkColor getAmbientShadowColor() const { + return mPrimitiveFields.mAmbientShadowColor; + } + + bool setAmbientShadowColor(SkColor shadowColor) { + return RP_SET(mPrimitiveFields.mAmbientShadowColor, shadowColor); } bool fitsOnLayer() const { @@ -538,7 +546,8 @@ private: int mLeft = 0, mTop = 0, mRight = 0, mBottom = 0; int mWidth = 0, mHeight = 0; int mClippingFlags = CLIP_TO_BOUNDS; - SkColor mShadowColor = SK_ColorBLACK; + SkColor mSpotShadowColor = SK_ColorBLACK; + SkColor mAmbientShadowColor = SK_ColorBLACK; float mAlpha = 1; float mTranslationX = 0, mTranslationY = 0, mTranslationZ = 0; float mElevation = 0; diff --git a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp index 7b59ccf3eec7..25c51f2716e6 100644 --- a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp +++ b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp @@ -111,6 +111,10 @@ void EndReorderBarrierDrawable::onDraw(SkCanvas* canvas) { } } +static SkColor multiplyAlpha(SkColor color, float alpha) { + return SkColorSetA(color, alpha * SkColorGetA(color)); +} + // copied from FrameBuilder::deferShadow void EndReorderBarrierDrawable::drawShadow(SkCanvas* canvas, RenderNodeDrawable* caster) { const RenderProperties& casterProperties = caster->getNodeProperties(); @@ -187,9 +191,11 @@ void EndReorderBarrierDrawable::drawShadow(SkCanvas* canvas, RenderNodeDrawable* } else { zParams = SkPoint3::Make(0, 0, casterProperties.getZ()); } + SkColor ambientColor = multiplyAlpha(casterProperties.getAmbientShadowColor(), ambientAlpha); + SkColor spotColor = multiplyAlpha(casterProperties.getSpotShadowColor(), spotAlpha); SkShadowUtils::DrawShadow( canvas, *casterPath, zParams, skiaLightPos, SkiaPipeline::getLightRadius(), - ambientAlpha, spotAlpha, casterProperties.getShadowColor(), + ambientColor, spotColor, casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0); } |