rlottie/header: fixed issue with public header dependency of c++14

c++11 only supports static constexpr function with one return statement.
so our maptype() function is valid in c++14 but not on c++11.
to work around used the explicit class instantiation to map property type to value type.
This commit is contained in:
subhransu mohanty 2019-04-30 16:52:46 +09:00 committed by Subhransu
parent 6db72aa269
commit 9e56f12850
2 changed files with 27 additions and 33 deletions

View File

@ -83,6 +83,12 @@ enum class Property {
TrOpacity /*!< Transform Opacity property of Layer and Group object , value type is float [ 0 .. 100] */ TrOpacity /*!< Transform Opacity property of Layer and Group object , value type is float [ 0 .. 100] */
}; };
struct Color_Type{};
struct Point_Type{};
struct Size_Type{};
struct Float_Type{};
template <typename T> struct MapType;
class LOT_EXPORT Surface { class LOT_EXPORT Surface {
public: public:
/** /**
@ -388,7 +394,7 @@ public:
template<Property prop, typename AnyValue> template<Property prop, typename AnyValue>
void setValue(const std::string &keypath, AnyValue value) void setValue(const std::string &keypath, AnyValue value)
{ {
setValue(std::integral_constant<ValueType, mapType(prop)>{}, prop, keypath, value); setValue(MapType<std::integral_constant<Property, prop>>{}, prop, keypath, value);
} }
/** /**
@ -399,34 +405,10 @@ public:
~Animation(); ~Animation();
private: private:
enum class ValueType {Color,Point,Size,Float}; void setValue(Color_Type, Property, const std::string &, Color);
static constexpr ValueType mapType(Property prop) { void setValue(Float_Type, Property, const std::string &, float);
switch (prop) { void setValue(Size_Type, Property, const std::string &, Size);
case Property::FillColor: void setValue(Point_Type, Property, const std::string &, Point);
case Property::StrokeColor:
return ValueType::Color;
case Property::FillOpacity:
case Property::StrokeOpacity:
case Property::StrokeWidth:
case Property::TrOpacity:
case Property::TrRotation:
return ValueType::Float;
case Property::TrAnchor:
case Property::TrPosition:
return ValueType::Point;
case Property::TrScale:
return ValueType::Size;
}
}
void setValue(std::integral_constant<ValueType, ValueType::Color>,
Property, const std::string &, Color);
void setValue(std::integral_constant<ValueType, ValueType::Float>,
Property, const std::string &, float);
void setValue(std::integral_constant<ValueType, ValueType::Size>,
Property, const std::string &, Size);
void setValue(std::integral_constant<ValueType, ValueType::Point>,
Property, const std::string &, Point);
/** /**
* @brief default constructor * @brief default constructor
* *
@ -437,6 +419,18 @@ private:
std::unique_ptr<AnimationImpl> d; std::unique_ptr<AnimationImpl> d;
}; };
//Map Property to Value type
template<> struct MapType<std::integral_constant<Property, Property::FillColor>>: Color_Type{};
template<> struct MapType<std::integral_constant<Property, Property::StrokeColor>>: Color_Type{};
template<> struct MapType<std::integral_constant<Property, Property::FillOpacity>>: Float_Type{};
template<> struct MapType<std::integral_constant<Property, Property::StrokeOpacity>>: Float_Type{};
template<> struct MapType<std::integral_constant<Property, Property::StrokeWidth>>: Float_Type{};
template<> struct MapType<std::integral_constant<Property, Property::TrRotation>>: Float_Type{};
template<> struct MapType<std::integral_constant<Property, Property::TrOpacity>>: Float_Type{};
template<> struct MapType<std::integral_constant<Property, Property::TrAnchor>>: Point_Type{};
template<> struct MapType<std::integral_constant<Property, Property::TrPosition>>: Point_Type{};
template<> struct MapType<std::integral_constant<Property, Property::TrScale>>: Size_Type{};
} // namespace lotplayer } // namespace lotplayer

View File

@ -314,28 +314,28 @@ const LayerInfoList& Animation::layers() const
return d->layerInfoList(); return d->layerInfoList();
} }
void Animation::setValue(std::integral_constant<ValueType, ValueType::Color>,Property prop, void Animation::setValue(Color_Type,Property prop,
const std::string &keypath, const std::string &keypath,
Color value) Color value)
{ {
d->setValue(keypath, LOTVariant(prop, value)); d->setValue(keypath, LOTVariant(prop, value));
} }
void Animation::setValue(std::integral_constant<ValueType, ValueType::Float>, Property prop, void Animation::setValue(Float_Type, Property prop,
const std::string &keypath, const std::string &keypath,
float value) float value)
{ {
d->setValue(keypath, LOTVariant(prop, value)); d->setValue(keypath, LOTVariant(prop, value));
} }
void Animation::setValue(std::integral_constant<ValueType, ValueType::Size>,Property prop, void Animation::setValue(Size_Type,Property prop,
const std::string &keypath, const std::string &keypath,
Size value) Size value)
{ {
d->setValue(keypath, LOTVariant(prop, value)); d->setValue(keypath, LOTVariant(prop, value));
} }
void Animation::setValue(std::integral_constant<ValueType, ValueType::Point>, Property prop, void Animation::setValue(Point_Type, Property prop,
const std::string &keypath, const std::string &keypath,
Point value) Point value)
{ {