Merge "Copy native tree\'s property when mutate vector drawable" into nyc-dev
am: fceaa60e24
* commit 'fceaa60e249575021e41b873673e12d9b4123fbe':
Copy native tree's property when mutate vector drawable
Change-Id: I539bbbbf5ad57c3d79ac3e2a4517ac160379c6cf
This commit is contained in:
@@ -36,6 +36,13 @@ static jlong createTree(JNIEnv*, jobject, jlong groupPtr) {
|
|||||||
return reinterpret_cast<jlong>(tree);
|
return reinterpret_cast<jlong>(tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static jlong createTreeFromCopy(JNIEnv*, jobject, jlong treePtr, jlong groupPtr) {
|
||||||
|
VectorDrawable::Group* rootGroup = reinterpret_cast<VectorDrawable::Group*>(groupPtr);
|
||||||
|
VectorDrawable::Tree* treeToCopy = reinterpret_cast<VectorDrawable::Tree*>(treePtr);
|
||||||
|
VectorDrawable::Tree* tree = new VectorDrawable::Tree(treeToCopy, rootGroup);
|
||||||
|
return reinterpret_cast<jlong>(tree);
|
||||||
|
}
|
||||||
|
|
||||||
static jlong createEmptyFullPath(JNIEnv*, jobject) {
|
static jlong createEmptyFullPath(JNIEnv*, jobject) {
|
||||||
VectorDrawable::FullPath* newPath = new VectorDrawable::FullPath();
|
VectorDrawable::FullPath* newPath = new VectorDrawable::FullPath();
|
||||||
return reinterpret_cast<jlong>(newPath);
|
return reinterpret_cast<jlong>(newPath);
|
||||||
@@ -344,6 +351,7 @@ static void setTrimPathOffset(JNIEnv*, jobject, jlong fullPathPtr, jfloat trimPa
|
|||||||
|
|
||||||
static const JNINativeMethod gMethods[] = {
|
static const JNINativeMethod gMethods[] = {
|
||||||
{"nCreateTree", "!(J)J", (void*)createTree},
|
{"nCreateTree", "!(J)J", (void*)createTree},
|
||||||
|
{"nCreateTreeFromCopy", "!(JJ)J", (void*)createTreeFromCopy},
|
||||||
{"nSetRendererViewportSize", "!(JFF)V", (void*)setTreeViewportSize},
|
{"nSetRendererViewportSize", "!(JFF)V", (void*)setTreeViewportSize},
|
||||||
{"nSetRootAlpha", "!(JF)Z", (void*)setRootAlpha},
|
{"nSetRootAlpha", "!(JF)Z", (void*)setRootAlpha},
|
||||||
{"nGetRootAlpha", "!(J)F", (void*)getRootAlpha},
|
{"nGetRootAlpha", "!(J)F", (void*)getRootAlpha},
|
||||||
|
|||||||
@@ -804,7 +804,7 @@ public class VectorDrawable extends Drawable {
|
|||||||
mTintMode = copy.mTintMode;
|
mTintMode = copy.mTintMode;
|
||||||
mAutoMirrored = copy.mAutoMirrored;
|
mAutoMirrored = copy.mAutoMirrored;
|
||||||
mRootGroup = new VGroup(copy.mRootGroup, mVGTargetsMap);
|
mRootGroup = new VGroup(copy.mRootGroup, mVGTargetsMap);
|
||||||
createNativeTree(mRootGroup);
|
createNativeTreeFromCopy(copy, mRootGroup);
|
||||||
|
|
||||||
mBaseWidth = copy.mBaseWidth;
|
mBaseWidth = copy.mBaseWidth;
|
||||||
mBaseHeight = copy.mBaseHeight;
|
mBaseHeight = copy.mBaseHeight;
|
||||||
@@ -826,6 +826,16 @@ public class VectorDrawable extends Drawable {
|
|||||||
VMRuntime.getRuntime().registerNativeAllocation(NATIVE_ALLOCATION_SIZE);
|
VMRuntime.getRuntime().registerNativeAllocation(NATIVE_ALLOCATION_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a new native tree with the given root group, and copy the properties from the
|
||||||
|
// given VectorDrawableState's native tree.
|
||||||
|
private void createNativeTreeFromCopy(VectorDrawableState copy, VGroup rootGroup) {
|
||||||
|
mNativeTree = new VirtualRefBasePtr(nCreateTreeFromCopy(
|
||||||
|
copy.mNativeTree.get(), rootGroup.mNativePtr));
|
||||||
|
// Register tree size
|
||||||
|
VMRuntime.getRuntime().registerNativeAllocation(NATIVE_ALLOCATION_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void onTreeConstructionFinished() {
|
void onTreeConstructionFinished() {
|
||||||
mRootGroup.setTree(mNativeTree);
|
mRootGroup.setTree(mNativeTree);
|
||||||
mAllocationOfAllNodes = mRootGroup.getNativeSize();
|
mAllocationOfAllNodes = mRootGroup.getNativeSize();
|
||||||
@@ -1777,6 +1787,7 @@ public class VectorDrawable extends Drawable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static native long nCreateTree(long rootGroupPtr);
|
private static native long nCreateTree(long rootGroupPtr);
|
||||||
|
private static native long nCreateTreeFromCopy(long treeToCopy, long rootGroupPtr);
|
||||||
private static native void nSetRendererViewportSize(long rendererPtr, float viewportWidth,
|
private static native void nSetRendererViewportSize(long rendererPtr, float viewportWidth,
|
||||||
float viewportHeight);
|
float viewportHeight);
|
||||||
private static native boolean nSetRootAlpha(long rendererPtr, float alpha);
|
private static native boolean nSetRootAlpha(long rendererPtr, float alpha);
|
||||||
|
|||||||
@@ -530,7 +530,7 @@ SkPaint* Tree::updatePaint(SkPaint* outPaint, TreeProperties* prop) {
|
|||||||
if (prop->getRootAlpha() == 1.0f && prop->getColorFilter() == nullptr) {
|
if (prop->getRootAlpha() == 1.0f && prop->getColorFilter() == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} else {
|
} else {
|
||||||
outPaint->setColorFilter(mStagingProperties.getColorFilter());
|
outPaint->setColorFilter(prop->getColorFilter());
|
||||||
outPaint->setFilterQuality(kLow_SkFilterQuality);
|
outPaint->setFilterQuality(kLow_SkFilterQuality);
|
||||||
outPaint->setAlpha(prop->getRootAlpha() * 255);
|
outPaint->setAlpha(prop->getRootAlpha() * 255);
|
||||||
return outPaint;
|
return outPaint;
|
||||||
|
|||||||
@@ -542,6 +542,12 @@ public:
|
|||||||
Tree(Group* rootNode) : mRootNode(rootNode) {
|
Tree(Group* rootNode) : mRootNode(rootNode) {
|
||||||
mRootNode->setPropertyChangedListener(&mPropertyChangedListener);
|
mRootNode->setPropertyChangedListener(&mPropertyChangedListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy properties from the tree and use the give node as the root node
|
||||||
|
Tree(const Tree* copy, Group* rootNode) : Tree(rootNode) {
|
||||||
|
mStagingProperties.syncAnimatableProperties(*copy->stagingProperties());
|
||||||
|
mStagingProperties.syncNonAnimatableProperties(*copy->stagingProperties());
|
||||||
|
}
|
||||||
// Draws the VD onto a bitmap cache, then the bitmap cache will be rendered onto the input
|
// Draws the VD onto a bitmap cache, then the bitmap cache will be rendered onto the input
|
||||||
// canvas. Returns the number of pixels needed for the bitmap cache.
|
// canvas. Returns the number of pixels needed for the bitmap cache.
|
||||||
int draw(Canvas* outCanvas, SkColorFilter* colorFilter,
|
int draw(Canvas* outCanvas, SkColorFilter* colorFilter,
|
||||||
@@ -666,7 +672,7 @@ public:
|
|||||||
};
|
};
|
||||||
void onPropertyChanged(TreeProperties* prop);
|
void onPropertyChanged(TreeProperties* prop);
|
||||||
TreeProperties* mutateStagingProperties() { return &mStagingProperties; }
|
TreeProperties* mutateStagingProperties() { return &mStagingProperties; }
|
||||||
const TreeProperties* stagingProperties() { return &mStagingProperties; }
|
const TreeProperties* stagingProperties() const { return &mStagingProperties; }
|
||||||
PushStagingFunctor* getFunctor() { return &mFunctor;}
|
PushStagingFunctor* getFunctor() { return &mFunctor;}
|
||||||
|
|
||||||
// This should only be called from animations on RT
|
// This should only be called from animations on RT
|
||||||
|
|||||||
Reference in New Issue
Block a user