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:
Android (Google) Code Review
2009-07-30 08:16:09 -07:00
2 changed files with 26 additions and 16 deletions

View File

@ -4,15 +4,23 @@
#include <jni.h>
static void ThrowIAE_IfNull(JNIEnv* env, void* ptr) {
if (NULL == ptr) {
doThrowIAE(env);
}
}
class SkMaskFilterGlue {
public:
static void destructor(JNIEnv* env, jobject, SkMaskFilter* filter) {
SkASSERT(filter);
filter->unref();
SkSafeUnref(filter);
}
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) {
@ -24,8 +32,12 @@ public:
direction[i] = SkFloatToScalar(values[i]);
}
return SkBlurMaskFilter::CreateEmboss(direction, SkFloatToScalar(ambient),
SkFloatToScalar(specular), SkFloatToScalar(radius));
SkMaskFilter* filter = SkBlurMaskFilter::CreateEmboss(direction,
SkFloatToScalar(ambient),
SkFloatToScalar(specular),
SkFloatToScalar(radius));
ThrowIAE_IfNull(env, filter);
return filter;
}
};

View File

@ -43,25 +43,23 @@ static int Color_HSVToColor(JNIEnv* env, jobject, int alpha, jfloatArray hsvArra
static void Shader_destructor(JNIEnv* env, jobject, SkShader* shader)
{
SkASSERT(shader != NULL);
shader->unref();
SkSafeUnref(shader);
}
static bool Shader_getLocalMatrix(JNIEnv* env, jobject, const SkShader* shader, SkMatrix* matrix)
{
SkASSERT(shader != NULL);
return shader->getLocalMatrix(matrix);
return shader ? shader->getLocalMatrix(matrix) : false;
}
static void Shader_setLocalMatrix(JNIEnv* env, jobject, SkShader* shader, const SkMatrix* matrix)
{
SkASSERT(shader != NULL);
if (NULL == matrix) {
shader->resetLocalMatrix();
}
else {
shader->setLocalMatrix(*matrix);
if (shader) {
if (NULL == matrix) {
shader->resetLocalMatrix();
}
else {
shader->setLocalMatrix(*matrix);
}
}
}