Merge "Fix translationY not being set correctly for VD during animation" into nyc-dev
This commit is contained in:
@@ -40,11 +40,11 @@ namespace android {
|
|||||||
namespace uirenderer {
|
namespace uirenderer {
|
||||||
|
|
||||||
namespace VectorDrawable {
|
namespace VectorDrawable {
|
||||||
#define VD_SET_PROP_WITH_FLAG(field, value, flag) (VD_SET_PROP_AND_NOTIFY(field, value) ? (flag = true, true) : false)
|
#define VD_SET_PRIMITIVE_FIELD_WITH_FLAG(field, value, flag) (VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(field, (value)) ? ((flag) = true, true) : false)
|
||||||
#define VD_SET_PROP(field, value) (value != field ? (field = value, true) : false)
|
#define VD_SET_PROP(field, value) ((value) != (field) ? ((field) = (value), true) : false)
|
||||||
#define VD_SET_PROP_AND_NOTIFY(field, value) ({ bool retVal = VD_SET_PROP(field, value);\
|
#define VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(field, value) ({ bool retVal = VD_SET_PROP((mPrimitiveFields.field), (value));\
|
||||||
onPropertyChanged(); retVal;})
|
onPropertyChanged(); retVal;})
|
||||||
#define UPDATE_SKPROP(field, value) ({bool retVal = (field != value); if (field != value) SkRefCnt_SafeAssign(field, value); retVal;})
|
#define UPDATE_SKPROP(field, value) ({bool retVal = ((field) != (value)); if ((field) != (value)) SkRefCnt_SafeAssign((field), (value)); retVal;})
|
||||||
|
|
||||||
/* A VectorDrawable is composed of a tree of nodes.
|
/* A VectorDrawable is composed of a tree of nodes.
|
||||||
* Each node can be a group node, or a path.
|
* Each node can be a group node, or a path.
|
||||||
@@ -248,49 +248,49 @@ public:
|
|||||||
return mPrimitiveFields.strokeWidth;
|
return mPrimitiveFields.strokeWidth;
|
||||||
}
|
}
|
||||||
void setStrokeWidth(float strokeWidth) {
|
void setStrokeWidth(float strokeWidth) {
|
||||||
VD_SET_PROP_AND_NOTIFY(strokeWidth, strokeWidth);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(strokeWidth, strokeWidth);
|
||||||
}
|
}
|
||||||
SkColor getStrokeColor() const{
|
SkColor getStrokeColor() const{
|
||||||
return mPrimitiveFields.strokeColor;
|
return mPrimitiveFields.strokeColor;
|
||||||
}
|
}
|
||||||
void setStrokeColor(SkColor strokeColor) {
|
void setStrokeColor(SkColor strokeColor) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.strokeColor, strokeColor);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(strokeColor, strokeColor);
|
||||||
}
|
}
|
||||||
float getStrokeAlpha() const{
|
float getStrokeAlpha() const{
|
||||||
return mPrimitiveFields.strokeAlpha;
|
return mPrimitiveFields.strokeAlpha;
|
||||||
}
|
}
|
||||||
void setStrokeAlpha(float strokeAlpha) {
|
void setStrokeAlpha(float strokeAlpha) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.strokeAlpha, strokeAlpha);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(strokeAlpha, strokeAlpha);
|
||||||
}
|
}
|
||||||
SkColor getFillColor() const {
|
SkColor getFillColor() const {
|
||||||
return mPrimitiveFields.fillColor;
|
return mPrimitiveFields.fillColor;
|
||||||
}
|
}
|
||||||
void setFillColor(SkColor fillColor) {
|
void setFillColor(SkColor fillColor) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.fillColor, fillColor);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(fillColor, fillColor);
|
||||||
}
|
}
|
||||||
float getFillAlpha() const{
|
float getFillAlpha() const{
|
||||||
return mPrimitiveFields.fillAlpha;
|
return mPrimitiveFields.fillAlpha;
|
||||||
}
|
}
|
||||||
void setFillAlpha(float fillAlpha) {
|
void setFillAlpha(float fillAlpha) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.fillAlpha, fillAlpha);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(fillAlpha, fillAlpha);
|
||||||
}
|
}
|
||||||
float getTrimPathStart() const{
|
float getTrimPathStart() const{
|
||||||
return mPrimitiveFields.trimPathStart;
|
return mPrimitiveFields.trimPathStart;
|
||||||
}
|
}
|
||||||
void setTrimPathStart(float trimPathStart) {
|
void setTrimPathStart(float trimPathStart) {
|
||||||
VD_SET_PROP_WITH_FLAG(mPrimitiveFields.trimPathStart, trimPathStart, mTrimDirty);
|
VD_SET_PRIMITIVE_FIELD_WITH_FLAG(trimPathStart, trimPathStart, mTrimDirty);
|
||||||
}
|
}
|
||||||
float getTrimPathEnd() const{
|
float getTrimPathEnd() const{
|
||||||
return mPrimitiveFields.trimPathEnd;
|
return mPrimitiveFields.trimPathEnd;
|
||||||
}
|
}
|
||||||
void setTrimPathEnd(float trimPathEnd) {
|
void setTrimPathEnd(float trimPathEnd) {
|
||||||
VD_SET_PROP_WITH_FLAG(mPrimitiveFields.trimPathEnd, trimPathEnd, mTrimDirty);
|
VD_SET_PRIMITIVE_FIELD_WITH_FLAG(trimPathEnd, trimPathEnd, mTrimDirty);
|
||||||
}
|
}
|
||||||
float getTrimPathOffset() const{
|
float getTrimPathOffset() const{
|
||||||
return mPrimitiveFields.trimPathOffset;
|
return mPrimitiveFields.trimPathOffset;
|
||||||
}
|
}
|
||||||
void setTrimPathOffset(float trimPathOffset) {
|
void setTrimPathOffset(float trimPathOffset) {
|
||||||
VD_SET_PROP_WITH_FLAG(mPrimitiveFields.trimPathOffset, trimPathOffset, mTrimDirty);
|
VD_SET_PRIMITIVE_FIELD_WITH_FLAG(trimPathOffset, trimPathOffset, mTrimDirty);
|
||||||
}
|
}
|
||||||
|
|
||||||
float getStrokeMiterLimit() const {
|
float getStrokeMiterLimit() const {
|
||||||
@@ -425,43 +425,43 @@ public:
|
|||||||
return mPrimitiveFields.rotate;
|
return mPrimitiveFields.rotate;
|
||||||
}
|
}
|
||||||
void setRotation(float rotation) {
|
void setRotation(float rotation) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.rotate, rotation);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(rotate, rotation);
|
||||||
}
|
}
|
||||||
float getPivotX() const {
|
float getPivotX() const {
|
||||||
return mPrimitiveFields.pivotX;
|
return mPrimitiveFields.pivotX;
|
||||||
}
|
}
|
||||||
void setPivotX(float pivotX) {
|
void setPivotX(float pivotX) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.pivotX, pivotX);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(pivotX, pivotX);
|
||||||
}
|
}
|
||||||
float getPivotY() const {
|
float getPivotY() const {
|
||||||
return mPrimitiveFields.pivotY;
|
return mPrimitiveFields.pivotY;
|
||||||
}
|
}
|
||||||
void setPivotY(float pivotY) {
|
void setPivotY(float pivotY) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.pivotY, pivotY);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(pivotY, pivotY);
|
||||||
}
|
}
|
||||||
float getScaleX() const {
|
float getScaleX() const {
|
||||||
return mPrimitiveFields.scaleX;
|
return mPrimitiveFields.scaleX;
|
||||||
}
|
}
|
||||||
void setScaleX(float scaleX) {
|
void setScaleX(float scaleX) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.scaleX, scaleX);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(scaleX, scaleX);
|
||||||
}
|
}
|
||||||
float getScaleY() const {
|
float getScaleY() const {
|
||||||
return mPrimitiveFields.scaleY;
|
return mPrimitiveFields.scaleY;
|
||||||
}
|
}
|
||||||
void setScaleY(float scaleY) {
|
void setScaleY(float scaleY) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.scaleY, scaleY);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(scaleY, scaleY);
|
||||||
}
|
}
|
||||||
float getTranslateX() const {
|
float getTranslateX() const {
|
||||||
return mPrimitiveFields.translateX;
|
return mPrimitiveFields.translateX;
|
||||||
}
|
}
|
||||||
void setTranslateX(float translateX) {
|
void setTranslateX(float translateX) {
|
||||||
VD_SET_PROP_AND_NOTIFY(mPrimitiveFields.translateX, translateX);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(translateX, translateX);
|
||||||
}
|
}
|
||||||
float getTranslateY() const {
|
float getTranslateY() const {
|
||||||
return mPrimitiveFields.translateY;
|
return mPrimitiveFields.translateY;
|
||||||
}
|
}
|
||||||
void setTranslateY(float translateY) {
|
void setTranslateY(float translateY) {
|
||||||
VD_SET_PROP_AND_NOTIFY(translateY, translateY);
|
VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(translateY, translateY);
|
||||||
}
|
}
|
||||||
void updateProperties(float rotate, float pivotX, float pivotY,
|
void updateProperties(float rotate, float pivotX, float pivotY,
|
||||||
float scaleX, float scaleY, float translateX, float translateY) {
|
float scaleX, float scaleY, float translateX, float translateY) {
|
||||||
|
|||||||
@@ -390,5 +390,40 @@ TEST(VectorDrawable, matrixScale) {
|
|||||||
EXPECT_EQ(matrixAndScale.matrixScale, actualMatrixScale);
|
EXPECT_EQ(matrixAndScale.matrixScale, actualMatrixScale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(VectorDrawable, groupProperties) {
|
||||||
|
//TODO: Also need to test property sync and dirty flag when properties change.
|
||||||
|
VectorDrawable::Group group;
|
||||||
|
VectorDrawable::Group::GroupProperties* properties = group.mutateProperties();
|
||||||
|
// Test default values, change values through setters and verify the change through getters.
|
||||||
|
EXPECT_EQ(0.0f, properties->getTranslateX());
|
||||||
|
properties->setTranslateX(1.0f);
|
||||||
|
EXPECT_EQ(1.0f, properties->getTranslateX());
|
||||||
|
|
||||||
|
EXPECT_EQ(0.0f, properties->getTranslateY());
|
||||||
|
properties->setTranslateY(1.0f);
|
||||||
|
EXPECT_EQ(1.0f, properties->getTranslateY());
|
||||||
|
|
||||||
|
EXPECT_EQ(0.0f, properties->getRotation());
|
||||||
|
properties->setRotation(1.0f);
|
||||||
|
EXPECT_EQ(1.0f, properties->getRotation());
|
||||||
|
|
||||||
|
EXPECT_EQ(1.0f, properties->getScaleX());
|
||||||
|
properties->setScaleX(0.0f);
|
||||||
|
EXPECT_EQ(0.0f, properties->getScaleX());
|
||||||
|
|
||||||
|
EXPECT_EQ(1.0f, properties->getScaleY());
|
||||||
|
properties->setScaleY(0.0f);
|
||||||
|
EXPECT_EQ(0.0f, properties->getScaleY());
|
||||||
|
|
||||||
|
EXPECT_EQ(0.0f, properties->getPivotX());
|
||||||
|
properties->setPivotX(1.0f);
|
||||||
|
EXPECT_EQ(1.0f, properties->getPivotX());
|
||||||
|
|
||||||
|
EXPECT_EQ(0.0f, properties->getPivotY());
|
||||||
|
properties->setPivotY(1.0f);
|
||||||
|
EXPECT_EQ(1.0f, properties->getPivotY());
|
||||||
|
|
||||||
|
}
|
||||||
}; // namespace uirenderer
|
}; // namespace uirenderer
|
||||||
}; // namespace android
|
}; // namespace android
|
||||||
|
|||||||
Reference in New Issue
Block a user