Loading api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -14250,6 +14250,10 @@ package android.graphics { enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID; } public final class BlurShader extends android.graphics.Shader { ctor public BlurShader(float, float, @Nullable android.graphics.Shader); } public class Camera { ctor public Camera(); method public void applyToCanvas(android.graphics.Canvas); graphics/java/android/graphics/BlurShader.java 0 → 100644 +65 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.graphics; import android.annotation.Nullable; /** * A subclass of shader that blurs input from another {@link android.graphics.Shader} instance * or all the drawing commands with the {@link android.graphics.Paint} that this shader is * attached to. */ public final class BlurShader extends Shader { private final float mRadiusX; private final float mRadiusY; private final Shader mInputShader; private long mNativeInputShader = 0; /** * Create a {@link BlurShader} that blurs the contents of the optional input shader * with the specified radius along the x and y axis. If no input shader is provided * then all drawing commands issued with a {@link android.graphics.Paint} that this * shader is installed in will be blurred * @param radiusX Radius of blur along the X axis * @param radiusY Radius of blur along the Y axis * @param inputShader Input shader that provides the content to be blurred */ public BlurShader(float radiusX, float radiusY, @Nullable Shader inputShader) { mRadiusX = radiusX; mRadiusY = radiusY; mInputShader = inputShader; } /** @hide **/ @Override protected long createNativeInstance(long nativeMatrix) { mNativeInputShader = mInputShader != null ? mInputShader.getNativeInstance() : 0; return nativeCreate(nativeMatrix, mRadiusX, mRadiusY, mNativeInputShader); } /** @hide **/ @Override protected boolean shouldDiscardNativeInstance() { long currentNativeInstance = mInputShader != null ? mInputShader.getNativeInstance() : 0; return mNativeInputShader != currentNativeInstance; } private static native long nativeCreate(long nativeMatrix, float radiusX, float radiusY, long inputShader); } libs/hwui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -464,6 +464,7 @@ cc_defaults { "RootRenderNode.cpp", "shader/Shader.cpp", "shader/BitmapShader.cpp", "shader/BlurShader.cpp", "shader/ComposeShader.cpp", "shader/LinearGradientShader.cpp", "shader/RadialGradientShader.cpp", Loading libs/hwui/jni/Shader.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #include "include/effects/SkRuntimeEffect.h" #include "shader/Shader.h" #include "shader/BitmapShader.h" #include "shader/BlurShader.h" #include "shader/ComposeShader.h" #include "shader/LinearGradientShader.h" #include "shader/RadialGradientShader.h" Loading Loading @@ -222,6 +223,22 @@ static jlong ComposeShader_create(JNIEnv* env, jobject o, jlong matrixPtr, /////////////////////////////////////////////////////////////////////////////////////////////// static jlong BlurShader_create(JNIEnv* env , jobject o, jlong matrixPtr, jfloat sigmaX, jfloat sigmaY, jlong shaderHandle) { auto* matrix = reinterpret_cast<const SkMatrix*>(matrixPtr); auto* inputShader = reinterpret_cast<Shader*>(shaderHandle); auto* blurShader = new BlurShader( sigmaX, sigmaY, inputShader, matrix ); return reinterpret_cast<jlong>(blurShader); } /////////////////////////////////////////////////////////////////////////////////////////////// static jlong RuntimeShader_create(JNIEnv* env, jobject, jlong shaderFactory, jlong matrixPtr, jbyteArray inputs, jlong colorSpaceHandle, jboolean isOpaque) { auto* effect = reinterpret_cast<SkRuntimeEffect*>(shaderFactory); Loading Loading @@ -273,6 +290,10 @@ static const JNINativeMethod gBitmapShaderMethods[] = { { "nativeCreate", "(JJII)J", (void*)BitmapShader_constructor }, }; static const JNINativeMethod gBlurShaderMethods[] = { { "nativeCreate", "(JFFJ)J", (void*)BlurShader_create } }; static const JNINativeMethod gLinearGradientMethods[] = { { "nativeCreate", "(JFFFF[J[FIJ)J", (void*)LinearGradient_create }, }; Loading Loading @@ -304,6 +325,8 @@ int register_android_graphics_Shader(JNIEnv* env) NELEM(gShaderMethods)); android::RegisterMethodsOrDie(env, "android/graphics/BitmapShader", gBitmapShaderMethods, NELEM(gBitmapShaderMethods)); android::RegisterMethodsOrDie(env, "android/graphics/BlurShader", gBlurShaderMethods, NELEM(gBlurShaderMethods)); android::RegisterMethodsOrDie(env, "android/graphics/LinearGradient", gLinearGradientMethods, NELEM(gLinearGradientMethods)); android::RegisterMethodsOrDie(env, "android/graphics/RadialGradient", gRadialGradientMethods, Loading libs/hwui/shader/BlurShader.cpp 0 → 100644 +38 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "BlurShader.h" #include "SkImageFilters.h" #include "SkRefCnt.h" #include "utils/Blur.h" namespace android::uirenderer { BlurShader::BlurShader(float radiusX, float radiusY, Shader* inputShader, const SkMatrix* matrix) : Shader(matrix) , skImageFilter( SkImageFilters::Blur( Blur::convertRadiusToSigma(radiusX), Blur::convertRadiusToSigma(radiusY), inputShader ? inputShader->asSkImageFilter() : nullptr) ) { } sk_sp<SkImageFilter> BlurShader::makeSkImageFilter() { return skImageFilter; } BlurShader::~BlurShader() {} } // namespace android::uirenderer No newline at end of file Loading
api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -14250,6 +14250,10 @@ package android.graphics { enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID; } public final class BlurShader extends android.graphics.Shader { ctor public BlurShader(float, float, @Nullable android.graphics.Shader); } public class Camera { ctor public Camera(); method public void applyToCanvas(android.graphics.Canvas);
graphics/java/android/graphics/BlurShader.java 0 → 100644 +65 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.graphics; import android.annotation.Nullable; /** * A subclass of shader that blurs input from another {@link android.graphics.Shader} instance * or all the drawing commands with the {@link android.graphics.Paint} that this shader is * attached to. */ public final class BlurShader extends Shader { private final float mRadiusX; private final float mRadiusY; private final Shader mInputShader; private long mNativeInputShader = 0; /** * Create a {@link BlurShader} that blurs the contents of the optional input shader * with the specified radius along the x and y axis. If no input shader is provided * then all drawing commands issued with a {@link android.graphics.Paint} that this * shader is installed in will be blurred * @param radiusX Radius of blur along the X axis * @param radiusY Radius of blur along the Y axis * @param inputShader Input shader that provides the content to be blurred */ public BlurShader(float radiusX, float radiusY, @Nullable Shader inputShader) { mRadiusX = radiusX; mRadiusY = radiusY; mInputShader = inputShader; } /** @hide **/ @Override protected long createNativeInstance(long nativeMatrix) { mNativeInputShader = mInputShader != null ? mInputShader.getNativeInstance() : 0; return nativeCreate(nativeMatrix, mRadiusX, mRadiusY, mNativeInputShader); } /** @hide **/ @Override protected boolean shouldDiscardNativeInstance() { long currentNativeInstance = mInputShader != null ? mInputShader.getNativeInstance() : 0; return mNativeInputShader != currentNativeInstance; } private static native long nativeCreate(long nativeMatrix, float radiusX, float radiusY, long inputShader); }
libs/hwui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -464,6 +464,7 @@ cc_defaults { "RootRenderNode.cpp", "shader/Shader.cpp", "shader/BitmapShader.cpp", "shader/BlurShader.cpp", "shader/ComposeShader.cpp", "shader/LinearGradientShader.cpp", "shader/RadialGradientShader.cpp", Loading
libs/hwui/jni/Shader.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #include "include/effects/SkRuntimeEffect.h" #include "shader/Shader.h" #include "shader/BitmapShader.h" #include "shader/BlurShader.h" #include "shader/ComposeShader.h" #include "shader/LinearGradientShader.h" #include "shader/RadialGradientShader.h" Loading Loading @@ -222,6 +223,22 @@ static jlong ComposeShader_create(JNIEnv* env, jobject o, jlong matrixPtr, /////////////////////////////////////////////////////////////////////////////////////////////// static jlong BlurShader_create(JNIEnv* env , jobject o, jlong matrixPtr, jfloat sigmaX, jfloat sigmaY, jlong shaderHandle) { auto* matrix = reinterpret_cast<const SkMatrix*>(matrixPtr); auto* inputShader = reinterpret_cast<Shader*>(shaderHandle); auto* blurShader = new BlurShader( sigmaX, sigmaY, inputShader, matrix ); return reinterpret_cast<jlong>(blurShader); } /////////////////////////////////////////////////////////////////////////////////////////////// static jlong RuntimeShader_create(JNIEnv* env, jobject, jlong shaderFactory, jlong matrixPtr, jbyteArray inputs, jlong colorSpaceHandle, jboolean isOpaque) { auto* effect = reinterpret_cast<SkRuntimeEffect*>(shaderFactory); Loading Loading @@ -273,6 +290,10 @@ static const JNINativeMethod gBitmapShaderMethods[] = { { "nativeCreate", "(JJII)J", (void*)BitmapShader_constructor }, }; static const JNINativeMethod gBlurShaderMethods[] = { { "nativeCreate", "(JFFJ)J", (void*)BlurShader_create } }; static const JNINativeMethod gLinearGradientMethods[] = { { "nativeCreate", "(JFFFF[J[FIJ)J", (void*)LinearGradient_create }, }; Loading Loading @@ -304,6 +325,8 @@ int register_android_graphics_Shader(JNIEnv* env) NELEM(gShaderMethods)); android::RegisterMethodsOrDie(env, "android/graphics/BitmapShader", gBitmapShaderMethods, NELEM(gBitmapShaderMethods)); android::RegisterMethodsOrDie(env, "android/graphics/BlurShader", gBlurShaderMethods, NELEM(gBlurShaderMethods)); android::RegisterMethodsOrDie(env, "android/graphics/LinearGradient", gLinearGradientMethods, NELEM(gLinearGradientMethods)); android::RegisterMethodsOrDie(env, "android/graphics/RadialGradient", gRadialGradientMethods, Loading
libs/hwui/shader/BlurShader.cpp 0 → 100644 +38 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "BlurShader.h" #include "SkImageFilters.h" #include "SkRefCnt.h" #include "utils/Blur.h" namespace android::uirenderer { BlurShader::BlurShader(float radiusX, float radiusY, Shader* inputShader, const SkMatrix* matrix) : Shader(matrix) , skImageFilter( SkImageFilters::Blur( Blur::convertRadiusToSigma(radiusX), Blur::convertRadiusToSigma(radiusY), inputShader ? inputShader->asSkImageFilter() : nullptr) ) { } sk_sp<SkImageFilter> BlurShader::makeSkImageFilter() { return skImageFilter; } BlurShader::~BlurShader() {} } // namespace android::uirenderer No newline at end of file