diff --git a/ReactCommon/fabric/components/art/conversions.h b/ReactCommon/fabric/components/art/conversions.h new file mode 100644 index 00000000000..b462eeaa964 --- /dev/null +++ b/ReactCommon/fabric/components/art/conversions.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include +#include +#include +#include +#include +#include +#include + +namespace facebook { +namespace react { + +#ifdef ANDROID + +inline folly::dynamic toDynamic(Group const &group); +inline folly::dynamic toDynamic(Shape const &shape); +inline folly::dynamic toDynamic(Text const &text); +inline folly::dynamic toDynamic(Element const &element); + +inline folly::dynamic toDynamic(std::vector const &elements) { + folly::dynamic result = folly::dynamic::array(); + for (auto const &element : elements) { + result.push_back(element); + } + return result; +} +inline folly::dynamic toDynamic(Element::ListOfShared const &elements) { + folly::dynamic children = folly::dynamic::array(); + for (auto const &element : elements) { + children.push_back(element->getDynamic()); + } + return children; +} + +inline folly::dynamic toDynamic(Group const &group) { + folly::dynamic result = folly::dynamic::object(); + result["opacity"] = group.opacity; + result["type"] = 1; + if (group.elements.size() > 0) { + result["elements"] = toDynamic(group.elements); + } + result["transform"] = toDynamic(group.transform); + return result; +} + +inline folly::dynamic toDynamic(Shape const &shape) { + folly::dynamic result = folly::dynamic::object(); + result["type"] = 2; + result["opacity"] = shape.opacity; + result["transform"] = toDynamic(shape.transform); + result["d"] = toDynamic(shape.d); + result["stroke"] = toDynamic(shape.stroke); + result["strokeDash"] = toDynamic(shape.strokeDash); + result["fill"] = toDynamic(shape.fill); + result["strokeWidth"] = shape.strokeWidth; + result["strokeCap"] = shape.strokeCap; + result["strokeJoin"] = shape.strokeJoin; + return result; +} + +inline folly::dynamic toDynamic(Text const &text) { + folly::dynamic result = folly::dynamic::object(); + result["type"] = 3; + result["opacity"] = text.opacity; + result["transform"] = toDynamic(text.transform); + result["d"] = toDynamic(text.d); + result["stroke"] = toDynamic(text.stroke); + result["strokeDash"] = toDynamic(text.strokeDash); + result["fill"] = toDynamic(text.fill); + result["strokeWidth"] = text.strokeWidth; + result["strokeCap"] = text.strokeCap; + result["strokeJoin"] = text.strokeJoin; + result["aligment"] = text.aligment; + // TODO T64130144: add serialization of Frame + // result["aligment"] = toDynamic(text.frame); + return result; +} + +inline folly::dynamic toDynamic(ARTSurfaceViewState const &surfaceViewState) { + folly::dynamic result = folly::dynamic::object(); + result["elements"] = toDynamic(surfaceViewState.elements); + return result; +} +#endif + +} // namespace react +} // namespace facebook diff --git a/ReactCommon/fabric/components/art/state/Group.cpp b/ReactCommon/fabric/components/art/state/Group.cpp index f74e75c7524..428f41dfa12 100644 --- a/ReactCommon/fabric/components/art/state/Group.cpp +++ b/ReactCommon/fabric/components/art/state/Group.cpp @@ -7,13 +7,14 @@ #include #include +#include namespace facebook { namespace react { #ifdef ANDROID folly::dynamic Group::getDynamic() const { - return folly::dynamic::object(); + return toDynamic(*this); } #endif diff --git a/ReactCommon/fabric/components/art/state/Shape.cpp b/ReactCommon/fabric/components/art/state/Shape.cpp index f07c09e2593..7a1a17e69a3 100644 --- a/ReactCommon/fabric/components/art/state/Shape.cpp +++ b/ReactCommon/fabric/components/art/state/Shape.cpp @@ -7,13 +7,14 @@ #include #include +#include namespace facebook { namespace react { #ifdef ANDROID folly::dynamic Shape::getDynamic() const { - return folly::dynamic::object(); + return toDynamic(*this); } #endif diff --git a/ReactCommon/fabric/components/art/state/Text.cpp b/ReactCommon/fabric/components/art/state/Text.cpp index e7b183357b5..6a3f2627189 100644 --- a/ReactCommon/fabric/components/art/state/Text.cpp +++ b/ReactCommon/fabric/components/art/state/Text.cpp @@ -7,13 +7,14 @@ #include #include +#include namespace facebook { namespace react { #ifdef ANDROID folly::dynamic Shape::getDynamic() const { - return folly::dynamic::object(); + return toDynamic(*this); } #endif diff --git a/ReactCommon/fabric/components/art/surfaceview/ARTSurfaceViewState.cpp b/ReactCommon/fabric/components/art/surfaceview/ARTSurfaceViewState.cpp index 8e85c71af60..44e47d45c04 100644 --- a/ReactCommon/fabric/components/art/surfaceview/ARTSurfaceViewState.cpp +++ b/ReactCommon/fabric/components/art/surfaceview/ARTSurfaceViewState.cpp @@ -6,6 +6,7 @@ */ #include +#include #include namespace facebook { @@ -13,7 +14,7 @@ namespace react { #ifdef ANDROID folly::dynamic ARTSurfaceViewState::getDynamic() const { - return folly::dynamic::object(); + return toDynamic(*this); } #endif