[DEV] add multiple color format

This commit is contained in:
Edouard DUPIN 2018-08-16 23:18:42 +02:00
parent 1de2ed72bf
commit 4f308f38dd
5 changed files with 113 additions and 23 deletions

View File

@ -40,8 +40,11 @@ etk::Stream& fluorine::operator <<(etk::Stream& _os, const fluorine::Variant& _o
case fluorine::variantType::String: case fluorine::variantType::String:
_os << _obj.getString(); _os << _obj.getString();
break; break;
case fluorine::variantType::Color: case fluorine::variantType::ColorFloat:
_os << _obj.getColor(); _os << _obj.getColorFloat();
break;
case fluorine::variantType::ColorInt:
_os << _obj.getColorInt();
break; break;
case fluorine::variantType::Vec2: case fluorine::variantType::Vec2:
_os << _obj.getVec2(); _os << _obj.getVec2();
@ -114,8 +117,10 @@ fluorine::Variant fluorine::Variant::clone() const {
return fluorine::Variant{getRawPointer()}; return fluorine::Variant{getRawPointer()};
case fluorine::variantType::String: case fluorine::variantType::String:
return fluorine::Variant{getString()}; return fluorine::Variant{getString()};
case fluorine::variantType::Color: case fluorine::variantType::ColorFloat:
return fluorine::Variant{getColor()}; return fluorine::Variant{getColorFloat()};
case fluorine::variantType::ColorInt:
return fluorine::Variant{getColorInt()};
case fluorine::variantType::Vec2: case fluorine::variantType::Vec2:
return fluorine::Variant{getVec2()}; return fluorine::Variant{getVec2()};
case fluorine::variantType::IVec2: case fluorine::variantType::IVec2:
@ -141,8 +146,11 @@ void fluorine::Variant::clear() {
case fluorine::variantType::String: case fluorine::variantType::String:
ETK_DELETE(etk::String, m_dataUnion.m_string); ETK_DELETE(etk::String, m_dataUnion.m_string);
break; break;
case fluorine::variantType::Color: case fluorine::variantType::ColorFloat:
ETK_DELETE(etk::Color<>, m_dataUnion.m_color); ETK_DELETE(etk::Color<float>, m_dataUnion.m_colorFloat);
break;
case fluorine::variantType::ColorInt:
ETK_DELETE(etk::Color<>, m_dataUnion.m_colorInt);
break; break;
case fluorine::variantType::Vec2: case fluorine::variantType::Vec2:
ETK_DELETE(vec2, m_dataUnion.m_vec2); ETK_DELETE(vec2, m_dataUnion.m_vec2);
@ -250,9 +258,13 @@ fluorine::Variant::Variant(const ivec3& _value):
m_dataUnion.m_ivec3 = ETK_NEW(ivec3, _value); m_dataUnion.m_ivec3 = ETK_NEW(ivec3, _value);
} }
fluorine::Variant::Variant(const etk::Color<float>& _value):
m_dataType(fluorine::variantType::ColorFloat) {
m_dataUnion.m_colorFloat = ETK_NEW(etk::Color<float>, _value);
}
fluorine::Variant::Variant(const etk::Color<>& _value): fluorine::Variant::Variant(const etk::Color<>& _value):
m_dataType(fluorine::variantType::Color) { m_dataType(fluorine::variantType::ColorInt) {
m_dataUnion.m_color = ETK_NEW(etk::Color<>, _value); m_dataUnion.m_colorInt = ETK_NEW(etk::Color<>, _value);
} }
fluorine::Variant::~Variant() { fluorine::Variant::~Variant() {
@ -307,12 +319,28 @@ bool fluorine::Variant::isString() const {
return m_dataType == fluorine::variantType::String; return m_dataType == fluorine::variantType::String;
} }
etk::Color<> fluorine::Variant::getColor() const { etk::Color<float> fluorine::Variant::getColorFloat() const {
return *(m_dataUnion.m_color); if (m_dataType == fluorine::variantType::ColorFloat) {
return *(m_dataUnion.m_colorFloat);
}
return *(m_dataUnion.m_colorInt);
}
etk::Color<> fluorine::Variant::getColorInt() const {
if (m_dataType == fluorine::variantType::ColorFloat) {
return *(m_dataUnion.m_colorFloat);
}
return *(m_dataUnion.m_colorInt);
} }
bool fluorine::Variant::isColor() const { bool fluorine::Variant::isColor() const {
return m_dataType == fluorine::variantType::Color; return m_dataType == fluorine::variantType::ColorFloat
|| m_dataType == fluorine::variantType::ColorInt;
}
bool fluorine::Variant::isColorFloat() const {
return m_dataType == fluorine::variantType::ColorFloat;
}
bool fluorine::Variant::isColorInt() const {
return m_dataType == fluorine::variantType::ColorInt;
} }
vec2 fluorine::Variant::getVec2() const { vec2 fluorine::Variant::getVec2() const {

View File

@ -26,7 +26,8 @@ namespace fluorine {
vec2* m_vec2; vec2* m_vec2;
ivec3* m_ivec3; ivec3* m_ivec3;
vec3* m_vec3; vec3* m_vec3;
etk::Color<>* m_color; etk::Color<float>* m_colorFloat;
etk::Color<>* m_colorInt;
}; };
/** /**
* @brief Basic main object of all json elements. * @brief Basic main object of all json elements.
@ -120,6 +121,10 @@ namespace fluorine {
* @brief Constuctor that generate a ivec3 value * @brief Constuctor that generate a ivec3 value
*/ */
Variant(const ivec3& _value); Variant(const ivec3& _value);
/**
* @brief Constuctor that generate a etk::Color<float> value
*/
Variant(const etk::Color<float>& _value);
/** /**
* @brief Constuctor that generate a etk::Color<> value * @brief Constuctor that generate a etk::Color<> value
*/ */
@ -200,12 +205,34 @@ namespace fluorine {
* @brief Get the etk::Color Value. * @brief Get the etk::Color Value.
* @return requested value if compatible. * @return requested value if compatible.
*/ */
etk::Color<> getColor() const; etk::Color<float> getColorFloat() const;
/** /**
* @brief check if the node is a fluorine::Color * @brief Get the etk::Color Value.
* @return true if the node is a fluorine::Color * @return requested value if compatible.
*/
etk::Color<> getColorInt() const;
/**
* @brief Get the etk::Color Value (generic etk type).
* @return requested value if compatible.
*/
etk::Color<> getColor() const {
return getColorInt();
}
/**
* @brief check if the node is a fluorine::ColorFloat or fluorine::ColorInt
* @return true if the node is a fluorine::ColorFloat or fluorine::ColorInt
*/ */
bool isColor() const; bool isColor() const;
/**
* @brief check if the node is a fluorine::ColorFloat
* @return true if the node is a fluorine::ColorFloat
*/
bool isColorFloat() const;
/**
* @brief check if the node is a fluorine::ColorInt
* @return true if the node is a fluorine::ColorInt
*/
bool isColorInt() const;
public: public:
/** /**
* @brief Get the vec2 Value. * @brief Get the vec2 Value.

View File

@ -35,8 +35,11 @@ etk::Stream& fluorine::operator <<(etk::Stream& _os, enum fluorine::variantType
case fluorine::variantType::Boolean: case fluorine::variantType::Boolean:
_os << "fluorine::variantType::Boolean"; _os << "fluorine::variantType::Boolean";
break; break;
case fluorine::variantType::Color: case fluorine::variantType::ColorFloat:
_os << "fluorine::variantType::Color"; _os << "fluorine::variantType::ColorFloat";
break;
case fluorine::variantType::ColorInt:
_os << "fluorine::variantType::ColorInt";
break; break;
case fluorine::variantType::Vec2: case fluorine::variantType::Vec2:
_os << "fluorine::variantType::Vec2"; _os << "fluorine::variantType::Vec2";

View File

@ -20,7 +20,8 @@ namespace fluorine {
RawPointer, //!< Void * pointer RawPointer, //!< Void * pointer
String, //!< String element String, //!< String element
Boolean, //!< Boolean element Boolean, //!< Boolean element
Color, //!< Color RGBA float element ColorFloat, //!< Color RGBA float element
ColorInt, //!< Color RGBA int element
Vec2, //!< 2D vector Position (float) Vec2, //!< 2D vector Position (float)
IVec2, //!< 2D vector Position (integer) IVec2, //!< 2D vector Position (integer)
Vec3, //!< 3D vector Position (float) Vec3, //!< 3D vector Position (float)

View File

@ -146,7 +146,25 @@ TEST(constructor, testString_2) {
EXPECT_EQ(element.isNull(), false); EXPECT_EQ(element.isNull(), false);
} }
TEST(constructor, testColor) { TEST(constructor, testColorFloat) {
fluorine::Variant element(etk::Color<float>(1.0,0.5,0.7,0.6));
EXPECT_EQ(element.isUndefined(), false);
EXPECT_EQ(element.isBoolean(), false);
EXPECT_EQ(element.isInt(), false);
EXPECT_EQ(element.isUInt(), false);
EXPECT_EQ(element.isFloat(), false);
EXPECT_EQ(element.isRawPointer(), false);
EXPECT_EQ(element.isString(), false);
EXPECT_EQ(element.isColor(), true);
EXPECT_EQ(element.isVec2(), false);
EXPECT_EQ(element.isIVec2(), false);
EXPECT_EQ(element.isVec3(), false);
EXPECT_EQ(element.isIVec3(), false);
EXPECT_EQ(element.isNull(), false);
EXPECT_EQ(element.isColorFloat(), true);
EXPECT_EQ(element.isColorInt(), false);
}
TEST(constructor, testColorInt) {
fluorine::Variant element(etk::Color<>(55,55,55,65)); fluorine::Variant element(etk::Color<>(55,55,55,65));
EXPECT_EQ(element.isUndefined(), false); EXPECT_EQ(element.isUndefined(), false);
EXPECT_EQ(element.isBoolean(), false); EXPECT_EQ(element.isBoolean(), false);
@ -161,6 +179,8 @@ TEST(constructor, testColor) {
EXPECT_EQ(element.isVec3(), false); EXPECT_EQ(element.isVec3(), false);
EXPECT_EQ(element.isIVec3(), false); EXPECT_EQ(element.isIVec3(), false);
EXPECT_EQ(element.isNull(), false); EXPECT_EQ(element.isNull(), false);
EXPECT_EQ(element.isColorFloat(), false);
EXPECT_EQ(element.isColorInt(), true);
} }
TEST(constructor, testVec2) { TEST(constructor, testVec2) {
@ -294,9 +314,13 @@ TEST(constructor, testString_2Value) {
EXPECT_EQ(element.getString(), "HGFDSQ"); EXPECT_EQ(element.getString(), "HGFDSQ");
} }
TEST(constructor, testColorValue) { TEST(constructor, testColorValueFloat) {
fluorine::Variant element(etk::Color<float>(1.0,0.5,0.7,0.6));
EXPECT_EQ(element.getColorFloat(), etk::Color<float>(1.0,0.5,0.7,0.6));
}
TEST(constructor, testColorValueInt) {
fluorine::Variant element(etk::Color<>(55,55,55,65)); fluorine::Variant element(etk::Color<>(55,55,55,65));
EXPECT_EQ(element.getColor(), etk::Color<>(55,55,55,65)); EXPECT_EQ(element.getColorInt(), etk::Color<>(55,55,55,65));
} }
TEST(constructor, testVec2Value) { TEST(constructor, testVec2Value) {
@ -379,11 +403,18 @@ TEST(constructor, testString_2ValueOperator) {
EXPECT_EQ(element.getString(), "HGFDSQ"); EXPECT_EQ(element.getString(), "HGFDSQ");
} }
TEST(constructor, testColorValueOperator) { TEST(constructor, testColorValueOperatorFloat) {
fluorine::Variant element;
EXPECT_EQ(element.isUndefined(), true);
element = etk::Color<float>(1.0,0.5,0.7,0.6);
EXPECT_EQ(element.getColorFloat(), etk::Color<float>(1.0,0.5,0.7,0.6));
}
TEST(constructor, testColorValueOperatorInt) {
fluorine::Variant element; fluorine::Variant element;
EXPECT_EQ(element.isUndefined(), true); EXPECT_EQ(element.isUndefined(), true);
element = etk::Color<>(55,55,55,65); element = etk::Color<>(55,55,55,65);
EXPECT_EQ(element.getColor(), etk::Color<>(55,55,55,65)); EXPECT_EQ(element.getColorInt(), etk::Color<>(55,55,55,65));
} }
TEST(constructor, testVec2ValueOperator) { TEST(constructor, testVec2ValueOperator) {