Frameworks changes to support latest Skia (r14729)
Required for a merge in external/skia
(I88b4d5cc81c357a8e223bd7860b1029590265200).
Includes two cherry-picks:
I456df543e1925b280f785c7b3bb81370157f9b09:
replace SkRasterizer* with NativeRasterizer* in JNI
I98adb200e023369d3ee75f21927fa98f23095a77:
Fix Paint.getFlags,setFlags wrt FILTER_BITMAP_FLAG
In Paint.setFlags(), turn FILTER_BITMAP_FLAG into a call to
SkPaint::setFilterLevel().
In Paint.getFlags(), read SkPaint::getFilterLevel() to determine
whether to include FILTER_BITMAP_FLAG in the result.
Fixes CTS tests with ToT Skia.
Change-Id: I2736f3f68683651574d79a169ff0ab563e0a469e
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index b0d5485..43e80dc 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -106,16 +106,33 @@
*dst = *src;
}
+ // Equivalent to the Java Paint's FILTER_BITMAP_FLAG.
+ static const uint32_t sFilterBitmapFlag = 0x02;
+
static jint getFlags(JNIEnv* env, jobject paint) {
NPE_CHECK_RETURN_ZERO(env, paint);
- int result;
- result = GraphicsJNI::getNativePaint(env, paint)->getFlags();
+ SkPaint* nativePaint = GraphicsJNI::getNativePaint(env, paint);
+ uint32_t result = nativePaint->getFlags();
+ result &= ~sFilterBitmapFlag; // Filtering no longer stored in this bit. Mask away.
+ if (nativePaint->getFilterLevel() != SkPaint::kNone_FilterLevel) {
+ result |= sFilterBitmapFlag;
+ }
return static_cast<jint>(result);
}
static void setFlags(JNIEnv* env, jobject paint, jint flags) {
NPE_CHECK_RETURN_VOID(env, paint);
- GraphicsJNI::getNativePaint(env, paint)->setFlags(flags);
+ SkPaint* nativePaint = GraphicsJNI::getNativePaint(env, paint);
+ // Instead of modifying 0x02, change the filter level.
+ nativePaint->setFilterLevel(flags & sFilterBitmapFlag
+ ? SkPaint::kLow_FilterLevel
+ : SkPaint::kNone_FilterLevel);
+ // Don't pass through filter flag, which is no longer stored in paint's flags.
+ flags &= ~sFilterBitmapFlag;
+ // Use the existing value for 0x02.
+ const uint32_t existing0x02Flag = nativePaint->getFlags() & sFilterBitmapFlag;
+ flags |= existing0x02Flag;
+ nativePaint->setFlags(flags);
}
static jint getHinting(JNIEnv* env, jobject paint) {
@@ -298,7 +315,7 @@
static jlong setRasterizer(JNIEnv* env, jobject clazz, jlong objHandle, jlong rasterizerHandle) {
SkPaint* obj = reinterpret_cast<SkPaint*>(objHandle);
- SkRasterizer* rasterizer = reinterpret_cast<SkRasterizer*>(rasterizerHandle);
+ SkAutoTUnref<SkRasterizer> rasterizer(GraphicsJNI::refNativeRasterizer(rasterizerHandle));
return reinterpret_cast<jlong>(obj->setRasterizer(rasterizer));
}