Loading core/java/android/view/DisplayListCanvas.java +23 −0 Original line number Original line Diff line number Diff line Loading @@ -221,6 +221,29 @@ public class DisplayListCanvas extends Canvas { // Drawing // Drawing /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // TODO: move to Canvas.java @Override public void drawPatch(NinePatch patch, Rect dst, Paint paint) { Bitmap bitmap = patch.getBitmap(); throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.getNativeInstance(); nDrawPatch(mNativeCanvasWrapper, bitmap, patch.mNativeChunk, dst.left, dst.top, dst.right, dst.bottom, nativePaint); } // TODO: move to Canvas.java @Override public void drawPatch(NinePatch patch, RectF dst, Paint paint) { Bitmap bitmap = patch.getBitmap(); throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.getNativeInstance(); nDrawPatch(mNativeCanvasWrapper, bitmap, patch.mNativeChunk, dst.left, dst.top, dst.right, dst.bottom, nativePaint); } private static native void nDrawPatch(long renderer, Bitmap bitmap, long chunk, float left, float top, float right, float bottom, long paint); public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, CanvasProperty<Float> radius, CanvasProperty<Paint> paint) { CanvasProperty<Float> radius, CanvasProperty<Paint> paint) { nDrawCircle(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(), nDrawCircle(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(), Loading core/jni/Android.mk +1 −0 Original line number Original line Diff line number Diff line Loading @@ -114,6 +114,7 @@ LOCAL_SRC_FILES:= \ android/graphics/MinikinUtils.cpp \ android/graphics/MinikinUtils.cpp \ android/graphics/Movie.cpp \ android/graphics/Movie.cpp \ android/graphics/NinePatch.cpp \ android/graphics/NinePatch.cpp \ android/graphics/NinePatchImpl.cpp \ android/graphics/NinePatchPeeker.cpp \ android/graphics/NinePatchPeeker.cpp \ android/graphics/Paint.cpp \ android/graphics/Paint.cpp \ android/graphics/PaintImpl.cpp \ android/graphics/PaintImpl.cpp \ Loading core/jni/android/graphics/NinePatch.cpp +74 −3 Original line number Original line Diff line number Diff line Loading @@ -29,11 +29,12 @@ #include "SkRegion.h" #include "SkRegion.h" #include "GraphicsJNI.h" #include "GraphicsJNI.h" #include "utils/NinePatch.h" #include "JNIHelp.h" #include "JNIHelp.h" #include "core_jni_helpers.h" #include "core_jni_helpers.h" extern void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, const SkBitmap& bitmap, const android::Res_png_9patch& chunk, const SkPaint* paint, SkRegion** outRegion); using namespace android; using namespace android; /** /** Loading Loading @@ -87,6 +88,72 @@ public: } } } } static void draw(JNIEnv* env, SkCanvas* canvas, SkRect& bounds, const SkBitmap& bitmap, Res_png_9patch* chunk, const SkPaint* paint, jint destDensity, jint srcDensity) { if (destDensity == srcDensity || destDensity == 0 || srcDensity == 0) { ALOGV("Drawing unscaled 9-patch: (%g,%g)-(%g,%g)", SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop), SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom)); NinePatch_Draw(canvas, bounds, bitmap, *chunk, paint, NULL); } else { canvas->save(); SkScalar scale = destDensity / (float)srcDensity; canvas->translate(bounds.fLeft, bounds.fTop); canvas->scale(scale, scale); bounds.fRight = (bounds.fRight-bounds.fLeft) / scale; bounds.fBottom = (bounds.fBottom-bounds.fTop) / scale; bounds.fLeft = bounds.fTop = 0; ALOGV("Drawing scaled 9-patch: (%g,%g)-(%g,%g) srcDensity=%d destDensity=%d", SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop), SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom), srcDensity, destDensity); NinePatch_Draw(canvas, bounds, bitmap, *chunk, paint, NULL); canvas->restore(); } } static void drawF(JNIEnv* env, jobject, jlong canvasHandle, jobject boundsRectF, jobject jbitmap, jlong chunkHandle, jlong paintHandle, jint destDensity, jint srcDensity) { SkCanvas* canvas = reinterpret_cast<Canvas*>(canvasHandle)->asSkCanvas(); Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); const Paint* paint = reinterpret_cast<Paint*>(paintHandle); SkASSERT(canvas); SkASSERT(boundsRectF); SkASSERT(chunk); // paint is optional SkBitmap bitmap; GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap); SkRect bounds; GraphicsJNI::jrectf_to_rect(env, boundsRectF, &bounds); draw(env, canvas, bounds, bitmap, chunk, paint, destDensity, srcDensity); } static void drawI(JNIEnv* env, jobject, jlong canvasHandle, jobject boundsRect, jobject jbitmap, jlong chunkHandle, jlong paintHandle, jint destDensity, jint srcDensity) { SkCanvas* canvas = reinterpret_cast<Canvas*>(canvasHandle)->asSkCanvas(); Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); const Paint* paint = reinterpret_cast<Paint*>(paintHandle); SkASSERT(canvas); SkASSERT(boundsRect); SkASSERT(chunk); // paint is optional SkBitmap bitmap; GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap); SkRect bounds; GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds); draw(env, canvas, bounds, bitmap, chunk, paint, destDensity, srcDensity); } static jlong getTransparentRegion(JNIEnv* env, jobject, jobject jbitmap, static jlong getTransparentRegion(JNIEnv* env, jobject, jobject jbitmap, jlong chunkHandle, jobject boundsRect) { jlong chunkHandle, jobject boundsRect) { Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); Loading @@ -99,7 +166,7 @@ public: GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds); GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds); SkRegion* region = NULL; SkRegion* region = NULL; NinePatch::Draw(NULL, bounds, bitmap, *chunk, NULL, ®ion); NinePatch_Draw(NULL, bounds, bitmap, *chunk, NULL, ®ion); return reinterpret_cast<jlong>(region); return reinterpret_cast<jlong>(region); } } Loading @@ -113,6 +180,10 @@ static JNINativeMethod gNinePatchMethods[] = { { "validateNinePatchChunk", "([B)J", { "validateNinePatchChunk", "([B)J", (void*) SkNinePatchGlue::validateNinePatchChunk }, (void*) SkNinePatchGlue::validateNinePatchChunk }, { "nativeFinalize", "(J)V", (void*) SkNinePatchGlue::finalize }, { "nativeFinalize", "(J)V", (void*) SkNinePatchGlue::finalize }, { "nativeDraw", "(JLandroid/graphics/RectF;Landroid/graphics/Bitmap;JJII)V", (void*) SkNinePatchGlue::drawF }, { "nativeDraw", "(JLandroid/graphics/Rect;Landroid/graphics/Bitmap;JJII)V", (void*) SkNinePatchGlue::drawI }, { "nativeGetTransparentRegion", "(Landroid/graphics/Bitmap;JLandroid/graphics/Rect;)J", { "nativeGetTransparentRegion", "(Landroid/graphics/Bitmap;JLandroid/graphics/Rect;)J", (void*) SkNinePatchGlue::getTransparentRegion } (void*) SkNinePatchGlue::getTransparentRegion } }; }; Loading libs/hwui/utils/NinePatchImpl.cpp→core/jni/android/graphics/NinePatchImpl.cpp +8 −8 Original line number Original line Diff line number Diff line Loading @@ -15,7 +15,11 @@ ** limitations under the License. ** limitations under the License. */ */ #include "utils/NinePatch.h" #define LOG_TAG "NinePatch" #define LOG_NDEBUG 1 #include <androidfw/ResourceTypes.h> #include <utils/Log.h> #include "SkBitmap.h" #include "SkBitmap.h" #include "SkCanvas.h" #include "SkCanvas.h" Loading @@ -26,8 +30,6 @@ #include <utils/Log.h> #include <utils/Log.h> namespace android { static const bool kUseTrace = true; static const bool kUseTrace = true; static bool gTrace = false; static bool gTrace = false; Loading Loading @@ -95,8 +97,8 @@ SkScalar calculateStretch(SkScalar boundsLimit, SkScalar startingPoint, return srcSpace * stretchySpaceRemaining / numStrechyPixelsRemaining; return srcSpace * stretchySpaceRemaining / numStrechyPixelsRemaining; } } void NinePatch::Draw(SkCanvas* canvas, const SkRect& bounds, void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, const SkBitmap& bitmap, const Res_png_9patch& chunk, const SkBitmap& bitmap, const android::Res_png_9patch& chunk, const SkPaint* paint, SkRegion** outRegion) { const SkPaint* paint, SkRegion** outRegion) { if (canvas && canvas->quickReject(bounds)) { if (canvas && canvas->quickReject(bounds)) { return; return; Loading Loading @@ -322,5 +324,3 @@ nextDiv: dstRightsHaveBeenCached = true; dstRightsHaveBeenCached = true; } } } } } // namespace android core/jni/android_graphics_Canvas.cpp +0 −38 Original line number Original line Diff line number Diff line Loading @@ -18,8 +18,6 @@ #include "GraphicsJNI.h" #include "GraphicsJNI.h" #include "core_jni_helpers.h" #include "core_jni_helpers.h" #include <androidfw/ResourceTypes.h> #include <Canvas.h> #include <Canvas.h> #include "SkDrawFilter.h" #include "SkDrawFilter.h" #include "SkGraphics.h" #include "SkGraphics.h" Loading Loading @@ -332,41 +330,6 @@ static void drawVertices(JNIEnv* env, jobject, jlong canvasHandle, indices, indexCount, *paint); indices, indexCount, *paint); } } static void drawNinePatch(JNIEnv* env, jlong canvasHandle, jobject jbitmap, jlong chunkHandle, jfloat left, jfloat top, jfloat right, jfloat bottom, jlong paintHandle, jint dstDensity, jint srcDensity) { Canvas* canvas = get_canvas(canvasHandle); SkBitmap bitmap; GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap); const android::Res_png_9patch* chunk = reinterpret_cast<android::Res_png_9patch*>(chunkHandle); const Paint* paint = reinterpret_cast<Paint*>(paintHandle); if (CC_LIKELY(dstDensity == srcDensity || dstDensity == 0 || srcDensity == 0)) { ALOGV("Drawing unscaled 9-patch: (%g,%g)-(%g,%g)", left, top, right, bottom); canvas->drawNinePatch(bitmap, *chunk, left, top, right, bottom, paint); } else { canvas->save(SkCanvas::kMatrixClip_SaveFlag); SkScalar scale = dstDensity / (float)srcDensity; canvas->translate(left, top); canvas->scale(scale, scale); Paint filteredPaint; if (paint) { filteredPaint = *paint; } filteredPaint.setFilterQuality(kLow_SkFilterQuality); ALOGV("Drawing scaled 9-patch: (0,0)-(%g,%g) srcDensity=%d destDensity=%d", (right-left)/scale, (bottom-top)/scale, srcDensity, dstDensity); canvas->drawNinePatch(bitmap, *chunk, 0, 0, (right-left)/scale, (bottom-top)/scale, &filteredPaint); canvas->restore(); } } static void drawBitmap(JNIEnv* env, jobject jcanvas, jlong canvasHandle, jobject jbitmap, static void drawBitmap(JNIEnv* env, jobject jcanvas, jlong canvasHandle, jobject jbitmap, jfloat left, jfloat top, jlong paintHandle, jint canvasDensity, jfloat left, jfloat top, jlong paintHandle, jint canvasDensity, jint screenDensity, jint bitmapDensity) { jint screenDensity, jint bitmapDensity) { Loading Loading @@ -788,7 +751,6 @@ static JNINativeMethod gMethods[] = { {"native_drawArc","(JFFFFFFZJ)V", (void*) CanvasJNI::drawArc}, {"native_drawArc","(JFFFFFFZJ)V", (void*) CanvasJNI::drawArc}, {"native_drawPath","(JJJ)V", (void*) CanvasJNI::drawPath}, {"native_drawPath","(JJJ)V", (void*) CanvasJNI::drawPath}, {"nativeDrawVertices", "(JII[FI[FI[II[SIIJ)V", (void*)CanvasJNI::drawVertices}, {"nativeDrawVertices", "(JII[FI[FI[II[SIIJ)V", (void*)CanvasJNI::drawVertices}, {"native_drawNinePatch", "(JLandroid/graphics/Bitmap;JFFFFJII)V", (void*)CanvasJNI::drawNinePatch}, {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFJIII)V", (void*) CanvasJNI::drawBitmap}, {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFJIII)V", (void*) CanvasJNI::drawBitmap}, {"nativeDrawBitmapMatrix", "(JLandroid/graphics/Bitmap;JJ)V", (void*)CanvasJNI::drawBitmapMatrix}, {"nativeDrawBitmapMatrix", "(JLandroid/graphics/Bitmap;JJ)V", (void*)CanvasJNI::drawBitmapMatrix}, {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFFFFFFFJII)V", (void*) CanvasJNI::drawBitmapRect}, {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFFFFFFFJII)V", (void*) CanvasJNI::drawBitmapRect}, Loading Loading
core/java/android/view/DisplayListCanvas.java +23 −0 Original line number Original line Diff line number Diff line Loading @@ -221,6 +221,29 @@ public class DisplayListCanvas extends Canvas { // Drawing // Drawing /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // TODO: move to Canvas.java @Override public void drawPatch(NinePatch patch, Rect dst, Paint paint) { Bitmap bitmap = patch.getBitmap(); throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.getNativeInstance(); nDrawPatch(mNativeCanvasWrapper, bitmap, patch.mNativeChunk, dst.left, dst.top, dst.right, dst.bottom, nativePaint); } // TODO: move to Canvas.java @Override public void drawPatch(NinePatch patch, RectF dst, Paint paint) { Bitmap bitmap = patch.getBitmap(); throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.getNativeInstance(); nDrawPatch(mNativeCanvasWrapper, bitmap, patch.mNativeChunk, dst.left, dst.top, dst.right, dst.bottom, nativePaint); } private static native void nDrawPatch(long renderer, Bitmap bitmap, long chunk, float left, float top, float right, float bottom, long paint); public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, CanvasProperty<Float> radius, CanvasProperty<Paint> paint) { CanvasProperty<Float> radius, CanvasProperty<Paint> paint) { nDrawCircle(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(), nDrawCircle(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(), Loading
core/jni/Android.mk +1 −0 Original line number Original line Diff line number Diff line Loading @@ -114,6 +114,7 @@ LOCAL_SRC_FILES:= \ android/graphics/MinikinUtils.cpp \ android/graphics/MinikinUtils.cpp \ android/graphics/Movie.cpp \ android/graphics/Movie.cpp \ android/graphics/NinePatch.cpp \ android/graphics/NinePatch.cpp \ android/graphics/NinePatchImpl.cpp \ android/graphics/NinePatchPeeker.cpp \ android/graphics/NinePatchPeeker.cpp \ android/graphics/Paint.cpp \ android/graphics/Paint.cpp \ android/graphics/PaintImpl.cpp \ android/graphics/PaintImpl.cpp \ Loading
core/jni/android/graphics/NinePatch.cpp +74 −3 Original line number Original line Diff line number Diff line Loading @@ -29,11 +29,12 @@ #include "SkRegion.h" #include "SkRegion.h" #include "GraphicsJNI.h" #include "GraphicsJNI.h" #include "utils/NinePatch.h" #include "JNIHelp.h" #include "JNIHelp.h" #include "core_jni_helpers.h" #include "core_jni_helpers.h" extern void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, const SkBitmap& bitmap, const android::Res_png_9patch& chunk, const SkPaint* paint, SkRegion** outRegion); using namespace android; using namespace android; /** /** Loading Loading @@ -87,6 +88,72 @@ public: } } } } static void draw(JNIEnv* env, SkCanvas* canvas, SkRect& bounds, const SkBitmap& bitmap, Res_png_9patch* chunk, const SkPaint* paint, jint destDensity, jint srcDensity) { if (destDensity == srcDensity || destDensity == 0 || srcDensity == 0) { ALOGV("Drawing unscaled 9-patch: (%g,%g)-(%g,%g)", SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop), SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom)); NinePatch_Draw(canvas, bounds, bitmap, *chunk, paint, NULL); } else { canvas->save(); SkScalar scale = destDensity / (float)srcDensity; canvas->translate(bounds.fLeft, bounds.fTop); canvas->scale(scale, scale); bounds.fRight = (bounds.fRight-bounds.fLeft) / scale; bounds.fBottom = (bounds.fBottom-bounds.fTop) / scale; bounds.fLeft = bounds.fTop = 0; ALOGV("Drawing scaled 9-patch: (%g,%g)-(%g,%g) srcDensity=%d destDensity=%d", SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop), SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom), srcDensity, destDensity); NinePatch_Draw(canvas, bounds, bitmap, *chunk, paint, NULL); canvas->restore(); } } static void drawF(JNIEnv* env, jobject, jlong canvasHandle, jobject boundsRectF, jobject jbitmap, jlong chunkHandle, jlong paintHandle, jint destDensity, jint srcDensity) { SkCanvas* canvas = reinterpret_cast<Canvas*>(canvasHandle)->asSkCanvas(); Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); const Paint* paint = reinterpret_cast<Paint*>(paintHandle); SkASSERT(canvas); SkASSERT(boundsRectF); SkASSERT(chunk); // paint is optional SkBitmap bitmap; GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap); SkRect bounds; GraphicsJNI::jrectf_to_rect(env, boundsRectF, &bounds); draw(env, canvas, bounds, bitmap, chunk, paint, destDensity, srcDensity); } static void drawI(JNIEnv* env, jobject, jlong canvasHandle, jobject boundsRect, jobject jbitmap, jlong chunkHandle, jlong paintHandle, jint destDensity, jint srcDensity) { SkCanvas* canvas = reinterpret_cast<Canvas*>(canvasHandle)->asSkCanvas(); Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); const Paint* paint = reinterpret_cast<Paint*>(paintHandle); SkASSERT(canvas); SkASSERT(boundsRect); SkASSERT(chunk); // paint is optional SkBitmap bitmap; GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap); SkRect bounds; GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds); draw(env, canvas, bounds, bitmap, chunk, paint, destDensity, srcDensity); } static jlong getTransparentRegion(JNIEnv* env, jobject, jobject jbitmap, static jlong getTransparentRegion(JNIEnv* env, jobject, jobject jbitmap, jlong chunkHandle, jobject boundsRect) { jlong chunkHandle, jobject boundsRect) { Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle); Loading @@ -99,7 +166,7 @@ public: GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds); GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds); SkRegion* region = NULL; SkRegion* region = NULL; NinePatch::Draw(NULL, bounds, bitmap, *chunk, NULL, ®ion); NinePatch_Draw(NULL, bounds, bitmap, *chunk, NULL, ®ion); return reinterpret_cast<jlong>(region); return reinterpret_cast<jlong>(region); } } Loading @@ -113,6 +180,10 @@ static JNINativeMethod gNinePatchMethods[] = { { "validateNinePatchChunk", "([B)J", { "validateNinePatchChunk", "([B)J", (void*) SkNinePatchGlue::validateNinePatchChunk }, (void*) SkNinePatchGlue::validateNinePatchChunk }, { "nativeFinalize", "(J)V", (void*) SkNinePatchGlue::finalize }, { "nativeFinalize", "(J)V", (void*) SkNinePatchGlue::finalize }, { "nativeDraw", "(JLandroid/graphics/RectF;Landroid/graphics/Bitmap;JJII)V", (void*) SkNinePatchGlue::drawF }, { "nativeDraw", "(JLandroid/graphics/Rect;Landroid/graphics/Bitmap;JJII)V", (void*) SkNinePatchGlue::drawI }, { "nativeGetTransparentRegion", "(Landroid/graphics/Bitmap;JLandroid/graphics/Rect;)J", { "nativeGetTransparentRegion", "(Landroid/graphics/Bitmap;JLandroid/graphics/Rect;)J", (void*) SkNinePatchGlue::getTransparentRegion } (void*) SkNinePatchGlue::getTransparentRegion } }; }; Loading
libs/hwui/utils/NinePatchImpl.cpp→core/jni/android/graphics/NinePatchImpl.cpp +8 −8 Original line number Original line Diff line number Diff line Loading @@ -15,7 +15,11 @@ ** limitations under the License. ** limitations under the License. */ */ #include "utils/NinePatch.h" #define LOG_TAG "NinePatch" #define LOG_NDEBUG 1 #include <androidfw/ResourceTypes.h> #include <utils/Log.h> #include "SkBitmap.h" #include "SkBitmap.h" #include "SkCanvas.h" #include "SkCanvas.h" Loading @@ -26,8 +30,6 @@ #include <utils/Log.h> #include <utils/Log.h> namespace android { static const bool kUseTrace = true; static const bool kUseTrace = true; static bool gTrace = false; static bool gTrace = false; Loading Loading @@ -95,8 +97,8 @@ SkScalar calculateStretch(SkScalar boundsLimit, SkScalar startingPoint, return srcSpace * stretchySpaceRemaining / numStrechyPixelsRemaining; return srcSpace * stretchySpaceRemaining / numStrechyPixelsRemaining; } } void NinePatch::Draw(SkCanvas* canvas, const SkRect& bounds, void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, const SkBitmap& bitmap, const Res_png_9patch& chunk, const SkBitmap& bitmap, const android::Res_png_9patch& chunk, const SkPaint* paint, SkRegion** outRegion) { const SkPaint* paint, SkRegion** outRegion) { if (canvas && canvas->quickReject(bounds)) { if (canvas && canvas->quickReject(bounds)) { return; return; Loading Loading @@ -322,5 +324,3 @@ nextDiv: dstRightsHaveBeenCached = true; dstRightsHaveBeenCached = true; } } } } } // namespace android
core/jni/android_graphics_Canvas.cpp +0 −38 Original line number Original line Diff line number Diff line Loading @@ -18,8 +18,6 @@ #include "GraphicsJNI.h" #include "GraphicsJNI.h" #include "core_jni_helpers.h" #include "core_jni_helpers.h" #include <androidfw/ResourceTypes.h> #include <Canvas.h> #include <Canvas.h> #include "SkDrawFilter.h" #include "SkDrawFilter.h" #include "SkGraphics.h" #include "SkGraphics.h" Loading Loading @@ -332,41 +330,6 @@ static void drawVertices(JNIEnv* env, jobject, jlong canvasHandle, indices, indexCount, *paint); indices, indexCount, *paint); } } static void drawNinePatch(JNIEnv* env, jlong canvasHandle, jobject jbitmap, jlong chunkHandle, jfloat left, jfloat top, jfloat right, jfloat bottom, jlong paintHandle, jint dstDensity, jint srcDensity) { Canvas* canvas = get_canvas(canvasHandle); SkBitmap bitmap; GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap); const android::Res_png_9patch* chunk = reinterpret_cast<android::Res_png_9patch*>(chunkHandle); const Paint* paint = reinterpret_cast<Paint*>(paintHandle); if (CC_LIKELY(dstDensity == srcDensity || dstDensity == 0 || srcDensity == 0)) { ALOGV("Drawing unscaled 9-patch: (%g,%g)-(%g,%g)", left, top, right, bottom); canvas->drawNinePatch(bitmap, *chunk, left, top, right, bottom, paint); } else { canvas->save(SkCanvas::kMatrixClip_SaveFlag); SkScalar scale = dstDensity / (float)srcDensity; canvas->translate(left, top); canvas->scale(scale, scale); Paint filteredPaint; if (paint) { filteredPaint = *paint; } filteredPaint.setFilterQuality(kLow_SkFilterQuality); ALOGV("Drawing scaled 9-patch: (0,0)-(%g,%g) srcDensity=%d destDensity=%d", (right-left)/scale, (bottom-top)/scale, srcDensity, dstDensity); canvas->drawNinePatch(bitmap, *chunk, 0, 0, (right-left)/scale, (bottom-top)/scale, &filteredPaint); canvas->restore(); } } static void drawBitmap(JNIEnv* env, jobject jcanvas, jlong canvasHandle, jobject jbitmap, static void drawBitmap(JNIEnv* env, jobject jcanvas, jlong canvasHandle, jobject jbitmap, jfloat left, jfloat top, jlong paintHandle, jint canvasDensity, jfloat left, jfloat top, jlong paintHandle, jint canvasDensity, jint screenDensity, jint bitmapDensity) { jint screenDensity, jint bitmapDensity) { Loading Loading @@ -788,7 +751,6 @@ static JNINativeMethod gMethods[] = { {"native_drawArc","(JFFFFFFZJ)V", (void*) CanvasJNI::drawArc}, {"native_drawArc","(JFFFFFFZJ)V", (void*) CanvasJNI::drawArc}, {"native_drawPath","(JJJ)V", (void*) CanvasJNI::drawPath}, {"native_drawPath","(JJJ)V", (void*) CanvasJNI::drawPath}, {"nativeDrawVertices", "(JII[FI[FI[II[SIIJ)V", (void*)CanvasJNI::drawVertices}, {"nativeDrawVertices", "(JII[FI[FI[II[SIIJ)V", (void*)CanvasJNI::drawVertices}, {"native_drawNinePatch", "(JLandroid/graphics/Bitmap;JFFFFJII)V", (void*)CanvasJNI::drawNinePatch}, {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFJIII)V", (void*) CanvasJNI::drawBitmap}, {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFJIII)V", (void*) CanvasJNI::drawBitmap}, {"nativeDrawBitmapMatrix", "(JLandroid/graphics/Bitmap;JJ)V", (void*)CanvasJNI::drawBitmapMatrix}, {"nativeDrawBitmapMatrix", "(JLandroid/graphics/Bitmap;JJ)V", (void*)CanvasJNI::drawBitmapMatrix}, {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFFFFFFFJII)V", (void*) CanvasJNI::drawBitmapRect}, {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFFFFFFFJII)V", (void*) CanvasJNI::drawBitmapRect}, Loading