Merge "Copy native tree's property when mutate vector drawable" into nyc-dev
This commit is contained in:
@@ -36,6 +36,13 @@ static jlong createTree(JNIEnv*, jobject, jlong groupPtr) {
|
||||
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) {
|
||||
VectorDrawable::FullPath* newPath = new VectorDrawable::FullPath();
|
||||
return reinterpret_cast<jlong>(newPath);
|
||||
@@ -344,6 +351,7 @@ static void setTrimPathOffset(JNIEnv*, jobject, jlong fullPathPtr, jfloat trimPa
|
||||
|
||||
static const JNINativeMethod gMethods[] = {
|
||||
{"nCreateTree", "!(J)J", (void*)createTree},
|
||||
{"nCreateTreeFromCopy", "!(JJ)J", (void*)createTreeFromCopy},
|
||||
{"nSetRendererViewportSize", "!(JFF)V", (void*)setTreeViewportSize},
|
||||
{"nSetRootAlpha", "!(JF)Z", (void*)setRootAlpha},
|
||||
{"nGetRootAlpha", "!(J)F", (void*)getRootAlpha},
|
||||
|
||||
@@ -804,7 +804,7 @@ public class VectorDrawable extends Drawable {
|
||||
mTintMode = copy.mTintMode;
|
||||
mAutoMirrored = copy.mAutoMirrored;
|
||||
mRootGroup = new VGroup(copy.mRootGroup, mVGTargetsMap);
|
||||
createNativeTree(mRootGroup);
|
||||
createNativeTreeFromCopy(copy, mRootGroup);
|
||||
|
||||
mBaseWidth = copy.mBaseWidth;
|
||||
mBaseHeight = copy.mBaseHeight;
|
||||
@@ -826,6 +826,16 @@ public class VectorDrawable extends Drawable {
|
||||
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() {
|
||||
mRootGroup.setTree(mNativeTree);
|
||||
mAllocationOfAllNodes = mRootGroup.getNativeSize();
|
||||
@@ -1777,6 +1787,7 @@ public class VectorDrawable extends Drawable {
|
||||
}
|
||||
|
||||
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,
|
||||
float viewportHeight);
|
||||
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) {
|
||||
return nullptr;
|
||||
} else {
|
||||
outPaint->setColorFilter(mStagingProperties.getColorFilter());
|
||||
outPaint->setColorFilter(prop->getColorFilter());
|
||||
outPaint->setFilterQuality(kLow_SkFilterQuality);
|
||||
outPaint->setAlpha(prop->getRootAlpha() * 255);
|
||||
return outPaint;
|
||||
|
||||
@@ -542,6 +542,12 @@ public:
|
||||
Tree(Group* rootNode) : mRootNode(rootNode) {
|
||||
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
|
||||
// canvas. Returns the number of pixels needed for the bitmap cache.
|
||||
int draw(Canvas* outCanvas, SkColorFilter* colorFilter,
|
||||
@@ -666,7 +672,7 @@ public:
|
||||
};
|
||||
void onPropertyChanged(TreeProperties* prop);
|
||||
TreeProperties* mutateStagingProperties() { return &mStagingProperties; }
|
||||
const TreeProperties* stagingProperties() { return &mStagingProperties; }
|
||||
const TreeProperties* stagingProperties() const { return &mStagingProperties; }
|
||||
PushStagingFunctor* getFunctor() { return &mFunctor;}
|
||||
|
||||
// This should only be called from animations on RT
|
||||
|
||||
Reference in New Issue
Block a user