diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-05-12 15:45:25 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-05-12 15:45:25 -0700 |
commit | 807f23b2d8c7148cf6fc95bb88cfc2f78e4be66a (patch) | |
tree | a4ef7681cf3331f1f873bb8276f2aa867d841879 /core/jni/android | |
parent | 2bb3ea162a58c0f1dddccdbe68b64e02456f11f9 (diff) | |
parent | b10f138e125b5656e810901d14c5f956ff5d9b64 (diff) | |
download | frameworks_base-807f23b2d8c7148cf6fc95bb88cfc2f78e4be66a.zip frameworks_base-807f23b2d8c7148cf6fc95bb88cfc2f78e4be66a.tar.gz frameworks_base-807f23b2d8c7148cf6fc95bb88cfc2f78e4be66a.tar.bz2 |
Merge change 1057 into donut
* changes:
* Add regoin scaling for transparent support
Diffstat (limited to 'core/jni/android')
-rw-r--r-- | core/jni/android/graphics/Region.cpp | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/core/jni/android/graphics/Region.cpp b/core/jni/android/graphics/Region.cpp index 00d6cd9..1dc0314 100644 --- a/core/jni/android/graphics/Region.cpp +++ b/core/jni/android/graphics/Region.cpp @@ -102,6 +102,36 @@ static void Region_translate(JNIEnv* env, jobject region, int x, int y, jobject rgn->translate(x, y); } +// Scale the rectangle by given scale and set the reuslt to the dst. +static void scale_rect(SkIRect* dst, const SkIRect& src, float scale) { + dst->fLeft = (int)::roundf(src.fLeft * scale); + dst->fTop = (int)::roundf(src.fTop * scale); + dst->fRight = (int)::roundf(src.fRight * scale); + dst->fBottom = (int)::roundf(src.fBottom * scale); +} + +// Scale the region by given scale and set the reuslt to the dst. +// dest and src can be the same region instance. +static void scale_rgn(SkRegion* dst, const SkRegion& src, float scale) { + SkRegion tmp; + SkRegion::Iterator iter(src); + + for (; !iter.done(); iter.next()) { + SkIRect r; + scale_rect(&r, iter.rect(), scale); + tmp.op(r, SkRegion::kUnion_Op); + } + dst->swap(tmp); +} + +static void Region_scale(JNIEnv* env, jobject region, jfloat scale, jobject dst) { + SkRegion* rgn = GetSkRegion(env, region); + if (dst) + scale_rgn(GetSkRegion(env, dst), *rgn, scale); + else + scale_rgn(rgn, *rgn, scale); +} + //////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "Parcel.h" @@ -139,6 +169,13 @@ static jboolean Region_writeToParcel(JNIEnv* env, jobject clazz, const SkRegion* //////////////////////////////////////////////////////////////////////////////////////////////////////////// +static jboolean Region_equals(JNIEnv* env, jobject clazz, const SkRegion *r1, const SkRegion* r2) +{ + return (jboolean) (*r1 == *r2); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + struct RgnIterPair { SkRegion fRgn; // a copy of the caller's region SkRegion::Iterator fIter; // an iterator acting upon the copy (fRgn) @@ -206,10 +243,12 @@ static JNINativeMethod gRegionMethods[] = { { "quickContains", "(IIII)Z", (void*)Region_quickContains }, { "quickReject", "(IIII)Z", (void*)Region_quickRejectIIII }, { "quickReject", "(Landroid/graphics/Region;)Z", (void*)Region_quickRejectRgn }, + { "scale", "(FLandroid/graphics/Region;)V", (void*)Region_scale }, { "translate", "(IILandroid/graphics/Region;)V", (void*)Region_translate }, // parceling methods { "nativeCreateFromParcel", "(Landroid/os/Parcel;)I", (void*)Region_createFromParcel }, - { "nativeWriteToParcel", "(ILandroid/os/Parcel;)Z", (void*)Region_writeToParcel } + { "nativeWriteToParcel", "(ILandroid/os/Parcel;)Z", (void*)Region_writeToParcel }, + { "nativeEquals", "(II)Z", (void*)Region_equals }, }; int register_android_graphics_Region(JNIEnv* env); |