コード例 #1
0
ファイル: Canvas.cpp プロジェクト: Abhishekh-TEL/pdroid
 static void doPoints(JNIEnv* env, jobject jcanvas, jfloatArray jptsArray,
                      jint offset, jint count, jobject jpaint,
                      SkCanvas::PointMode mode) {
     NPE_CHECK_RETURN_VOID(env, jcanvas);
     NPE_CHECK_RETURN_VOID(env, jptsArray);
     NPE_CHECK_RETURN_VOID(env, jpaint);
     SkCanvas* canvas = GraphicsJNI::getNativeCanvas(env, jcanvas);
     const SkPaint& paint = *GraphicsJNI::getNativePaint(env, jpaint);
     
     AutoJavaFloatArray autoPts(env, jptsArray);
     float* floats = autoPts.ptr();
     const int length = autoPts.length();
     
     if ((offset | count) < 0 || offset + count > length) {
         doThrowAIOOBE(env);
         return;
     }
     
     // now convert the floats into SkPoints
     count >>= 1;    // now it is the number of points
     SkAutoSTMalloc<32, SkPoint> storage(count);
     SkPoint* pts = storage.get();
     const float* src = floats + offset;
     for (int i = 0; i < count; i++) {
         pts[i].set(SkFloatToScalar(src[0]), SkFloatToScalar(src[1]));
         src += 2;
     }        
     canvas->drawPoints(mode, count, pts, paint);
 }
コード例 #2
0
static void drawLines(JNIEnv* env, jobject, jlong canvasHandle, jfloatArray jptsArray,
                      jint offset, jint count, jlong paintHandle) {
    NPE_CHECK_RETURN_VOID(env, jptsArray);
    AutoJavaFloatArray autoPts(env, jptsArray);
    float* floats = autoPts.ptr();
    const int length = autoPts.length();

    if ((offset | count) < 0 || offset + count > length) {
        doThrowAIOOBE(env);
        return;
    }

    const Paint* paint = reinterpret_cast<Paint*>(paintHandle);
    get_canvas(canvasHandle)->drawLines(floats + offset, count, *paint);
}