From e028631513e535898834dc4e5e6d089bb37fda79 Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Tue, 8 May 2018 22:56:07 -0700 Subject: [PATCH] Fabric: Implementation of `yogaStyleValueFromFloat` Summary: Quite obvious. Reviewed By: mdvacca Differential Revision: D7857047 fbshipit-source-id: 876664b3ab5c19b7c66a38579664f18a38a1a371 --- ReactCommon/fabric/view/yoga/YogaStylableProps.h | 4 ++-- .../fabric/view/yoga/yogaValuesConversions.cpp | 13 ++++++++++--- .../fabric/view/yoga/yogaValuesConversions.h | 2 ++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/ReactCommon/fabric/view/yoga/YogaStylableProps.h b/ReactCommon/fabric/view/yoga/YogaStylableProps.h index 61d935a22..14f721c05 100644 --- a/ReactCommon/fabric/view/yoga/YogaStylableProps.h +++ b/ReactCommon/fabric/view/yoga/YogaStylableProps.h @@ -20,8 +20,8 @@ class YogaStylableProps; typedef std::shared_ptr SharedYogaStylableProps; class YogaStylableProps: - public virtual DebugStringConvertible -{ + public virtual DebugStringConvertible { + public: const YGStyle &getYogaStyle() const; diff --git a/ReactCommon/fabric/view/yoga/yogaValuesConversions.cpp b/ReactCommon/fabric/view/yoga/yogaValuesConversions.cpp index f13744de7..328ea9f18 100644 --- a/ReactCommon/fabric/view/yoga/yogaValuesConversions.cpp +++ b/ReactCommon/fabric/view/yoga/yogaValuesConversions.cpp @@ -46,6 +46,14 @@ YGFloatOptional yogaOptionalFloatFromFabricFloat(Float value) { return YGFloatOptional(yogaFloatFromFabricFloat(value)); } +YGValue yogaStyleValueFromFloat(const Float &value) { + if (isnan(value) || value == kFloatUndefined) { + return YGValueUndefined; + } + + return {(float)value, YGUnitPoint}; +} + LayoutMetrics layoutMetricsFromYogaNode(YGNode &yogaNode) { LayoutMetrics layoutMetrics; @@ -182,12 +190,11 @@ YGDisplay yogaStyleDisplayFromDynamic(const folly::dynamic &value) { YGValue yogaStyleValueFromDynamic(const folly::dynamic &value) { if (value.isNumber()) { - float x = value.asDouble(); - return { x, YGUnitPoint }; + return yogaStyleValueFromFloat(value.asDouble()); } else if (value.isString()) { const auto stringValue = value.asString(); if (stringValue == "auto") { - return { YGUndefined, YGUnitAuto }; + return YGValueUndefined; } else { if (stringValue.back() == '%') { return { folly::to(stringValue.substr(stringValue.length() - 1)), YGUnitPercent }; diff --git a/ReactCommon/fabric/view/yoga/yogaValuesConversions.h b/ReactCommon/fabric/view/yoga/yogaValuesConversions.h index 6c5156598..6837f9e10 100644 --- a/ReactCommon/fabric/view/yoga/yogaValuesConversions.h +++ b/ReactCommon/fabric/view/yoga/yogaValuesConversions.h @@ -24,6 +24,8 @@ float yogaFloatFromFabricFloat(Float value); Float fabricFloatFromYogaOptionalFloat(YGFloatOptional value); YGFloatOptional yogaOptionalFloatFromFabricFloat(Float value); +YGValue yogaStyleValueFromFloat(const Float &value); + LayoutMetrics layoutMetricsFromYogaNode(YGNode &yogaNode); YGDirection yogaStyleDirectionFromDynamic(const folly::dynamic &value);