|
@@ -46,7 +46,7 @@ PropertyParserTransform::~PropertyParserTransform()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Called to parse a RCSS transform declaration.
|
|
// Called to parse a RCSS transform declaration.
|
|
|
-bool PropertyParserTransform::ParseValue(Property& property, const String& value, const ParameterMap& parameters) const
|
|
|
|
|
|
|
+bool PropertyParserTransform::ParseValue(Property& property, const String& value, const ParameterMap& /*parameters*/) const
|
|
|
{
|
|
{
|
|
|
if(value == "none")
|
|
if(value == "none")
|
|
|
{
|
|
{
|
|
@@ -55,7 +55,7 @@ bool PropertyParserTransform::ParseValue(Property& property, const String& value
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- UniquePtr<Transform> transform(new Transform);
|
|
|
|
|
|
|
+ TransformPtr transform = std::make_shared<Transform>();
|
|
|
|
|
|
|
|
char const* next = value.c_str();
|
|
char const* next = value.c_str();
|
|
|
|
|
|
|
@@ -72,97 +72,98 @@ bool PropertyParserTransform::ParseValue(Property& property, const String& value
|
|
|
const PropertyParser* number3[] = { &number, &number, &number };
|
|
const PropertyParser* number3[] = { &number, &number, &number };
|
|
|
const PropertyParser* number6[] = { &number, &number, &number, &number, &number, &number };
|
|
const PropertyParser* number6[] = { &number, &number, &number, &number, &number, &number };
|
|
|
const PropertyParser* number16[] = { &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number };
|
|
const PropertyParser* number16[] = { &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number, &number };
|
|
|
- while (strlen(next))
|
|
|
|
|
|
|
+
|
|
|
|
|
+ while (*next)
|
|
|
{
|
|
{
|
|
|
using namespace Transforms;
|
|
using namespace Transforms;
|
|
|
int bytes_read = 0;
|
|
int bytes_read = 0;
|
|
|
|
|
|
|
|
- if ((bytes_read = Scan(next, "perspective", length1, args, 1)))
|
|
|
|
|
|
|
+ if (Scan(bytes_read, next, "perspective", length1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Perspective(args) });
|
|
transform->AddPrimitive({ Perspective(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "matrix", number6, args, 6)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "matrix", number6, args, 6))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Matrix2D(args) });
|
|
transform->AddPrimitive({ Matrix2D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "matrix3d", number16, args, 16)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "matrix3d", number16, args, 16))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Matrix3D(args) });
|
|
transform->AddPrimitive({ Matrix3D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "translateX", length1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "translateX", length1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ TranslateX(args) });
|
|
transform->AddPrimitive({ TranslateX(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "translateY", length1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "translateY", length1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ TranslateY(args) });
|
|
transform->AddPrimitive({ TranslateY(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "translateZ", length1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "translateZ", length1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ TranslateZ(args) });
|
|
transform->AddPrimitive({ TranslateZ(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "translate", length2, args, 2)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "translate", length2, args, 2))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Translate2D(args) });
|
|
transform->AddPrimitive({ Translate2D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "translate3d", length3, args, 3)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "translate3d", length3, args, 3))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Translate3D(args) });
|
|
transform->AddPrimitive({ Translate3D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "scaleX", number1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "scaleX", number1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ ScaleX(args) });
|
|
transform->AddPrimitive({ ScaleX(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "scaleY", number1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "scaleY", number1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ ScaleY(args) });
|
|
transform->AddPrimitive({ ScaleY(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "scaleZ", number1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "scaleZ", number1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ ScaleZ(args) });
|
|
transform->AddPrimitive({ ScaleZ(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "scale", number2, args, 2)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "scale", number2, args, 2))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Scale2D(args) });
|
|
transform->AddPrimitive({ Scale2D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "scale", number1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "scale", number1, args, 1))
|
|
|
{
|
|
{
|
|
|
args[1] = args[0];
|
|
args[1] = args[0];
|
|
|
transform->AddPrimitive({ Scale2D(args) });
|
|
transform->AddPrimitive({ Scale2D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "scale3d", number3, args, 3)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "scale3d", number3, args, 3))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Scale3D(args) });
|
|
transform->AddPrimitive({ Scale3D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "rotateX", angle1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "rotateX", angle1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ RotateX(args) });
|
|
transform->AddPrimitive({ RotateX(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "rotateY", angle1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "rotateY", angle1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ RotateY(args) });
|
|
transform->AddPrimitive({ RotateY(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "rotateZ", angle1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "rotateZ", angle1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ RotateZ(args) });
|
|
transform->AddPrimitive({ RotateZ(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "rotate", angle1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "rotate", angle1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Rotate2D(args) });
|
|
transform->AddPrimitive({ Rotate2D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "rotate3d", number3angle1, args, 4)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "rotate3d", number3angle1, args, 4))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Rotate3D(args) });
|
|
transform->AddPrimitive({ Rotate3D(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "skewX", angle1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "skewX", angle1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ SkewX(args) });
|
|
transform->AddPrimitive({ SkewX(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "skewY", angle1, args, 1)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "skewY", angle1, args, 1))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ SkewY(args) });
|
|
transform->AddPrimitive({ SkewY(args) });
|
|
|
}
|
|
}
|
|
|
- else if ((bytes_read = Scan(next, "skew", angle2, args, 2)))
|
|
|
|
|
|
|
+ else if (Scan(bytes_read, next, "skew", angle2, args, 2))
|
|
|
{
|
|
{
|
|
|
transform->AddPrimitive({ Skew2D(args) });
|
|
transform->AddPrimitive({ Skew2D(args) });
|
|
|
}
|
|
}
|
|
@@ -177,15 +178,16 @@ bool PropertyParserTransform::ParseValue(Property& property, const String& value
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- property.value = Variant(TransformPtr(std::move(transform)));
|
|
|
|
|
|
|
+ property.value = Variant(std::move(transform));
|
|
|
property.unit = Property::TRANSFORM;
|
|
property.unit = Property::TRANSFORM;
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Scan a string for a parameterized keyword with a certain number of numeric arguments.
|
|
// Scan a string for a parameterized keyword with a certain number of numeric arguments.
|
|
|
-int PropertyParserTransform::Scan(const char* str, const char* keyword, const PropertyParser** parsers, Transforms::NumericValue* args, int nargs) const
|
|
|
|
|
|
|
+bool PropertyParserTransform::Scan(int& out_bytes_read, const char* str, const char* keyword, const PropertyParser** parsers, Transforms::NumericValue* args, int nargs) const
|
|
|
{
|
|
{
|
|
|
|
|
+ out_bytes_read = 0;
|
|
|
int total_bytes_read = 0, bytes_read = 0;
|
|
int total_bytes_read = 0, bytes_read = 0;
|
|
|
|
|
|
|
|
/* use the quicker stack-based argument buffer, if possible */
|
|
/* use the quicker stack-based argument buffer, if possible */
|
|
@@ -217,7 +219,7 @@ int PropertyParserTransform::Scan(const char* str, const char* keyword, const Pr
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- return 0;
|
|
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* skip any white space */
|
|
/* skip any white space */
|
|
@@ -235,7 +237,7 @@ int PropertyParserTransform::Scan(const char* str, const char* keyword, const Pr
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- return 0;
|
|
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* parse the arguments */
|
|
/* parse the arguments */
|
|
@@ -254,7 +256,7 @@ int PropertyParserTransform::Scan(const char* str, const char* keyword, const Pr
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- return 0;
|
|
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* find the comma */
|
|
/* find the comma */
|
|
@@ -268,7 +270,7 @@ int PropertyParserTransform::Scan(const char* str, const char* keyword, const Pr
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- return 0;
|
|
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -282,10 +284,11 @@ int PropertyParserTransform::Scan(const char* str, const char* keyword, const Pr
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- return 0;
|
|
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return total_bytes_read;
|
|
|
|
|
|
|
+ out_bytes_read = total_bytes_read;
|
|
|
|
|
+ return total_bytes_read > 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|