Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c0369bf authored by John Reck's avatar John Reck
Browse files

Create colored shadows demo

Test: HwAccelerationTest demo
Bug: 68211332
Change-Id: Ia53a6ac2854570d0495b355bbebee1dcec2f47ba
parent ae5eb83a
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -353,6 +353,11 @@ public class RenderNode {
        return nHasShadow(mNativeRenderNode);
        return nHasShadow(mNativeRenderNode);
    }
    }


    /** setShadowColor */
    public boolean setShadowColor(int color) {
        return nSetShadowColor(mNativeRenderNode, color);
    }

    /**
    /**
     * Enables or disables clipping to the outline.
     * Enables or disables clipping to the outline.
     *
     *
@@ -910,6 +915,8 @@ public class RenderNode {
    @CriticalNative
    @CriticalNative
    private static native boolean nHasShadow(long renderNode);
    private static native boolean nHasShadow(long renderNode);
    @CriticalNative
    @CriticalNative
    private static native boolean nSetShadowColor(long renderNode, int color);
    @CriticalNative
    private static native boolean nSetClipToOutline(long renderNode, boolean clipToOutline);
    private static native boolean nSetClipToOutline(long renderNode, boolean clipToOutline);
    @CriticalNative
    @CriticalNative
    private static native boolean nSetRevealClip(long renderNode,
    private static native boolean nSetRevealClip(long renderNode,
+9 −0
Original line number Original line Diff line number Diff line
@@ -15182,6 +15182,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        return mRenderNode.hasShadow();
        return mRenderNode.hasShadow();
    }
    }
    /**
     * @hide
     */
    public void setShadowColor(@ColorInt int color) {
        if (mRenderNode.setShadowColor(color)) {
            invalidateViewProperty(true, true);
        }
    }
    /** @hide */
    /** @hide */
    public void setRevealClip(boolean shouldClip, float x, float y, float radius) {
    public void setRevealClip(boolean shouldClip, float x, float y, float radius) {
+5 −0
Original line number Original line Diff line number Diff line
@@ -174,6 +174,10 @@ static jboolean android_view_RenderNode_hasShadow(jlong renderNodePtr) {
    return renderNode->stagingProperties().hasShadow();
    return renderNode->stagingProperties().hasShadow();
}
}


static jboolean android_view_RenderNode_setShadowColor(jlong renderNodePtr, jint shadowColor) {
    return SET_AND_DIRTY(setShadowColor, static_cast<SkColor>(shadowColor), RenderNode::GENERIC);
}

static jboolean android_view_RenderNode_setClipToOutline(jlong renderNodePtr,
static jboolean android_view_RenderNode_setClipToOutline(jlong renderNodePtr,
        jboolean clipToOutline) {
        jboolean clipToOutline) {
    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
@@ -571,6 +575,7 @@ static const JNINativeMethod gMethods[] = {
    { "nSetOutlineEmpty",      "(J)Z",   (void*) android_view_RenderNode_setOutlineEmpty },
    { "nSetOutlineEmpty",      "(J)Z",   (void*) android_view_RenderNode_setOutlineEmpty },
    { "nSetOutlineNone",       "(J)Z",   (void*) android_view_RenderNode_setOutlineNone },
    { "nSetOutlineNone",       "(J)Z",   (void*) android_view_RenderNode_setOutlineNone },
    { "nHasShadow",            "(J)Z",   (void*) android_view_RenderNode_hasShadow },
    { "nHasShadow",            "(J)Z",   (void*) android_view_RenderNode_hasShadow },
    { "nSetShadowColor",       "(JI)Z",  (void*) android_view_RenderNode_setShadowColor },
    { "nSetClipToOutline",     "(JZ)Z",  (void*) android_view_RenderNode_setClipToOutline },
    { "nSetClipToOutline",     "(JZ)Z",  (void*) android_view_RenderNode_setClipToOutline },
    { "nSetRevealClip",        "(JZFFF)Z", (void*) android_view_RenderNode_setRevealClip },
    { "nSetRevealClip",        "(JZFFF)Z", (void*) android_view_RenderNode_setRevealClip },


+10 −0
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@


#include <SkBlendMode.h>
#include <SkBlendMode.h>
#include <SkCamera.h>
#include <SkCamera.h>
#include <SkColor.h>
#include <SkMatrix.h>
#include <SkMatrix.h>
#include <SkRegion.h>
#include <SkRegion.h>


@@ -506,6 +507,14 @@ public:
               getOutline().getAlpha() != 0.0f;
               getOutline().getAlpha() != 0.0f;
    }
    }


    SkColor getShadowColor() const {
        return mPrimitiveFields.mShadowColor;
    }

    bool setShadowColor(SkColor shadowColor) {
        return RP_SET(mPrimitiveFields.mShadowColor, shadowColor);
    }

    bool fitsOnLayer() const {
    bool fitsOnLayer() const {
        const DeviceInfo* deviceInfo = DeviceInfo::get();
        const DeviceInfo* deviceInfo = DeviceInfo::get();
        return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize() &&
        return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize() &&
@@ -529,6 +538,7 @@ private:
        int mLeft = 0, mTop = 0, mRight = 0, mBottom = 0;
        int mLeft = 0, mTop = 0, mRight = 0, mBottom = 0;
        int mWidth = 0, mHeight = 0;
        int mWidth = 0, mHeight = 0;
        int mClippingFlags = CLIP_TO_BOUNDS;
        int mClippingFlags = CLIP_TO_BOUNDS;
        SkColor mShadowColor = SK_ColorBLACK;
        float mAlpha = 1;
        float mAlpha = 1;
        float mTranslationX = 0, mTranslationY = 0, mTranslationZ = 0;
        float mTranslationX = 0, mTranslationY = 0, mTranslationZ = 0;
        float mElevation = 0;
        float mElevation = 0;
+1 −1
Original line number Original line Diff line number Diff line
@@ -189,7 +189,7 @@ void EndReorderBarrierDrawable::drawShadow(SkCanvas* canvas, RenderNodeDrawable*
    }
    }
    SkShadowUtils::DrawShadow(
    SkShadowUtils::DrawShadow(
            canvas, *casterPath, zParams, skiaLightPos, SkiaPipeline::getLightRadius(),
            canvas, *casterPath, zParams, skiaLightPos, SkiaPipeline::getLightRadius(),
            ambientAlpha, spotAlpha, SK_ColorBLACK,
            ambientAlpha, spotAlpha, casterProperties.getShadowColor(),
            casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0);
            casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0);
}
}


Loading