From 07d8b06d4162fa736247a3c150c00c2146372cab Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Mon, 15 Oct 2018 23:23:34 -0700 Subject: [PATCH] Fabric: TextAttributes::defaultTextAttributes() Summary: An `AttributedString` object generated by a cross-platform layer of React Native must have already resolved text styles to make the actual resulting text identical across platforms. To do so we have to have a unified default. Reviewed By: sahrens Differential Revision: D10287725 fbshipit-source-id: e8c62b33496be34146182baccd0009d3624a7fe5 --- .../fabric/attributedstring/TextAttributes.cpp | 12 ++++++++++++ ReactCommon/fabric/attributedstring/TextAttributes.h | 7 +++++++ .../text/paragraph/ParagraphShadowNode.cpp | 5 ++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/ReactCommon/fabric/attributedstring/TextAttributes.cpp b/ReactCommon/fabric/attributedstring/TextAttributes.cpp index ee31969dd14..43f87235a09 100644 --- a/ReactCommon/fabric/attributedstring/TextAttributes.cpp +++ b/ReactCommon/fabric/attributedstring/TextAttributes.cpp @@ -149,6 +149,18 @@ bool TextAttributes::operator!=(const TextAttributes &rhs) const { return !(*this == rhs); } +TextAttributes TextAttributes::defaultTextAttributes() { + static auto textAttributes = [] { + auto textAttributes = TextAttributes{}; + // Non-obvious (can be different among platforms) default text attributes. + textAttributes.foregroundColor = blackColor(); + textAttributes.backgroundColor = clearColor(); + textAttributes.fontSize = 12.0; + return textAttributes; + }(); + return textAttributes; +} + #pragma mark - DebugStringConvertible #if RN_DEBUG_STRING_CONVERTIBLE diff --git a/ReactCommon/fabric/attributedstring/TextAttributes.h b/ReactCommon/fabric/attributedstring/TextAttributes.h index cfd103a7893..e0acba57681 100644 --- a/ReactCommon/fabric/attributedstring/TextAttributes.h +++ b/ReactCommon/fabric/attributedstring/TextAttributes.h @@ -27,6 +27,13 @@ using SharedTextAttributes = std::shared_ptr; class TextAttributes : public DebugStringConvertible { public: + /* + * Returns TextAttribute object which has actual default attribute values + * (e.g. `foregroundColor = black`), in oppose to TextAttribute's default + * constructor which creates an object with nulled attributes. + */ + static TextAttributes defaultTextAttributes(); + #pragma mark - Fields // Color diff --git a/ReactCommon/fabric/components/text/paragraph/ParagraphShadowNode.cpp b/ReactCommon/fabric/components/text/paragraph/ParagraphShadowNode.cpp index 640a8cad40f..245dcee932f 100644 --- a/ReactCommon/fabric/components/text/paragraph/ParagraphShadowNode.cpp +++ b/ReactCommon/fabric/components/text/paragraph/ParagraphShadowNode.cpp @@ -16,8 +16,11 @@ const char ParagraphComponentName[] = "Paragraph"; AttributedString ParagraphShadowNode::getAttributedString() const { if (!cachedAttributedString_.has_value()) { + auto textAttributes = TextAttributes::defaultTextAttributes(); + textAttributes.apply(getProps()->textAttributes); + cachedAttributedString_ = BaseTextShadowNode::getAttributedString( - getProps()->textAttributes, shared_from_this()); + textAttributes, shared_from_this()); } return cachedAttributedString_.value();