static SkShader* SweepGradient_create1(JNIEnv* env, jobject, float x, float y, jintArray jcolors, jfloatArray jpositions) { size_t count = env->GetArrayLength(jcolors); const jint* colors = env->GetIntArrayElements(jcolors, NULL); SkAutoSTMalloc<8, SkScalar> storage(jpositions ? count : 0); SkScalar* pos = NULL; if (NULL != jpositions) { AutoJavaFloatArray autoPos(env, jpositions, count); const float* posValues = autoPos.ptr(); pos = (SkScalar*)storage.get(); for (size_t i = 0; i < count; i++) { pos[i] = SkFloatToScalar(posValues[i]); } } SkShader* shader = SkGradientShader::CreateSweep(SkFloatToScalar(x), SkFloatToScalar(y), reinterpret_cast<const SkColor*>(colors), pos, count); env->ReleaseIntArrayElements(jcolors, const_cast<jint*>(colors), JNI_ABORT); ThrowIAE_IfNull(env, shader); return shader; }
static SkShader* LinearGradient_create1(JNIEnv* env, jobject, float x0, float y0, float x1, float y1, jintArray colorArray, jfloatArray posArray, int tileMode) { SkPoint pts[2]; pts[0].set(SkFloatToScalar(x0), SkFloatToScalar(y0)); pts[1].set(SkFloatToScalar(x1), SkFloatToScalar(y1)); size_t count = env->GetArrayLength(colorArray); const jint* colorValues = env->GetIntArrayElements(colorArray, NULL); SkAutoSTMalloc<8, SkScalar> storage(posArray ? count : 0); SkScalar* pos = NULL; if (posArray) { AutoJavaFloatArray autoPos(env, posArray, count); const float* posValues = autoPos.ptr(); pos = (SkScalar*)storage.get(); for (size_t i = 0; i < count; i++) pos[i] = SkFloatToScalar(posValues[i]); } SkShader* shader = SkGradientShader::CreateLinear(pts, reinterpret_cast<const SkColor*>(colorValues), pos, count, static_cast<SkShader::TileMode>(tileMode)); env->ReleaseIntArrayElements(colorArray, const_cast<jint*>(colorValues), JNI_ABORT); ThrowIAE_IfNull(env, shader); return shader; }
static SkShader* BitmapShader_constructor(JNIEnv* env, jobject, const SkBitmap* bitmap, int tileModeX, int tileModeY) { SkShader* s = SkShader::CreateBitmapShader(*bitmap, (SkShader::TileMode)tileModeX, (SkShader::TileMode)tileModeY); ThrowIAE_IfNull(env, s); return s; }
static SkShader* SweepGradient_create2(JNIEnv* env, jobject, float x, float y, int color0, int color1) { SkColor colors[2]; colors[0] = color0; colors[1] = color1; SkShader* s = SkGradientShader::CreateSweep(SkFloatToScalar(x), SkFloatToScalar(y), colors, NULL, 2); ThrowIAE_IfNull(env, s); return s; }
static SkShader* RadialGradient_create2(JNIEnv* env, jobject, float x, float y, float radius, int color0, int color1, int tileMode) { SkPoint center; center.set(SkFloatToScalar(x), SkFloatToScalar(y)); SkColor colors[2]; colors[0] = color0; colors[1] = color1; SkShader* s = SkGradientShader::CreateRadial(center, SkFloatToScalar(radius), colors, NULL, 2, (SkShader::TileMode)tileMode); ThrowIAE_IfNull(env, s); return s; }
static SkShader* LinearGradient_create2(JNIEnv* env, jobject, float x0, float y0, float x1, float y1, int color0, int color1, int tileMode) { SkPoint pts[2]; pts[0].set(SkFloatToScalar(x0), SkFloatToScalar(y0)); pts[1].set(SkFloatToScalar(x1), SkFloatToScalar(y1)); SkColor colors[2]; colors[0] = color0; colors[1] = color1; SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, (SkShader::TileMode)tileMode); ThrowIAE_IfNull(env, s); return s; }
static SkMaskFilter* createEmboss(JNIEnv* env, jobject, jfloatArray dirArray, float ambient, float specular, float radius) { SkScalar direction[3]; AutoJavaFloatArray autoDir(env, dirArray, 3); float* values = autoDir.ptr(); for (int i = 0; i < 3; i++) { direction[i] = SkFloatToScalar(values[i]); } SkMaskFilter* filter = SkBlurMaskFilter::CreateEmboss(direction, SkFloatToScalar(ambient), SkFloatToScalar(specular), SkFloatToScalar(radius)); ThrowIAE_IfNull(env, filter); return filter; }
static SkMaskFilter* createBlur(JNIEnv* env, jobject, float radius, int blurStyle) { SkMaskFilter* filter = SkBlurMaskFilter::Create(SkFloatToScalar(radius), (SkBlurMaskFilter::BlurStyle)blurStyle); ThrowIAE_IfNull(env, filter); return filter; }
static jlong createBlur(JNIEnv* env, jobject, jfloat radius, jint blurStyle) { SkMaskFilter* filter = SkBlurMaskFilter::Create(SkFloatToScalar(radius), (SkBlurMaskFilter::BlurStyle)blurStyle); ThrowIAE_IfNull(env, filter); return reinterpret_cast<jlong>(filter); }