14bbc2931263b232fba61807fca00e127573eff42Doris Liu/*
24bbc2931263b232fba61807fca00e127573eff42Doris Liu * Copyright (C) 2015 The Android Open Source Project
34bbc2931263b232fba61807fca00e127573eff42Doris Liu *
44bbc2931263b232fba61807fca00e127573eff42Doris Liu * Licensed under the Apache License, Version 2.0 (the "License");
54bbc2931263b232fba61807fca00e127573eff42Doris Liu * you may not use this file except in compliance with the License.
64bbc2931263b232fba61807fca00e127573eff42Doris Liu * You may obtain a copy of the License at
74bbc2931263b232fba61807fca00e127573eff42Doris Liu *
84bbc2931263b232fba61807fca00e127573eff42Doris Liu *      http://www.apache.org/licenses/LICENSE-2.0
94bbc2931263b232fba61807fca00e127573eff42Doris Liu *
104bbc2931263b232fba61807fca00e127573eff42Doris Liu * Unless required by applicable law or agreed to in writing, software
114bbc2931263b232fba61807fca00e127573eff42Doris Liu * distributed under the License is distributed on an "AS IS" BASIS,
124bbc2931263b232fba61807fca00e127573eff42Doris Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134bbc2931263b232fba61807fca00e127573eff42Doris Liu * See the License for the specific language governing permissions and
144bbc2931263b232fba61807fca00e127573eff42Doris Liu * limitations under the License.
154bbc2931263b232fba61807fca00e127573eff42Doris Liu */
164bbc2931263b232fba61807fca00e127573eff42Doris Liu
174bbc2931263b232fba61807fca00e127573eff42Doris Liu#include "GraphicsJNI.h"
181d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu#include "jni.h"
194bbc2931263b232fba61807fca00e127573eff42Doris Liu#include "core_jni_helpers.h"
204bbc2931263b232fba61807fca00e127573eff42Doris Liu
211d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu#include "PathParser.h"
224bbc2931263b232fba61807fca00e127573eff42Doris Liu#include "VectorDrawable.h"
234bbc2931263b232fba61807fca00e127573eff42Doris Liu
24dccca44ffda4836b56a21da95a046c9708ffd49csergeyv#include <hwui/Paint.h>
25dccca44ffda4836b56a21da95a046c9708ffd49csergeyv
264bbc2931263b232fba61807fca00e127573eff42Doris Liunamespace android {
274bbc2931263b232fba61807fca00e127573eff42Doris Liuusing namespace uirenderer;
284bbc2931263b232fba61807fca00e127573eff42Doris Liuusing namespace uirenderer::VectorDrawable;
294bbc2931263b232fba61807fca00e127573eff42Doris Liu
301d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu/**
311d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu * VectorDrawable's pre-draw construction.
321d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu */
334bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jlong createTree(JNIEnv*, jobject, jlong groupPtr) {
344bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* rootGroup = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
354bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Tree* tree = new VectorDrawable::Tree(rootGroup);
364bbc2931263b232fba61807fca00e127573eff42Doris Liu    return reinterpret_cast<jlong>(tree);
374bbc2931263b232fba61807fca00e127573eff42Doris Liu}
384bbc2931263b232fba61807fca00e127573eff42Doris Liu
39335d7d174464ea3fc2d058dcff6e436df1cf0fd9Doris Liustatic jlong createTreeFromCopy(JNIEnv*, jobject, jlong treePtr, jlong groupPtr) {
40335d7d174464ea3fc2d058dcff6e436df1cf0fd9Doris Liu    VectorDrawable::Group* rootGroup = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
41335d7d174464ea3fc2d058dcff6e436df1cf0fd9Doris Liu    VectorDrawable::Tree* treeToCopy = reinterpret_cast<VectorDrawable::Tree*>(treePtr);
42335d7d174464ea3fc2d058dcff6e436df1cf0fd9Doris Liu    VectorDrawable::Tree* tree = new VectorDrawable::Tree(treeToCopy, rootGroup);
43335d7d174464ea3fc2d058dcff6e436df1cf0fd9Doris Liu    return reinterpret_cast<jlong>(tree);
44335d7d174464ea3fc2d058dcff6e436df1cf0fd9Doris Liu}
45335d7d174464ea3fc2d058dcff6e436df1cf0fd9Doris Liu
461d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic jlong createEmptyFullPath(JNIEnv*, jobject) {
471d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::FullPath* newPath = new VectorDrawable::FullPath();
481d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return reinterpret_cast<jlong>(newPath);
494bbc2931263b232fba61807fca00e127573eff42Doris Liu}
504bbc2931263b232fba61807fca00e127573eff42Doris Liu
511d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic jlong createFullPath(JNIEnv*, jobject, jlong srcFullPathPtr) {
521d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::FullPath* srcFullPath =
531d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu            reinterpret_cast<VectorDrawable::FullPath*>(srcFullPathPtr);
541d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::FullPath* newPath = new VectorDrawable::FullPath(*srcFullPath);
551d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return reinterpret_cast<jlong>(newPath);
564bbc2931263b232fba61807fca00e127573eff42Doris Liu}
574bbc2931263b232fba61807fca00e127573eff42Doris Liu
581d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic jlong createEmptyClipPath(JNIEnv*, jobject) {
591d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::ClipPath* newPath = new VectorDrawable::ClipPath();
601d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return reinterpret_cast<jlong>(newPath);
611d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu}
621d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu
631d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic jlong createClipPath(JNIEnv*, jobject, jlong srcClipPathPtr) {
641d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::ClipPath* srcClipPath =
651d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu            reinterpret_cast<VectorDrawable::ClipPath*>(srcClipPathPtr);
661d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::ClipPath* newPath = new VectorDrawable::ClipPath(*srcClipPath);
671d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return reinterpret_cast<jlong>(newPath);
681d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu}
691d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu
701d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic jlong createEmptyGroup(JNIEnv*, jobject) {
711d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Group* newGroup = new VectorDrawable::Group();
721d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return reinterpret_cast<jlong>(newGroup);
731d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu}
741d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu
751d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic jlong createGroup(JNIEnv*, jobject, jlong srcGroupPtr) {
761d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Group* srcGroup = reinterpret_cast<VectorDrawable::Group*>(srcGroupPtr);
771d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Group* newGroup = new VectorDrawable::Group(*srcGroup);
781d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return reinterpret_cast<jlong>(newGroup);
791d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu}
801d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu
811d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic void setNodeName(JNIEnv* env, jobject, jlong nodePtr, jstring nameStr) {
821d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Node* node = reinterpret_cast<VectorDrawable::Node*>(nodePtr);
831d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    const char* nodeName = env->GetStringUTFChars(nameStr, NULL);
841d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    node->setName(nodeName);
851d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    env->ReleaseStringUTFChars(nameStr, nodeName);
861d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu}
871d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu
881d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic void addChild(JNIEnv*, jobject, jlong groupPtr, jlong childPtr) {
891d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
901d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Node* child = reinterpret_cast<VectorDrawable::Node*>(childPtr);
911d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->addChild(child);
924bbc2931263b232fba61807fca00e127573eff42Doris Liu}
934bbc2931263b232fba61807fca00e127573eff42Doris Liu
944bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setAllowCaching(JNIEnv*, jobject, jlong treePtr, jboolean allowCaching) {
954bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(treePtr);
964bbc2931263b232fba61807fca00e127573eff42Doris Liu    tree->setAllowCaching(allowCaching);
974bbc2931263b232fba61807fca00e127573eff42Doris Liu}
984bbc2931263b232fba61807fca00e127573eff42Doris Liu
991d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu/**
1001d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu * Draw
1011d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu */
102f8d131cc8dc4ef675b8f8fc57dcc26062d575d32Doris Liustatic int draw(JNIEnv* env, jobject, jlong treePtr, jlong canvasPtr,
1034bbc2931263b232fba61807fca00e127573eff42Doris Liu        jlong colorFilterPtr, jobject jrect, jboolean needsMirroring, jboolean canReuseCache) {
1044bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(treePtr);
1054bbc2931263b232fba61807fca00e127573eff42Doris Liu    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
1064bbc2931263b232fba61807fca00e127573eff42Doris Liu    SkRect rect;
1074bbc2931263b232fba61807fca00e127573eff42Doris Liu    GraphicsJNI::jrect_to_rect(env, jrect, &rect);
1084bbc2931263b232fba61807fca00e127573eff42Doris Liu    SkColorFilter* colorFilter = reinterpret_cast<SkColorFilter*>(colorFilterPtr);
109f8d131cc8dc4ef675b8f8fc57dcc26062d575d32Doris Liu    return tree->draw(canvas, colorFilter, rect, needsMirroring, canReuseCache);
1104bbc2931263b232fba61807fca00e127573eff42Doris Liu}
1114bbc2931263b232fba61807fca00e127573eff42Doris Liu
1121d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu/**
1131d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu * Setters and getters for updating staging properties that can happen both pre-draw and post draw.
1141d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu */
1151d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic void setTreeViewportSize(JNIEnv*, jobject, jlong treePtr,
1161d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu        jfloat viewportWidth, jfloat viewportHeight) {
1171d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(treePtr);
1181d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    tree->mutateStagingProperties()->setViewportSize(viewportWidth, viewportHeight);
1194bbc2931263b232fba61807fca00e127573eff42Doris Liu}
1204bbc2931263b232fba61807fca00e127573eff42Doris Liu
1211d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic jboolean setRootAlpha(JNIEnv*, jobject, jlong treePtr, jfloat alpha) {
1221d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(treePtr);
1231d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return tree->mutateStagingProperties()->setRootAlpha(alpha);
1241d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu}
1251d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu
1261d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liustatic jfloat getRootAlpha(JNIEnv*, jobject, jlong treePtr) {
1271d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(treePtr);
1281d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return tree->stagingProperties()->getRootAlpha();
1294bbc2931263b232fba61807fca00e127573eff42Doris Liu}
1304bbc2931263b232fba61807fca00e127573eff42Doris Liu
1314bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void updateFullPathPropertiesAndStrokeStyles(JNIEnv*, jobject, jlong fullPathPtr,
1324bbc2931263b232fba61807fca00e127573eff42Doris Liu        jfloat strokeWidth, jint strokeColor, jfloat strokeAlpha, jint fillColor, jfloat fillAlpha,
1334bbc2931263b232fba61807fca00e127573eff42Doris Liu        jfloat trimPathStart, jfloat trimPathEnd, jfloat trimPathOffset, jfloat strokeMiterLimit,
13446591f4a2dbd785bcae2b82bb490e78208605ec8Teng-Hui Zhu        jint strokeLineCap, jint strokeLineJoin, jint fillType) {
1354bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
1361d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->updateProperties(strokeWidth, strokeColor, strokeAlpha,
1371d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu            fillColor, fillAlpha, trimPathStart, trimPathEnd, trimPathOffset, strokeMiterLimit,
1381d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu            strokeLineCap, strokeLineJoin, fillType);
1394bbc2931263b232fba61807fca00e127573eff42Doris Liu}
1404bbc2931263b232fba61807fca00e127573eff42Doris Liu
141dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhustatic void updateFullPathFillGradient(JNIEnv*, jobject, jlong pathPtr, jlong fillGradientPtr) {
142dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhu    VectorDrawable::FullPath* path = reinterpret_cast<VectorDrawable::FullPath*>(pathPtr);
143dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhu    SkShader* fillShader = reinterpret_cast<SkShader*>(fillGradientPtr);
1441d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    path->mutateStagingProperties()->setFillGradient(fillShader);
145dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhu}
146dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhu
147dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhustatic void updateFullPathStrokeGradient(JNIEnv*, jobject, jlong pathPtr, jlong strokeGradientPtr) {
148dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhu    VectorDrawable::FullPath* path = reinterpret_cast<VectorDrawable::FullPath*>(pathPtr);
149dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhu    SkShader* strokeShader = reinterpret_cast<SkShader*>(strokeGradientPtr);
1501d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    path->mutateStagingProperties()->setStrokeGradient(strokeShader);
151dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhu}
152dbee9bb342cdfaa5155b1918f90262c05e2464cbTeng-Hui Zhu
1534bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jboolean getFullPathProperties(JNIEnv* env, jobject, jlong fullPathPtr,
1544bbc2931263b232fba61807fca00e127573eff42Doris Liu        jbyteArray outProperties, jint length) {
1554bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
1564bbc2931263b232fba61807fca00e127573eff42Doris Liu    int8_t pathProperties[length];
1571d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    bool success = fullPath->stagingProperties()->copyProperties(pathProperties, length);
1584bbc2931263b232fba61807fca00e127573eff42Doris Liu    env->SetByteArrayRegion(outProperties, 0, length, reinterpret_cast<int8_t*>(&pathProperties));
1594bbc2931263b232fba61807fca00e127573eff42Doris Liu    return success;
1604bbc2931263b232fba61807fca00e127573eff42Doris Liu}
1614bbc2931263b232fba61807fca00e127573eff42Doris Liu
1624bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jboolean getGroupProperties(JNIEnv* env, jobject, jlong groupPtr,
1634bbc2931263b232fba61807fca00e127573eff42Doris Liu        jfloatArray outProperties, jint length) {
1644bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
1654bbc2931263b232fba61807fca00e127573eff42Doris Liu    float groupProperties[length];
1661d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    bool success = group->stagingProperties()->copyProperties(groupProperties, length);
1674bbc2931263b232fba61807fca00e127573eff42Doris Liu    env->SetFloatArrayRegion(outProperties, 0, length, reinterpret_cast<float*>(&groupProperties));
1684bbc2931263b232fba61807fca00e127573eff42Doris Liu    return success;
1694bbc2931263b232fba61807fca00e127573eff42Doris Liu}
1704bbc2931263b232fba61807fca00e127573eff42Doris Liu
1714bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void updateGroupProperties(JNIEnv*, jobject, jlong groupPtr, jfloat rotate, jfloat pivotX,
1724bbc2931263b232fba61807fca00e127573eff42Doris Liu        jfloat pivotY, jfloat scaleX, jfloat scaleY, jfloat translateX, jfloat translateY) {
1734bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
1741d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->mutateStagingProperties()->updateProperties(rotate, pivotX, pivotY, scaleX, scaleY,
1751d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu            translateX, translateY);
1764bbc2931263b232fba61807fca00e127573eff42Doris Liu}
1774bbc2931263b232fba61807fca00e127573eff42Doris Liu
1784bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setPathString(JNIEnv* env, jobject, jlong pathPtr, jstring inputStr,
1794bbc2931263b232fba61807fca00e127573eff42Doris Liu        jint stringLength) {
1804bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Path* path = reinterpret_cast<VectorDrawable::Path*>(pathPtr);
1814bbc2931263b232fba61807fca00e127573eff42Doris Liu    const char* pathString = env->GetStringUTFChars(inputStr, NULL);
1821d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu
1831d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    PathParser::ParseResult result;
1841d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    PathData data;
185b35da390601e3c24e777d72daacd8dbeb4d1d9c4Doris Liu    PathParser::getPathDataFromAsciiString(&data, &result, pathString, stringLength);
1860a1a5167be26d363d4e27bdc7b816f425b7b4e66Doris Liu    if (result.failureOccurred) {
1870a1a5167be26d363d4e27bdc7b816f425b7b4e66Doris Liu        doThrowIAE(env, result.failureMessage.c_str());
1880a1a5167be26d363d4e27bdc7b816f425b7b4e66Doris Liu    }
1891d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    path->mutateStagingProperties()->setData(data);
1904bbc2931263b232fba61807fca00e127573eff42Doris Liu    env->ReleaseStringUTFChars(inputStr, pathString);
1914bbc2931263b232fba61807fca00e127573eff42Doris Liu}
1924bbc2931263b232fba61807fca00e127573eff42Doris Liu
1931d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu/**
1941d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu * Setters and getters that should only be called from animation thread for animation purpose.
1951d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu */
1964bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getRotation(JNIEnv*, jobject, jlong groupPtr) {
1974bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
1981d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return group->stagingProperties()->getRotation();
1994bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2004bbc2931263b232fba61807fca00e127573eff42Doris Liu
2014bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setRotation(JNIEnv*, jobject, jlong groupPtr, jfloat rotation) {
2024bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2031d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->mutateStagingProperties()->setRotation(rotation);
2044bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2054bbc2931263b232fba61807fca00e127573eff42Doris Liu
2064bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getPivotX(JNIEnv*, jobject, jlong groupPtr) {
2074bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2081d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return group->stagingProperties()->getPivotX();
2094bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2104bbc2931263b232fba61807fca00e127573eff42Doris Liu
2114bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setPivotX(JNIEnv*, jobject, jlong groupPtr, jfloat pivotX) {
2124bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2131d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->mutateStagingProperties()->setPivotX(pivotX);
2144bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2154bbc2931263b232fba61807fca00e127573eff42Doris Liu
2164bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getPivotY(JNIEnv*, jobject, jlong groupPtr) {
2174bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2181d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return group->stagingProperties()->getPivotY();
2194bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2204bbc2931263b232fba61807fca00e127573eff42Doris Liu
2214bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setPivotY(JNIEnv*, jobject, jlong groupPtr, jfloat pivotY) {
2224bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2231d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->mutateStagingProperties()->setPivotY(pivotY);
2244bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2254bbc2931263b232fba61807fca00e127573eff42Doris Liu
2264bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getScaleX(JNIEnv*, jobject, jlong groupPtr) {
2274bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2281d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return group->stagingProperties()->getScaleX();
2294bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2304bbc2931263b232fba61807fca00e127573eff42Doris Liu
2314bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setScaleX(JNIEnv*, jobject, jlong groupPtr, jfloat scaleX) {
2324bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2331d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->mutateStagingProperties()->setScaleX(scaleX);
2344bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2354bbc2931263b232fba61807fca00e127573eff42Doris Liu
2364bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getScaleY(JNIEnv*, jobject, jlong groupPtr) {
2374bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2381d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return group->stagingProperties()->getScaleY();
2394bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2404bbc2931263b232fba61807fca00e127573eff42Doris Liu
2414bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setScaleY(JNIEnv*, jobject, jlong groupPtr, jfloat scaleY) {
2424bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2431d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->mutateStagingProperties()->setScaleY(scaleY);
2444bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2454bbc2931263b232fba61807fca00e127573eff42Doris Liu
2464bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getTranslateX(JNIEnv*, jobject, jlong groupPtr) {
2474bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2481d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return group->stagingProperties()->getTranslateX();
2494bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2504bbc2931263b232fba61807fca00e127573eff42Doris Liu
2514bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setTranslateX(JNIEnv*, jobject, jlong groupPtr, jfloat translateX) {
2524bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2531d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->mutateStagingProperties()->setTranslateX(translateX);
2544bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2554bbc2931263b232fba61807fca00e127573eff42Doris Liu
2564bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getTranslateY(JNIEnv*, jobject, jlong groupPtr) {
2574bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2581d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return group->stagingProperties()->getTranslateY();
2594bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2604bbc2931263b232fba61807fca00e127573eff42Doris Liu
2614bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setTranslateY(JNIEnv*, jobject, jlong groupPtr, jfloat translateY) {
2624bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
2631d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    group->mutateStagingProperties()->setTranslateY(translateY);
2644bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2654bbc2931263b232fba61807fca00e127573eff42Doris Liu
2664bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setPathData(JNIEnv*, jobject, jlong pathPtr, jlong pathDataPtr) {
2674bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::Path* path = reinterpret_cast<VectorDrawable::Path*>(pathPtr);
2684bbc2931263b232fba61807fca00e127573eff42Doris Liu    PathData* pathData = reinterpret_cast<PathData*>(pathDataPtr);
2691d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    path->mutateStagingProperties()->setData(*pathData);
2704bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2714bbc2931263b232fba61807fca00e127573eff42Doris Liu
2724bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getStrokeWidth(JNIEnv*, jobject, jlong fullPathPtr) {
2734bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
2741d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return fullPath->stagingProperties()->getStrokeWidth();
2754bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2764bbc2931263b232fba61807fca00e127573eff42Doris Liu
2774bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setStrokeWidth(JNIEnv*, jobject, jlong fullPathPtr, jfloat strokeWidth) {
2784bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
2791d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->setStrokeWidth(strokeWidth);
2804bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2814bbc2931263b232fba61807fca00e127573eff42Doris Liu
2824bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jint getStrokeColor(JNIEnv*, jobject, jlong fullPathPtr) {
2834bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
2841d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return fullPath->stagingProperties()->getStrokeColor();
2854bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2864bbc2931263b232fba61807fca00e127573eff42Doris Liu
2874bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setStrokeColor(JNIEnv*, jobject, jlong fullPathPtr, jint strokeColor) {
2884bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
2891d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->setStrokeColor(strokeColor);
2904bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2914bbc2931263b232fba61807fca00e127573eff42Doris Liu
2924bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getStrokeAlpha(JNIEnv*, jobject, jlong fullPathPtr) {
2934bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
2941d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return fullPath->stagingProperties()->getStrokeAlpha();
2954bbc2931263b232fba61807fca00e127573eff42Doris Liu}
2964bbc2931263b232fba61807fca00e127573eff42Doris Liu
2974bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setStrokeAlpha(JNIEnv*, jobject, jlong fullPathPtr, jfloat strokeAlpha) {
2984bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
2991d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->setStrokeAlpha(strokeAlpha);
3004bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3014bbc2931263b232fba61807fca00e127573eff42Doris Liu
3024bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jint getFillColor(JNIEnv*, jobject, jlong fullPathPtr) {
3034bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3041d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return fullPath->stagingProperties()->getFillColor();
3054bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3064bbc2931263b232fba61807fca00e127573eff42Doris Liu
3074bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setFillColor(JNIEnv*, jobject, jlong fullPathPtr, jint fillColor) {
3084bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3091d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->setFillColor(fillColor);
3104bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3114bbc2931263b232fba61807fca00e127573eff42Doris Liu
3124bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getFillAlpha(JNIEnv*, jobject, jlong fullPathPtr) {
3134bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3141d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return fullPath->stagingProperties()->getFillAlpha();
3154bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3164bbc2931263b232fba61807fca00e127573eff42Doris Liu
3174bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setFillAlpha(JNIEnv*, jobject, jlong fullPathPtr, jfloat fillAlpha) {
3184bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3191d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->setFillAlpha(fillAlpha);
3204bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3214bbc2931263b232fba61807fca00e127573eff42Doris Liu
3224bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getTrimPathStart(JNIEnv*, jobject, jlong fullPathPtr) {
3234bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3241d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return fullPath->stagingProperties()->getTrimPathStart();
3254bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3264bbc2931263b232fba61807fca00e127573eff42Doris Liu
3274bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setTrimPathStart(JNIEnv*, jobject, jlong fullPathPtr, jfloat trimPathStart) {
3284bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3291d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->setTrimPathStart(trimPathStart);
3304bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3314bbc2931263b232fba61807fca00e127573eff42Doris Liu
3324bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getTrimPathEnd(JNIEnv*, jobject, jlong fullPathPtr) {
3334bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3341d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return fullPath->stagingProperties()->getTrimPathEnd();
3354bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3364bbc2931263b232fba61807fca00e127573eff42Doris Liu
3374bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setTrimPathEnd(JNIEnv*, jobject, jlong fullPathPtr, jfloat trimPathEnd) {
3384bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3391d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->setTrimPathEnd(trimPathEnd);
3404bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3414bbc2931263b232fba61807fca00e127573eff42Doris Liu
3424bbc2931263b232fba61807fca00e127573eff42Doris Liustatic jfloat getTrimPathOffset(JNIEnv*, jobject, jlong fullPathPtr) {
3434bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3441d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    return fullPath->stagingProperties()->getTrimPathOffset();
3454bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3464bbc2931263b232fba61807fca00e127573eff42Doris Liu
3474bbc2931263b232fba61807fca00e127573eff42Doris Liustatic void setTrimPathOffset(JNIEnv*, jobject, jlong fullPathPtr, jfloat trimPathOffset) {
3484bbc2931263b232fba61807fca00e127573eff42Doris Liu    VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(fullPathPtr);
3491d8e194661085f9a18ab1b3cd12f9e19d3a86be5Doris Liu    fullPath->mutateStagingProperties()->setTrimPathOffset(trimPathOffset);
3504bbc2931263b232fba61807fca00e127573eff42Doris Liu}
3514bbc2931263b232fba61807fca00e127573eff42Doris Liu
3524bbc2931263b232fba61807fca00e127573eff42Doris Liustatic const JNINativeMethod gMethods[] = {
353f8d131cc8dc4ef675b8f8fc57dcc26062d575d32Doris Liu        {"nDraw", "(JJJLandroid/graphics/Rect;ZZ)I", (void*)draw},
3544bbc2931263b232fba61807fca00e127573eff42Doris Liu        {"nGetFullPathProperties", "(J[BI)Z", (void*)getFullPathProperties},
3554bbc2931263b232fba61807fca00e127573eff42Doris Liu        {"nGetGroupProperties", "(J[FI)Z", (void*)getGroupProperties},
3564bbc2931263b232fba61807fca00e127573eff42Doris Liu        {"nSetPathString", "(JLjava/lang/String;I)V", (void*)setPathString},
357299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetName", "(JLjava/lang/String;)V", (void*)setNodeName},
3584bbc2931263b232fba61807fca00e127573eff42Doris Liu
359299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        // ------------- @FastNative ----------------
360299659ddb7e0c34ca094abe485bcd0989727fc07John Reck
361299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nCreateTree", "(J)J", (void*)createTree},
362299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nCreateTreeFromCopy", "(JJ)J", (void*)createTreeFromCopy},
363299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetRendererViewportSize", "(JFF)V", (void*)setTreeViewportSize},
364299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetRootAlpha", "(JF)Z", (void*)setRootAlpha},
365299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetRootAlpha", "(J)F", (void*)getRootAlpha},
366299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetAllowCaching", "(JZ)V", (void*)setAllowCaching},
367299659ddb7e0c34ca094abe485bcd0989727fc07John Reck
368299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nCreateFullPath", "()J", (void*)createEmptyFullPath},
369299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nCreateFullPath", "(J)J", (void*)createFullPath},
370299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nUpdateFullPathProperties", "(JFIFIFFFFFIII)V", (void*)updateFullPathPropertiesAndStrokeStyles},
371299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nUpdateFullPathFillGradient", "(JJ)V", (void*)updateFullPathFillGradient},
372299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nUpdateFullPathStrokeGradient", "(JJ)V", (void*)updateFullPathStrokeGradient},
373299659ddb7e0c34ca094abe485bcd0989727fc07John Reck
374299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nCreateClipPath", "()J", (void*)createEmptyClipPath},
375299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nCreateClipPath", "(J)J", (void*)createClipPath},
376299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nCreateGroup", "()J", (void*)createEmptyGroup},
377299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nCreateGroup", "(J)J", (void*)createGroup},
378299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nUpdateGroupProperties", "(JFFFFFFF)V", (void*)updateGroupProperties},
379299659ddb7e0c34ca094abe485bcd0989727fc07John Reck
380299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nAddChild", "(JJ)V", (void*)addChild},
381299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetRotation", "(J)F", (void*)getRotation},
382299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetRotation", "(JF)V", (void*)setRotation},
383299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetPivotX", "(J)F", (void*)getPivotX},
384299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetPivotX", "(JF)V", (void*)setPivotX},
385299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetPivotY", "(J)F", (void*)getPivotY},
386299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetPivotY", "(JF)V", (void*)setPivotY},
387299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetScaleX", "(J)F", (void*)getScaleX},
388299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetScaleX", "(JF)V", (void*)setScaleX},
389299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetScaleY", "(J)F", (void*)getScaleY},
390299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetScaleY", "(JF)V", (void*)setScaleY},
391299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetTranslateX", "(J)F", (void*)getTranslateX},
392299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetTranslateX", "(JF)V", (void*)setTranslateX},
393299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetTranslateY", "(J)F", (void*)getTranslateY},
394299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetTranslateY", "(JF)V", (void*)setTranslateY},
395299659ddb7e0c34ca094abe485bcd0989727fc07John Reck
396299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetPathData", "(JJ)V", (void*)setPathData},
397299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetStrokeWidth", "(J)F", (void*)getStrokeWidth},
398299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetStrokeWidth", "(JF)V", (void*)setStrokeWidth},
399299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetStrokeColor", "(J)I", (void*)getStrokeColor},
400299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetStrokeColor", "(JI)V", (void*)setStrokeColor},
401299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetStrokeAlpha", "(J)F", (void*)getStrokeAlpha},
402299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetStrokeAlpha", "(JF)V", (void*)setStrokeAlpha},
403299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetFillColor", "(J)I", (void*)getFillColor},
404299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetFillColor", "(JI)V", (void*)setFillColor},
405299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetFillAlpha", "(J)F", (void*)getFillAlpha},
406299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetFillAlpha", "(JF)V", (void*)setFillAlpha},
407299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetTrimPathStart", "(J)F", (void*)getTrimPathStart},
408299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetTrimPathStart", "(JF)V", (void*)setTrimPathStart},
409299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetTrimPathEnd", "(J)F", (void*)getTrimPathEnd},
410299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetTrimPathEnd", "(JF)V", (void*)setTrimPathEnd},
411299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nGetTrimPathOffset", "(J)F", (void*)getTrimPathOffset},
412299659ddb7e0c34ca094abe485bcd0989727fc07John Reck        {"nSetTrimPathOffset", "(JF)V", (void*)setTrimPathOffset},
4134bbc2931263b232fba61807fca00e127573eff42Doris Liu};
4144bbc2931263b232fba61807fca00e127573eff42Doris Liu
4154bbc2931263b232fba61807fca00e127573eff42Doris Liuint register_android_graphics_drawable_VectorDrawable(JNIEnv* env) {
4164bbc2931263b232fba61807fca00e127573eff42Doris Liu    return RegisterMethodsOrDie(env, "android/graphics/drawable/VectorDrawable", gMethods, NELEM(gMethods));
4174bbc2931263b232fba61807fca00e127573eff42Doris Liu}
4184bbc2931263b232fba61807fca00e127573eff42Doris Liu
4194bbc2931263b232fba61807fca00e127573eff42Doris Liu}; // namespace android
420