Path.cpp revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* libs/android_runtime/android/graphics/Path.cpp 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2006, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// This file was generated from the C++ include file: SkPath.h 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Any changes made to this file will be discarded by the build. 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// To change this file, either edit the include, or device/tools/gluemaker/main.cpp, 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// or one of the auxilary file specifications in device/tools/gluemaker. 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "jni.h" 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "GraphicsJNI.h" 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <android_runtime/AndroidRuntime.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkPath.h" 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SkPathGlue { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void finalizer(JNIEnv* env, jobject clazz, SkPath* obj) { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project delete obj; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPath* init1(JNIEnv* env, jobject clazz) { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkPath(); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPath* init2(JNIEnv* env, jobject clazz, SkPath* val) { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkPath(*val); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void reset(JNIEnv* env, jobject clazz, SkPath* obj) { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->reset(); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rewind(JNIEnv* env, jobject clazz, SkPath* obj) { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rewind(); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void assign(JNIEnv* env, jobject clazz, SkPath* dst, const SkPath* src) { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *dst = *src; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getFillType(JNIEnv* env, jobject clazz, SkPath* obj) { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->getFillType(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setFillType(JNIEnv* env, jobject clazz, SkPath* path, 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPath::FillType ft) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project path->setFillType(ft); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jboolean isEmpty(JNIEnv* env, jobject clazz, SkPath* obj) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->isEmpty(); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jboolean isRect(JNIEnv* env, jobject clazz, SkPath* obj, jobject rect) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect rect_; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jboolean result = obj->isRect(&rect_); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::rect_to_jrectf(rect_, env, rect); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void computeBounds(JNIEnv* env, jobject clazz, SkPath* obj, jobject bounds, SkPath::BoundsType btype) { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect bounds_; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->computeBounds(&bounds_, btype); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::rect_to_jrectf(bounds_, env, bounds); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void incReserve(JNIEnv* env, jobject clazz, SkPath* obj, jint extraPtCount) { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->incReserve(extraPtCount); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void moveTo__FF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x, jfloat y) { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x_ = SkFloatToScalar(x); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y_ = SkFloatToScalar(y); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->moveTo(x_, y_); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rMoveTo(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy) { 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rMoveTo(dx_, dy_); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void lineTo__FF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x, jfloat y) { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x_ = SkFloatToScalar(x); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y_ = SkFloatToScalar(y); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->lineTo(x_, y_); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rLineTo(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy) { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rLineTo(dx_, dy_); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void quadTo__FFFF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x1, jfloat y1, jfloat x2, jfloat y2) { 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x1_ = SkFloatToScalar(x1); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y1_ = SkFloatToScalar(y1); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x2_ = SkFloatToScalar(x2); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y2_ = SkFloatToScalar(y2); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->quadTo(x1_, y1_, x2_, y2_); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rQuadTo(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx1, jfloat dy1, jfloat dx2, jfloat dy2) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx1_ = SkFloatToScalar(dx1); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy1_ = SkFloatToScalar(dy1); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx2_ = SkFloatToScalar(dx2); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy2_ = SkFloatToScalar(dy2); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rQuadTo(dx1_, dy1_, dx2_, dy2_); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void cubicTo__FFFFFF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat x3, jfloat y3) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x1_ = SkFloatToScalar(x1); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y1_ = SkFloatToScalar(y1); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x2_ = SkFloatToScalar(x2); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y2_ = SkFloatToScalar(y2); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x3_ = SkFloatToScalar(x3); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y3_ = SkFloatToScalar(y3); 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->cubicTo(x1_, y1_, x2_, y2_, x3_, y3_); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rCubicTo(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat x3, jfloat y3) { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x1_ = SkFloatToScalar(x1); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y1_ = SkFloatToScalar(y1); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x2_ = SkFloatToScalar(x2); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y2_ = SkFloatToScalar(y2); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x3_ = SkFloatToScalar(x3); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y3_ = SkFloatToScalar(y3); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rCubicTo(x1_, y1_, x2_, y2_, x3_, y3_); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void arcTo(JNIEnv* env, jobject clazz, SkPath* obj, jobject oval, jfloat startAngle, jfloat sweepAngle, jboolean forceMoveTo) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect oval_; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, oval, &oval_); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar startAngle_ = SkFloatToScalar(startAngle); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar sweepAngle_ = SkFloatToScalar(sweepAngle); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->arcTo(oval_, startAngle_, sweepAngle_, forceMoveTo); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void close(JNIEnv* env, jobject clazz, SkPath* obj) { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->close(); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addRect__RectFI(JNIEnv* env, jobject clazz, SkPath* obj, jobject rect, SkPath::Direction dir) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect rect_; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, rect, &rect_); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addRect(rect_, dir); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addRect__FFFFI(JNIEnv* env, jobject clazz, SkPath* obj, jfloat left, jfloat top, jfloat right, jfloat bottom, SkPath::Direction dir) { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar left_ = SkFloatToScalar(left); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar top_ = SkFloatToScalar(top); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar right_ = SkFloatToScalar(right); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar bottom_ = SkFloatToScalar(bottom); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addRect(left_, top_, right_, bottom_, dir); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addOval(JNIEnv* env, jobject clazz, SkPath* obj, jobject oval, SkPath::Direction dir) { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect oval_; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, oval, &oval_); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addOval(oval_, dir); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addCircle(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x, jfloat y, jfloat radius, SkPath::Direction dir) { 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x_ = SkFloatToScalar(x); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y_ = SkFloatToScalar(y); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar radius_ = SkFloatToScalar(radius); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addCircle(x_, y_, radius_, dir); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addArc(JNIEnv* env, jobject clazz, SkPath* obj, jobject oval, jfloat startAngle, jfloat sweepAngle) { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect oval_; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, oval, &oval_); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar startAngle_ = SkFloatToScalar(startAngle); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar sweepAngle_ = SkFloatToScalar(sweepAngle); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addArc(oval_, startAngle_, sweepAngle_); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addRoundRectXY(JNIEnv* env, jobject clazz, SkPath* obj, jobject rect, 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloat rx, jfloat ry, SkPath::Direction dir) { 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect rect_; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, rect, &rect_); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar rx_ = SkFloatToScalar(rx); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar ry_ = SkFloatToScalar(ry); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addRoundRect(rect_, rx_, ry_, dir); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addRoundRect8(JNIEnv* env, jobject, SkPath* obj, jobject rect, 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloatArray array, SkPath::Direction dir) { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect rect_; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, rect, &rect_); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoJavaFloatArray afa(env, array, 8); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const float* src = afa.ptr(); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dst[8]; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 8; i++) { 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dst[i] = SkFloatToScalar(src[i]); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addRoundRect(rect_, dst, dir); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addPath__PathFF(JNIEnv* env, jobject clazz, SkPath* obj, SkPath* src, jfloat dx, jfloat dy) { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addPath(*src, dx_, dy_); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addPath__Path(JNIEnv* env, jobject clazz, SkPath* obj, SkPath* src) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addPath(*src); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addPath__PathMatrix(JNIEnv* env, jobject clazz, SkPath* obj, SkPath* src, SkMatrix* matrix) { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addPath(*src, *matrix); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void offset__FFPath(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy, SkPath* dst) { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->offset(dx_, dy_, dst); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void offset__FF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy) { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->offset(dx_, dy_); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setLastPoint(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy) { 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->setLastPt(dx_, dy_); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void transform__MatrixPath(JNIEnv* env, jobject clazz, SkPath* obj, SkMatrix* matrix, SkPath* dst) { 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->transform(*matrix, dst); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void transform__Matrix(JNIEnv* env, jobject clazz, SkPath* obj, SkMatrix* matrix) { 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->transform(*matrix); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod methods[] = { 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"finalizer", "(I)V", (void*) SkPathGlue::finalizer}, 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"init1","()I", (void*) SkPathGlue::init1}, 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"init2","(I)I", (void*) SkPathGlue::init2}, 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_reset","(I)V", (void*) SkPathGlue::reset}, 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rewind","(I)V", (void*) SkPathGlue::rewind}, 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_set","(II)V", (void*) SkPathGlue::assign}, 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getFillType","(I)I", (void*) SkPathGlue::getFillType}, 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setFillType","(II)V", (void*) SkPathGlue::setFillType}, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_isEmpty","(I)Z", (void*) SkPathGlue::isEmpty}, 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_isRect","(ILandroid/graphics/RectF;)Z", (void*) SkPathGlue::isRect}, 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_computeBounds","(ILandroid/graphics/RectF;I)V", (void*) SkPathGlue::computeBounds}, 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_incReserve","(II)V", (void*) SkPathGlue::incReserve}, 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_moveTo","(IFF)V", (void*) SkPathGlue::moveTo__FF}, 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rMoveTo","(IFF)V", (void*) SkPathGlue::rMoveTo}, 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_lineTo","(IFF)V", (void*) SkPathGlue::lineTo__FF}, 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rLineTo","(IFF)V", (void*) SkPathGlue::rLineTo}, 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_quadTo","(IFFFF)V", (void*) SkPathGlue::quadTo__FFFF}, 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rQuadTo","(IFFFF)V", (void*) SkPathGlue::rQuadTo}, 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_cubicTo","(IFFFFFF)V", (void*) SkPathGlue::cubicTo__FFFFFF}, 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rCubicTo","(IFFFFFF)V", (void*) SkPathGlue::rCubicTo}, 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_arcTo","(ILandroid/graphics/RectF;FFZ)V", (void*) SkPathGlue::arcTo}, 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_close","(I)V", (void*) SkPathGlue::close}, 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addRect","(ILandroid/graphics/RectF;I)V", (void*) SkPathGlue::addRect__RectFI}, 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addRect","(IFFFFI)V", (void*) SkPathGlue::addRect__FFFFI}, 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addOval","(ILandroid/graphics/RectF;I)V", (void*) SkPathGlue::addOval}, 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addCircle","(IFFFI)V", (void*) SkPathGlue::addCircle}, 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addArc","(ILandroid/graphics/RectF;FF)V", (void*) SkPathGlue::addArc}, 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addRoundRect","(ILandroid/graphics/RectF;FFI)V", (void*) SkPathGlue::addRoundRectXY}, 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addRoundRect","(ILandroid/graphics/RectF;[FI)V", (void*) SkPathGlue::addRoundRect8}, 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addPath","(IIFF)V", (void*) SkPathGlue::addPath__PathFF}, 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addPath","(II)V", (void*) SkPathGlue::addPath__Path}, 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addPath","(III)V", (void*) SkPathGlue::addPath__PathMatrix}, 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_offset","(IFFI)V", (void*) SkPathGlue::offset__FFPath}, 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_offset","(IFF)V", (void*) SkPathGlue::offset__FF}, 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setLastPoint","(IFF)V", (void*) SkPathGlue::setLastPoint}, 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_transform","(III)V", (void*) SkPathGlue::transform__MatrixPath}, 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_transform","(II)V", (void*) SkPathGlue::transform__Matrix} 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_graphics_Path(JNIEnv* env) { 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result = AndroidRuntime::registerNativeMethods(env, "android/graphics/Path", methods, 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sizeof(methods) / sizeof(methods[0])); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 307