Path.cpp revision 5a7e828842c26f64bb6e0ef3e0019e1949b245ee
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 29a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy#include <Caches.h> 30a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SkPathGlue { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void finalizer(JNIEnv* env, jobject clazz, SkPath* obj) { 37a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy#ifdef USE_OPENGL_RENDERER 38a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy if (android::uirenderer::Caches::hasInstance()) { 395a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase android::uirenderer::Caches::getInstance().resourceCache.destructor(obj); 405a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase return; 41a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy } 42a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy#endif 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project delete obj; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPath* init1(JNIEnv* env, jobject clazz) { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkPath(); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPath* init2(JNIEnv* env, jobject clazz, SkPath* val) { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkPath(*val); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void reset(JNIEnv* env, jobject clazz, SkPath* obj) { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->reset(); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rewind(JNIEnv* env, jobject clazz, SkPath* obj) { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rewind(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void assign(JNIEnv* env, jobject clazz, SkPath* dst, const SkPath* src) { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *dst = *src; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getFillType(JNIEnv* env, jobject clazz, SkPath* obj) { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->getFillType(); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setFillType(JNIEnv* env, jobject clazz, SkPath* path, 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPath::FillType ft) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project path->setFillType(ft); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jboolean isEmpty(JNIEnv* env, jobject clazz, SkPath* obj) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->isEmpty(); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jboolean isRect(JNIEnv* env, jobject clazz, SkPath* obj, jobject rect) { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect rect_; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jboolean result = obj->isRect(&rect_); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::rect_to_jrectf(rect_, env, rect); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8654900e8c05e92a0783e8468ad7c4513eb66adc80Mike Reed static void computeBounds(JNIEnv* env, jobject clazz, SkPath* obj, jobject bounds) { 878ba88775fe9df1146de7683a6ef59e36e749b271Mike Reed const SkRect& bounds_ = obj->getBounds(); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::rect_to_jrectf(bounds_, env, bounds); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void incReserve(JNIEnv* env, jobject clazz, SkPath* obj, jint extraPtCount) { 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->incReserve(extraPtCount); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void moveTo__FF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x, jfloat y) { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x_ = SkFloatToScalar(x); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y_ = SkFloatToScalar(y); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->moveTo(x_, y_); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rMoveTo(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy) { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rMoveTo(dx_, dy_); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void lineTo__FF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x, jfloat y) { 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x_ = SkFloatToScalar(x); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y_ = SkFloatToScalar(y); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->lineTo(x_, y_); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rLineTo(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy) { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rLineTo(dx_, dy_); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void quadTo__FFFF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x1, jfloat y1, jfloat x2, jfloat y2) { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x1_ = SkFloatToScalar(x1); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y1_ = SkFloatToScalar(y1); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x2_ = SkFloatToScalar(x2); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y2_ = SkFloatToScalar(y2); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->quadTo(x1_, y1_, x2_, y2_); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void rQuadTo(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx1, jfloat dy1, jfloat dx2, jfloat dy2) { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx1_ = SkFloatToScalar(dx1); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy1_ = SkFloatToScalar(dy1); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx2_ = SkFloatToScalar(dx2); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy2_ = SkFloatToScalar(dy2); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rQuadTo(dx1_, dy1_, dx2_, dy2_); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The 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) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x1_ = SkFloatToScalar(x1); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y1_ = SkFloatToScalar(y1); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x2_ = SkFloatToScalar(x2); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y2_ = SkFloatToScalar(y2); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x3_ = SkFloatToScalar(x3); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y3_ = SkFloatToScalar(y3); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->cubicTo(x1_, y1_, x2_, y2_, x3_, y3_); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The 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) { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x1_ = SkFloatToScalar(x1); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y1_ = SkFloatToScalar(y1); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x2_ = SkFloatToScalar(x2); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y2_ = SkFloatToScalar(y2); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x3_ = SkFloatToScalar(x3); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y3_ = SkFloatToScalar(y3); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->rCubicTo(x1_, y1_, x2_, y2_, x3_, y3_); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void arcTo(JNIEnv* env, jobject clazz, SkPath* obj, jobject oval, jfloat startAngle, jfloat sweepAngle, jboolean forceMoveTo) { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect oval_; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, oval, &oval_); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar startAngle_ = SkFloatToScalar(startAngle); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar sweepAngle_ = SkFloatToScalar(sweepAngle); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->arcTo(oval_, startAngle_, sweepAngle_, forceMoveTo); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void close(JNIEnv* env, jobject clazz, SkPath* obj) { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->close(); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addRect__RectFI(JNIEnv* env, jobject clazz, SkPath* obj, jobject rect, SkPath::Direction dir) { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect rect_; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, rect, &rect_); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addRect(rect_, dir); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The 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) { 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar left_ = SkFloatToScalar(left); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar top_ = SkFloatToScalar(top); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar right_ = SkFloatToScalar(right); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar bottom_ = SkFloatToScalar(bottom); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addRect(left_, top_, right_, bottom_, dir); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addOval(JNIEnv* env, jobject clazz, SkPath* obj, jobject oval, SkPath::Direction dir) { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect oval_; 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, oval, &oval_); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addOval(oval_, dir); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addCircle(JNIEnv* env, jobject clazz, SkPath* obj, jfloat x, jfloat y, jfloat radius, SkPath::Direction dir) { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar x_ = SkFloatToScalar(x); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar y_ = SkFloatToScalar(y); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar radius_ = SkFloatToScalar(radius); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addCircle(x_, y_, radius_, dir); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addArc(JNIEnv* env, jobject clazz, SkPath* obj, jobject oval, jfloat startAngle, jfloat sweepAngle) { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect oval_; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, oval, &oval_); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar startAngle_ = SkFloatToScalar(startAngle); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar sweepAngle_ = SkFloatToScalar(sweepAngle); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addArc(oval_, startAngle_, sweepAngle_); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addRoundRectXY(JNIEnv* env, jobject clazz, SkPath* obj, jobject rect, 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloat rx, jfloat ry, SkPath::Direction dir) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect rect_; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, rect, &rect_); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar rx_ = SkFloatToScalar(rx); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar ry_ = SkFloatToScalar(ry); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addRoundRect(rect_, rx_, ry_, dir); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addRoundRect8(JNIEnv* env, jobject, SkPath* obj, jobject rect, 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloatArray array, SkPath::Direction dir) { 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect rect_; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::jrectf_to_rect(env, rect, &rect_); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoJavaFloatArray afa(env, array, 8); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const float* src = afa.ptr(); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dst[8]; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 8; i++) { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dst[i] = SkFloatToScalar(src[i]); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addRoundRect(rect_, dst, dir); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addPath__PathFF(JNIEnv* env, jobject clazz, SkPath* obj, SkPath* src, jfloat dx, jfloat dy) { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addPath(*src, dx_, dy_); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addPath__Path(JNIEnv* env, jobject clazz, SkPath* obj, SkPath* src) { 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addPath(*src); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addPath__PathMatrix(JNIEnv* env, jobject clazz, SkPath* obj, SkPath* src, SkMatrix* matrix) { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->addPath(*src, *matrix); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void offset__FFPath(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy, SkPath* dst) { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->offset(dx_, dy_, dst); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void offset__FF(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy) { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->offset(dx_, dy_); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setLastPoint(JNIEnv* env, jobject clazz, SkPath* obj, jfloat dx, jfloat dy) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dx_ = SkFloatToScalar(dx); 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dy_ = SkFloatToScalar(dy); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->setLastPt(dx_, dy_); 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void transform__MatrixPath(JNIEnv* env, jobject clazz, SkPath* obj, SkMatrix* matrix, SkPath* dst) { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->transform(*matrix, dst); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void transform__Matrix(JNIEnv* env, jobject clazz, SkPath* obj, SkMatrix* matrix) { 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->transform(*matrix); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod methods[] = { 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"finalizer", "(I)V", (void*) SkPathGlue::finalizer}, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"init1","()I", (void*) SkPathGlue::init1}, 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"init2","(I)I", (void*) SkPathGlue::init2}, 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_reset","(I)V", (void*) SkPathGlue::reset}, 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rewind","(I)V", (void*) SkPathGlue::rewind}, 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_set","(II)V", (void*) SkPathGlue::assign}, 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getFillType","(I)I", (void*) SkPathGlue::getFillType}, 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setFillType","(II)V", (void*) SkPathGlue::setFillType}, 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_isEmpty","(I)Z", (void*) SkPathGlue::isEmpty}, 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_isRect","(ILandroid/graphics/RectF;)Z", (void*) SkPathGlue::isRect}, 27854900e8c05e92a0783e8468ad7c4513eb66adc80Mike Reed {"native_computeBounds","(ILandroid/graphics/RectF;)V", (void*) SkPathGlue::computeBounds}, 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_incReserve","(II)V", (void*) SkPathGlue::incReserve}, 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_moveTo","(IFF)V", (void*) SkPathGlue::moveTo__FF}, 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rMoveTo","(IFF)V", (void*) SkPathGlue::rMoveTo}, 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_lineTo","(IFF)V", (void*) SkPathGlue::lineTo__FF}, 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rLineTo","(IFF)V", (void*) SkPathGlue::rLineTo}, 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_quadTo","(IFFFF)V", (void*) SkPathGlue::quadTo__FFFF}, 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rQuadTo","(IFFFF)V", (void*) SkPathGlue::rQuadTo}, 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_cubicTo","(IFFFFFF)V", (void*) SkPathGlue::cubicTo__FFFFFF}, 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_rCubicTo","(IFFFFFF)V", (void*) SkPathGlue::rCubicTo}, 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_arcTo","(ILandroid/graphics/RectF;FFZ)V", (void*) SkPathGlue::arcTo}, 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_close","(I)V", (void*) SkPathGlue::close}, 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addRect","(ILandroid/graphics/RectF;I)V", (void*) SkPathGlue::addRect__RectFI}, 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addRect","(IFFFFI)V", (void*) SkPathGlue::addRect__FFFFI}, 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addOval","(ILandroid/graphics/RectF;I)V", (void*) SkPathGlue::addOval}, 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addCircle","(IFFFI)V", (void*) SkPathGlue::addCircle}, 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addArc","(ILandroid/graphics/RectF;FF)V", (void*) SkPathGlue::addArc}, 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addRoundRect","(ILandroid/graphics/RectF;FFI)V", (void*) SkPathGlue::addRoundRectXY}, 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addRoundRect","(ILandroid/graphics/RectF;[FI)V", (void*) SkPathGlue::addRoundRect8}, 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addPath","(IIFF)V", (void*) SkPathGlue::addPath__PathFF}, 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addPath","(II)V", (void*) SkPathGlue::addPath__Path}, 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_addPath","(III)V", (void*) SkPathGlue::addPath__PathMatrix}, 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_offset","(IFFI)V", (void*) SkPathGlue::offset__FFPath}, 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_offset","(IFF)V", (void*) SkPathGlue::offset__FF}, 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setLastPoint","(IFF)V", (void*) SkPathGlue::setLastPoint}, 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_transform","(III)V", (void*) SkPathGlue::transform__MatrixPath}, 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_transform","(II)V", (void*) SkPathGlue::transform__Matrix} 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_graphics_Path(JNIEnv* env) { 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result = AndroidRuntime::registerNativeMethods(env, "android/graphics/Path", methods, 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sizeof(methods) / sizeof(methods[0])); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 314