Merge change 9159 into donut
* changes: check for null native objects, which never happens on a real subclass (we throw in that case) but can happen because we allow the callers to create the base class from java.
This commit is contained in:
@ -4,15 +4,23 @@
|
|||||||
|
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
|
||||||
|
static void ThrowIAE_IfNull(JNIEnv* env, void* ptr) {
|
||||||
|
if (NULL == ptr) {
|
||||||
|
doThrowIAE(env);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class SkMaskFilterGlue {
|
class SkMaskFilterGlue {
|
||||||
public:
|
public:
|
||||||
static void destructor(JNIEnv* env, jobject, SkMaskFilter* filter) {
|
static void destructor(JNIEnv* env, jobject, SkMaskFilter* filter) {
|
||||||
SkASSERT(filter);
|
SkSafeUnref(filter);
|
||||||
filter->unref();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static SkMaskFilter* createBlur(JNIEnv* env, jobject, float radius, int blurStyle) {
|
static SkMaskFilter* createBlur(JNIEnv* env, jobject, float radius, int blurStyle) {
|
||||||
return SkBlurMaskFilter::Create(SkFloatToScalar(radius), (SkBlurMaskFilter::BlurStyle)blurStyle);
|
SkMaskFilter* filter = SkBlurMaskFilter::Create(SkFloatToScalar(radius),
|
||||||
|
(SkBlurMaskFilter::BlurStyle)blurStyle);
|
||||||
|
ThrowIAE_IfNull(env, filter);
|
||||||
|
return filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SkMaskFilter* createEmboss(JNIEnv* env, jobject, jfloatArray dirArray, float ambient, float specular, float radius) {
|
static SkMaskFilter* createEmboss(JNIEnv* env, jobject, jfloatArray dirArray, float ambient, float specular, float radius) {
|
||||||
@ -24,8 +32,12 @@ public:
|
|||||||
direction[i] = SkFloatToScalar(values[i]);
|
direction[i] = SkFloatToScalar(values[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SkBlurMaskFilter::CreateEmboss(direction, SkFloatToScalar(ambient),
|
SkMaskFilter* filter = SkBlurMaskFilter::CreateEmboss(direction,
|
||||||
SkFloatToScalar(specular), SkFloatToScalar(radius));
|
SkFloatToScalar(ambient),
|
||||||
|
SkFloatToScalar(specular),
|
||||||
|
SkFloatToScalar(radius));
|
||||||
|
ThrowIAE_IfNull(env, filter);
|
||||||
|
return filter;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -43,25 +43,23 @@ static int Color_HSVToColor(JNIEnv* env, jobject, int alpha, jfloatArray hsvArra
|
|||||||
|
|
||||||
static void Shader_destructor(JNIEnv* env, jobject, SkShader* shader)
|
static void Shader_destructor(JNIEnv* env, jobject, SkShader* shader)
|
||||||
{
|
{
|
||||||
SkASSERT(shader != NULL);
|
SkSafeUnref(shader);
|
||||||
shader->unref();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool Shader_getLocalMatrix(JNIEnv* env, jobject, const SkShader* shader, SkMatrix* matrix)
|
static bool Shader_getLocalMatrix(JNIEnv* env, jobject, const SkShader* shader, SkMatrix* matrix)
|
||||||
{
|
{
|
||||||
SkASSERT(shader != NULL);
|
return shader ? shader->getLocalMatrix(matrix) : false;
|
||||||
return shader->getLocalMatrix(matrix);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Shader_setLocalMatrix(JNIEnv* env, jobject, SkShader* shader, const SkMatrix* matrix)
|
static void Shader_setLocalMatrix(JNIEnv* env, jobject, SkShader* shader, const SkMatrix* matrix)
|
||||||
{
|
{
|
||||||
SkASSERT(shader != NULL);
|
if (shader) {
|
||||||
|
if (NULL == matrix) {
|
||||||
if (NULL == matrix) {
|
shader->resetLocalMatrix();
|
||||||
shader->resetLocalMatrix();
|
}
|
||||||
}
|
else {
|
||||||
else {
|
shader->setLocalMatrix(*matrix);
|
||||||
shader->setLocalMatrix(*matrix);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user