Paint.cpp revision 3d63e0119dc763ed0a06fd7498375746fd391d80
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* libs/android_runtime/android/graphics/Paint.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: SkPaint.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 "SkBlurDrawLooper.h" 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkColorFilter.h" 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkMaskFilter.h" 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkRasterizer.h" 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkShader.h" 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkTypeface.h" 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkXfermode.h" 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct JMetricsID { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfieldID top; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfieldID ascent; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfieldID descent; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfieldID bottom; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfieldID leading; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jclass gFontMetrics_class; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JMetricsID gFontMetrics_fieldID; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jclass gFontMetricsInt_class; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JMetricsID gFontMetricsInt_fieldID; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 513d63e0119dc763ed0a06fd7498375746fd391d80Mike Reedstatic void defaultSettingsForAndroid(SkPaint* paint) { 523d63e0119dc763ed0a06fd7498375746fd391d80Mike Reed // looks best we decided 533d63e0119dc763ed0a06fd7498375746fd391d80Mike Reed paint->setHinting(SkPaint::kSlight_Hinting); 543d63e0119dc763ed0a06fd7498375746fd391d80Mike Reed // utf16 is required for java 553d63e0119dc763ed0a06fd7498375746fd391d80Mike Reed paint->setTextEncoding(SkPaint::kUTF16_TextEncoding); 563d63e0119dc763ed0a06fd7498375746fd391d80Mike Reed} 573d63e0119dc763ed0a06fd7498375746fd391d80Mike Reed 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SkPaintGlue { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void finalizer(JNIEnv* env, jobject clazz, SkPaint* obj) { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project delete obj; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPaint* init(JNIEnv* env, jobject clazz) { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint* obj = new SkPaint(); 673d63e0119dc763ed0a06fd7498375746fd391d80Mike Reed defaultSettingsForAndroid(obj); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPaint* intiWithPaint(JNIEnv* env, jobject clazz, SkPaint* paint) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint* obj = new SkPaint(*paint); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void reset(JNIEnv* env, jobject clazz, SkPaint* obj) { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->reset(); 783d63e0119dc763ed0a06fd7498375746fd391d80Mike Reed defaultSettingsForAndroid(obj); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void assign(JNIEnv* env, jobject clazz, SkPaint* dst, const SkPaint* src) { 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *dst = *src; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getFlags(JNIEnv* env, jobject paint) { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return GraphicsJNI::getNativePaint(env, paint)->getFlags(); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setFlags(JNIEnv* env, jobject paint, jint flags) { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setFlags(flags); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setAntiAlias(JNIEnv* env, jobject paint, jboolean aa) { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setAntiAlias(aa); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setLinearText(JNIEnv* env, jobject paint, jboolean linearText) { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setLinearText(linearText); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setSubpixelText(JNIEnv* env, jobject paint, jboolean subpixelText) { 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setSubpixelText(subpixelText); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setUnderlineText(JNIEnv* env, jobject paint, jboolean underlineText) { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setUnderlineText(underlineText); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setStrikeThruText(JNIEnv* env, jobject paint, jboolean strikeThruText) { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setStrikeThruText(strikeThruText); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setFakeBoldText(JNIEnv* env, jobject paint, jboolean fakeBoldText) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setFakeBoldText(fakeBoldText); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setFilterBitmap(JNIEnv* env, jobject paint, jboolean filterBitmap) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setFilterBitmap(filterBitmap); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setDither(JNIEnv* env, jobject paint, jboolean dither) { 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setDither(dither); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getStyle(JNIEnv* env, jobject clazz, SkPaint* obj) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->getStyle(); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setStyle(JNIEnv* env, jobject clazz, SkPaint* obj, SkPaint::Style style) { 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->setStyle(style); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getColor(JNIEnv* env, jobject paint) { 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return GraphicsJNI::getNativePaint(env, paint)->getColor(); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getAlpha(JNIEnv* env, jobject paint) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return GraphicsJNI::getNativePaint(env, paint)->getAlpha(); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setColor(JNIEnv* env, jobject paint, jint color) { 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setColor(color); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setAlpha(JNIEnv* env, jobject paint, jint a) { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setAlpha(a); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat getStrokeWidth(JNIEnv* env, jobject paint) { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(GraphicsJNI::getNativePaint(env, paint)->getStrokeWidth()); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setStrokeWidth(JNIEnv* env, jobject paint, jfloat width) { 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setStrokeWidth(SkFloatToScalar(width)); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat getStrokeMiter(JNIEnv* env, jobject paint) { 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(GraphicsJNI::getNativePaint(env, paint)->getStrokeMiter()); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setStrokeMiter(JNIEnv* env, jobject paint, jfloat miter) { 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setStrokeMiter(SkFloatToScalar(miter)); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getStrokeCap(JNIEnv* env, jobject clazz, SkPaint* obj) { 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->getStrokeCap(); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setStrokeCap(JNIEnv* env, jobject clazz, SkPaint* obj, SkPaint::Cap cap) { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->setStrokeCap(cap); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getStrokeJoin(JNIEnv* env, jobject clazz, SkPaint* obj) { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->getStrokeJoin(); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setStrokeJoin(JNIEnv* env, jobject clazz, SkPaint* obj, SkPaint::Join join) { 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->setStrokeJoin(join); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jboolean getFillPath(JNIEnv* env, jobject clazz, SkPaint* obj, SkPath* src, SkPath* dst) { 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->getFillPath(*src, dst); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkShader* setShader(JNIEnv* env, jobject clazz, SkPaint* obj, SkShader* shader) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->setShader(shader); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkColorFilter* setColorFilter(JNIEnv* env, jobject clazz, SkPaint* obj, SkColorFilter* filter) { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->setColorFilter(filter); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkXfermode* setXfermode(JNIEnv* env, jobject clazz, SkPaint* obj, SkXfermode* xfermode) { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->setXfermode(xfermode); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPathEffect* setPathEffect(JNIEnv* env, jobject clazz, SkPaint* obj, SkPathEffect* effect) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->setPathEffect(effect); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkMaskFilter* setMaskFilter(JNIEnv* env, jobject clazz, SkPaint* obj, SkMaskFilter* maskfilter) { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->setMaskFilter(maskfilter); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkTypeface* setTypeface(JNIEnv* env, jobject clazz, SkPaint* obj, SkTypeface* typeface) { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->setTypeface(typeface); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkRasterizer* setRasterizer(JNIEnv* env, jobject clazz, SkPaint* obj, SkRasterizer* rasterizer) { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->setRasterizer(rasterizer); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getTextAlign(JNIEnv* env, jobject clazz, SkPaint* obj) { 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj->getTextAlign(); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setTextAlign(JNIEnv* env, jobject clazz, SkPaint* obj, SkPaint::Align align) { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj->setTextAlign(align); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat getTextSize(JNIEnv* env, jobject paint) { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(GraphicsJNI::getNativePaint(env, paint)->getTextSize()); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setTextSize(JNIEnv* env, jobject paint, jfloat textSize) { 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setTextSize(SkFloatToScalar(textSize)); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat getTextScaleX(JNIEnv* env, jobject paint) { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(GraphicsJNI::getNativePaint(env, paint)->getTextScaleX()); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setTextScaleX(JNIEnv* env, jobject paint, jfloat scaleX) { 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setTextScaleX(SkFloatToScalar(scaleX)); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat getTextSkewX(JNIEnv* env, jobject paint) { 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(GraphicsJNI::getNativePaint(env, paint)->getTextSkewX()); 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setTextSkewX(JNIEnv* env, jobject paint, jfloat skewX) { 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, paint); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->setTextSkewX(SkFloatToScalar(skewX)); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat ascent(JNIEnv* env, jobject paint) { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::FontMetrics metrics; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void)GraphicsJNI::getNativePaint(env, paint)->getFontMetrics(&metrics); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(metrics.fAscent); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat descent(JNIEnv* env, jobject paint) { 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::FontMetrics metrics; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void)GraphicsJNI::getNativePaint(env, paint)->getFontMetrics(&metrics); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(metrics.fDescent); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat getFontMetrics(JNIEnv* env, jobject paint, jobject metricsObj) { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::FontMetrics metrics; 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar spacing = GraphicsJNI::getNativePaint(env, paint)->getFontMetrics(&metrics); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (metricsObj) { 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT(env->IsInstanceOf(metricsObj, gFontMetrics_class)); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetFloatField(metricsObj, gFontMetrics_fieldID.top, SkScalarToFloat(metrics.fTop)); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetFloatField(metricsObj, gFontMetrics_fieldID.ascent, SkScalarToFloat(metrics.fAscent)); 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetFloatField(metricsObj, gFontMetrics_fieldID.descent, SkScalarToFloat(metrics.fDescent)); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetFloatField(metricsObj, gFontMetrics_fieldID.bottom, SkScalarToFloat(metrics.fBottom)); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetFloatField(metricsObj, gFontMetrics_fieldID.leading, SkScalarToFloat(metrics.fLeading)); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(spacing); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jint getFontMetricsInt(JNIEnv* env, jobject paint, jobject metricsObj) { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, paint); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::FontMetrics metrics; 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::getNativePaint(env, paint)->getFontMetrics(&metrics); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int ascent = SkScalarRound(metrics.fAscent); 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int descent = SkScalarRound(metrics.fDescent); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int leading = SkScalarRound(metrics.fLeading); 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (metricsObj) { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT(env->IsInstanceOf(metricsObj, gFontMetricsInt_class)); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(metricsObj, gFontMetricsInt_fieldID.top, SkScalarFloor(metrics.fTop)); 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(metricsObj, gFontMetricsInt_fieldID.ascent, ascent); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(metricsObj, gFontMetricsInt_fieldID.descent, descent); 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(metricsObj, gFontMetricsInt_fieldID.bottom, SkScalarCeil(metrics.fBottom)); 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(metricsObj, gFontMetricsInt_fieldID.leading, leading); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return descent - ascent + leading; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat measureText_CII(JNIEnv* env, jobject jpaint, jcharArray text, int index, int count) { 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, jpaint); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, text); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t textLength = env->GetArrayLength(text); 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((index | count) < 0 || (size_t)(index + count) > textLength) { 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project doThrow(env, "java/lang/ArrayIndexOutOfBoundsException"); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetCharArrayElements(text, NULL); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // we double count, since measureText wants a byteLength 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar width = paint->measureText(textArray + index, count << 1); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseCharArrayElements(text, const_cast<jchar*>(textArray), 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNI_ABORT); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(width); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat measureText_StringII(JNIEnv* env, jobject jpaint, jstring text, int start, int end) { 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, jpaint); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, text); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetStringChars(text, NULL); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t textLength = env->GetStringLength(text); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = end - start; 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((start | count) < 0 || (size_t)count > textLength) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project doThrow(env, "java/lang/IndexOutOfBoundsException"); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloat width = SkScalarToFloat(paint->measureText(textArray + start, count << 1)); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringChars(text, textArray); 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return width; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static jfloat measureText_String(JNIEnv* env, jobject jpaint, jstring text) { 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, jpaint); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, text); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetStringChars(text, NULL); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t textLength = env->GetStringLength(text); 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloat width = SkScalarToFloat(paint->measureText(textArray, textLength << 1)); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringChars(text, textArray); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return width; 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int dotextwidths(JNIEnv* env, SkPaint* paint, const jchar text[], int count, jfloatArray widths) { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoJavaFloatArray autoWidths(env, widths, count); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloat* widthsArray = autoWidths.ptr(); 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar* scalarArray = (SkScalar*)widthsArray; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project count = paint->getTextWidths(text, count << 1, scalarArray); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widthsArray[i] = SkScalarToFloat(scalarArray[i]); 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return count; 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int getTextWidths___CII_F(JNIEnv* env, jobject clazz, SkPaint* paint, jcharArray text, int index, int count, jfloatArray widths) { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetCharArrayElements(text, NULL); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project count = dotextwidths(env, paint, textArray + index, count, widths); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseCharArrayElements(text, const_cast<jchar*>(textArray), 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNI_ABORT); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return count; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int getTextWidths__StringII_F(JNIEnv* env, jobject clazz, SkPaint* paint, jstring text, int start, int end, jfloatArray widths) { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetStringChars(text, NULL); 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = dotextwidths(env, paint, textArray + start, end - start, widths); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringChars(text, textArray); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return count; 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void getTextPath___CIIFFPath(JNIEnv* env, jobject clazz, SkPaint* paint, jcharArray text, int index, int count, jfloat x, jfloat y, SkPath* path) { 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetCharArrayElements(text, NULL); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project paint->getTextPath(textArray + index, count << 1, SkFloatToScalar(x), SkFloatToScalar(y), path); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseCharArrayElements(text, const_cast<jchar*>(textArray), 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNI_ABORT); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void getTextPath__StringIIFFPath(JNIEnv* env, jobject clazz, SkPaint* paint, jstring text, int start, int end, jfloat x, jfloat y, SkPath* path) { 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetStringChars(text, NULL); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project paint->getTextPath(textArray + start, (end - start) << 1, SkFloatToScalar(x), SkFloatToScalar(y), path); 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringChars(text, textArray); 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void setShadowLayer(JNIEnv* env, jobject jpaint, jfloat radius, 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloat dx, jfloat dy, int color) { 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_VOID(env, jpaint); 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (radius <= 0) { 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project paint->setLooper(NULL); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else { 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project paint->setLooper(new SkBlurDrawLooper(SkFloatToScalar(radius), 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkFloatToScalar(dx), 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkFloatToScalar(dy), 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (SkColor)color))->unref(); 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int breakText(JNIEnv* env, const SkPaint& paint, const jchar text[], 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count, float maxWidth, jfloatArray jmeasured, 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::TextBufferDirection tbd) { 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT(paint.getTextEncoding() == SkPaint::kUTF16_TextEncoding); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar measured; 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t bytes = paint.breakText(text, count << 1, 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkFloatToScalar(maxWidth), &measured, tbd); 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT((bytes & 1) == 0); 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (jmeasured && env->GetArrayLength(jmeasured) > 0) { 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoJavaFloatArray autoMeasured(env, jmeasured, 1); 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloat* array = autoMeasured.ptr(); 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project array[0] = SkScalarToFloat(measured); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return bytes >> 1; 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int breakTextC(JNIEnv* env, jobject jpaint, jcharArray jtext, 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int index, int count, float maxWidth, jfloatArray jmeasuredWidth) { 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, jpaint); 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, jtext); 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::TextBufferDirection tbd; 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (count < 0) { 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tbd = SkPaint::kBackward_TextBufferDirection; 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project count = -count; 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else { 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tbd = SkPaint::kForward_TextBufferDirection; 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((index < 0) || (index + count > env->GetArrayLength(jtext))) { 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project doThrow(env, "java/lang/ArrayIndexOutOfBoundsException"); 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* text = env->GetCharArrayElements(jtext, NULL); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project count = breakText(env, *paint, text + index, count, maxWidth, 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jmeasuredWidth, tbd); 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseCharArrayElements(jtext, const_cast<jchar*>(text), 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNI_ABORT); 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return count; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int breakTextS(JNIEnv* env, jobject jpaint, jstring jtext, 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool forwards, float maxWidth, jfloatArray jmeasuredWidth) { 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, jpaint); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NPE_CHECK_RETURN_ZERO(env, jtext); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::TextBufferDirection tbd = forwards ? 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::kForward_TextBufferDirection : 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint::kBackward_TextBufferDirection; 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint); 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = env->GetStringLength(jtext); 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* text = env->GetStringChars(jtext, NULL); 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project count = breakText(env, *paint, text, count, maxWidth, 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jmeasuredWidth, tbd); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringChars(jtext, text); 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return count; 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void doTextBounds(JNIEnv* env, const jchar* text, int count, 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jobject bounds, const SkPaint& paint) 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkRect r; 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkIRect ir; 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project paint.measureText(text, count << 1, &r); 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project r.roundOut(&ir); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GraphicsJNI::irect_to_jrect(ir, env, bounds); 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void getStringBounds(JNIEnv* env, jobject, const SkPaint* paint, 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jstring text, int start, int end, jobject bounds) 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetStringChars(text, NULL); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project doTextBounds(env, textArray + start, end - start, bounds, *paint); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringChars(text, textArray); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void getCharArrayBounds(JNIEnv* env, jobject, const SkPaint* paint, 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jcharArray text, int index, int count, jobject bounds) 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const jchar* textArray = env->GetCharArrayElements(text, NULL); 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project doTextBounds(env, textArray + index, count, bounds, *paint); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseCharArrayElements(text, const_cast<jchar*>(textArray), 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNI_ABORT); 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod methods[] = { 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"finalizer", "(I)V", (void*) SkPaintGlue::finalizer}, 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_init","()I", (void*) SkPaintGlue::init}, 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_initWithPaint","(I)I", (void*) SkPaintGlue::intiWithPaint}, 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_reset","(I)V", (void*) SkPaintGlue::reset}, 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_set","(II)V", (void*) SkPaintGlue::assign}, 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getFlags","()I", (void*) SkPaintGlue::getFlags}, 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setFlags","(I)V", (void*) SkPaintGlue::setFlags}, 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setAntiAlias","(Z)V", (void*) SkPaintGlue::setAntiAlias}, 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setSubpixelText","(Z)V", (void*) SkPaintGlue::setSubpixelText}, 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setLinearText","(Z)V", (void*) SkPaintGlue::setLinearText}, 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setUnderlineText","(Z)V", (void*) SkPaintGlue::setUnderlineText}, 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setStrikeThruText","(Z)V", (void*) SkPaintGlue::setStrikeThruText}, 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setFakeBoldText","(Z)V", (void*) SkPaintGlue::setFakeBoldText}, 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setFilterBitmap","(Z)V", (void*) SkPaintGlue::setFilterBitmap}, 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setDither","(Z)V", (void*) SkPaintGlue::setDither}, 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getStyle","(I)I", (void*) SkPaintGlue::getStyle}, 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setStyle","(II)V", (void*) SkPaintGlue::setStyle}, 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getColor","()I", (void*) SkPaintGlue::getColor}, 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setColor","(I)V", (void*) SkPaintGlue::setColor}, 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getAlpha","()I", (void*) SkPaintGlue::getAlpha}, 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setAlpha","(I)V", (void*) SkPaintGlue::setAlpha}, 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getStrokeWidth","()F", (void*) SkPaintGlue::getStrokeWidth}, 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setStrokeWidth","(F)V", (void*) SkPaintGlue::setStrokeWidth}, 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getStrokeMiter","()F", (void*) SkPaintGlue::getStrokeMiter}, 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setStrokeMiter","(F)V", (void*) SkPaintGlue::setStrokeMiter}, 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getStrokeCap","(I)I", (void*) SkPaintGlue::getStrokeCap}, 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setStrokeCap","(II)V", (void*) SkPaintGlue::setStrokeCap}, 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getStrokeJoin","(I)I", (void*) SkPaintGlue::getStrokeJoin}, 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setStrokeJoin","(II)V", (void*) SkPaintGlue::setStrokeJoin}, 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getFillPath","(III)Z", (void*) SkPaintGlue::getFillPath}, 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setShader","(II)I", (void*) SkPaintGlue::setShader}, 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setColorFilter","(II)I", (void*) SkPaintGlue::setColorFilter}, 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setXfermode","(II)I", (void*) SkPaintGlue::setXfermode}, 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setPathEffect","(II)I", (void*) SkPaintGlue::setPathEffect}, 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setMaskFilter","(II)I", (void*) SkPaintGlue::setMaskFilter}, 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setTypeface","(II)I", (void*) SkPaintGlue::setTypeface}, 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setRasterizer","(II)I", (void*) SkPaintGlue::setRasterizer}, 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getTextAlign","(I)I", (void*) SkPaintGlue::getTextAlign}, 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setTextAlign","(II)V", (void*) SkPaintGlue::setTextAlign}, 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getTextSize","()F", (void*) SkPaintGlue::getTextSize}, 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setTextSize","(F)V", (void*) SkPaintGlue::setTextSize}, 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getTextScaleX","()F", (void*) SkPaintGlue::getTextScaleX}, 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setTextScaleX","(F)V", (void*) SkPaintGlue::setTextScaleX}, 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getTextSkewX","()F", (void*) SkPaintGlue::getTextSkewX}, 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setTextSkewX","(F)V", (void*) SkPaintGlue::setTextSkewX}, 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"ascent","()F", (void*) SkPaintGlue::ascent}, 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"descent","()F", (void*) SkPaintGlue::descent}, 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getFontMetrics", "(Landroid/graphics/Paint$FontMetrics;)F", (void*)SkPaintGlue::getFontMetrics}, 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"getFontMetricsInt", "(Landroid/graphics/Paint$FontMetricsInt;)I", (void*)SkPaintGlue::getFontMetricsInt}, 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"measureText","([CII)F", (void*) SkPaintGlue::measureText_CII}, 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"measureText","(Ljava/lang/String;)F", (void*) SkPaintGlue::measureText_String}, 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"measureText","(Ljava/lang/String;II)F", (void*) SkPaintGlue::measureText_StringII}, 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"breakText","([CIIF[F)I", (void*) SkPaintGlue::breakTextC}, 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"breakText","(Ljava/lang/String;ZF[F)I", (void*) SkPaintGlue::breakTextS}, 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getTextWidths","(I[CII[F)I", (void*) SkPaintGlue::getTextWidths___CII_F}, 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getTextWidths","(ILjava/lang/String;II[F)I", (void*) SkPaintGlue::getTextWidths__StringII_F}, 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getTextPath","(I[CIIFFI)V", (void*) SkPaintGlue::getTextPath___CIIFFPath}, 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_getTextPath","(ILjava/lang/String;IIFFI)V", (void*) SkPaintGlue::getTextPath__StringIIFFPath}, 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"nativeGetStringBounds", "(ILjava/lang/String;IILandroid/graphics/Rect;)V", 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void*) SkPaintGlue::getStringBounds }, 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"nativeGetCharArrayBounds", "(I[CIILandroid/graphics/Rect;)V", 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void*) SkPaintGlue::getCharArrayBounds }, 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"setShadowLayer", "(FFFI)V", (void*)SkPaintGlue::setShadowLayer} 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jfieldID req_fieldID(jfieldID id) { 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT(id); 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return id; 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_graphics_Paint(JNIEnv* env) { 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetrics_class = env->FindClass("android/graphics/Paint$FontMetrics"); 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT(gFontMetrics_class); 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetrics_class = (jclass)env->NewGlobalRef(gFontMetrics_class); 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetrics_fieldID.top = req_fieldID(env->GetFieldID(gFontMetrics_class, "top", "F")); 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetrics_fieldID.ascent = req_fieldID(env->GetFieldID(gFontMetrics_class, "ascent", "F")); 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetrics_fieldID.descent = req_fieldID(env->GetFieldID(gFontMetrics_class, "descent", "F")); 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetrics_fieldID.bottom = req_fieldID(env->GetFieldID(gFontMetrics_class, "bottom", "F")); 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetrics_fieldID.leading = req_fieldID(env->GetFieldID(gFontMetrics_class, "leading", "F")); 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetricsInt_class = env->FindClass("android/graphics/Paint$FontMetricsInt"); 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT(gFontMetricsInt_class); 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetricsInt_class = (jclass)env->NewGlobalRef(gFontMetricsInt_class); 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetricsInt_fieldID.top = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "top", "I")); 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetricsInt_fieldID.ascent = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "ascent", "I")); 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetricsInt_fieldID.descent = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "descent", "I")); 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetricsInt_fieldID.bottom = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "bottom", "I")); 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gFontMetricsInt_fieldID.leading = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "leading", "I")); 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result = AndroidRuntime::registerNativeMethods(env, "android/graphics/Paint", methods, 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sizeof(methods) / sizeof(methods[0])); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 620