+/**
+ * @brief Check whether this visual type can use corner radius feature or not.
+ * @param type VisualType that want to checkup
+ * @return true if type can use corner radius feature.
+ */
+static bool IsTypeAvailableForCornerRadius(Toolkit::Visual::Type type)
+{
+ switch(static_cast<Toolkit::DevelVisual::Type>(type))
+ {
+ case Toolkit::Visual::Type::COLOR:
+ case Toolkit::Visual::Type::GRADIENT:
+ case Toolkit::Visual::Type::IMAGE:
+ case Toolkit::Visual::Type::SVG:
+ case Toolkit::Visual::Type::ANIMATED_IMAGE:
+ case Toolkit::DevelVisual::Type::ANIMATED_VECTOR_IMAGE:
+ {
+ return true;
+ }
+ default:
+ {
+ return false;
+ }
+ }
+}
+
+/**
+ * @brief Check whether this visual type can use borderline feature or not.
+ * @param type VisualType that want to checkup
+ * @return true if type can use borderline feature.
+ */
+static bool IsTypeAvailableForBorderline(Toolkit::Visual::Type type)
+{
+ switch(static_cast<Toolkit::DevelVisual::Type>(type))
+ {
+ case Toolkit::Visual::Type::COLOR:
+ case Toolkit::Visual::Type::GRADIENT:
+ case Toolkit::Visual::Type::IMAGE:
+ case Toolkit::Visual::Type::SVG:
+ case Toolkit::Visual::Type::ANIMATED_IMAGE:
+ case Toolkit::DevelVisual::Type::ANIMATED_VECTOR_IMAGE:
+ {
+ return true;
+ }
+ default:
+ {
+ return false;
+ }
+ }
+}
+
+struct StringProperty
+{
+ const char* const name;
+ Property::Index index;
+};
+StringProperty PROPERTY_NAME_INDEX_TABLE[] =
+ {
+ {CUSTOM_SHADER, Toolkit::Visual::Property::SHADER},
+ {TRANSFORM, Toolkit::Visual::Property::TRANSFORM},
+ {PREMULTIPLIED_ALPHA, Toolkit::Visual::Property::PREMULTIPLIED_ALPHA},
+ {MIX_COLOR, Toolkit::Visual::Property::MIX_COLOR},
+ {OPACITY, Toolkit::Visual::Property::OPACITY},
+ {VISUAL_FITTING_MODE, Toolkit::DevelVisual::Property::VISUAL_FITTING_MODE},
+ {BORDERLINE_WIDTH, Toolkit::DevelVisual::Property::BORDERLINE_WIDTH},
+ {BORDERLINE_COLOR, Toolkit::DevelVisual::Property::BORDERLINE_COLOR},
+ {BORDERLINE_OFFSET, Toolkit::DevelVisual::Property::BORDERLINE_OFFSET},
+ {CORNER_RADIUS, Toolkit::DevelVisual::Property::CORNER_RADIUS},
+ {CORNER_RADIUS_POLICY, Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY},
+};
+const uint16_t PROPERTY_NAME_INDEX_TABLE_COUNT = sizeof(PROPERTY_NAME_INDEX_TABLE) / sizeof(PROPERTY_NAME_INDEX_TABLE[0]);
+
+Property::Index GetVisualPropertyIndex(Property::Key key)
+{
+ if(key.type == Property::Key::STRING)
+ {
+ for(auto tableId = 0u; tableId < PROPERTY_NAME_INDEX_TABLE_COUNT; ++tableId)
+ {
+ if(key == PROPERTY_NAME_INDEX_TABLE[tableId].name)
+ {
+ return PROPERTY_NAME_INDEX_TABLE[tableId].index;
+ break;
+ }
+ }
+ }
+ return key.indexKey;
+}
+