/** * 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. */ #pragma once #include #include #include #include #include #include #include #include namespace facebook { namespace react { extern const char ParagraphComponentName[]; using ParagraphEventEmitter = ViewEventEmitter; /* * `ShadowNode` for component, represents -like component * containing and displaying text. Text content is represented as nested * and components. */ class ParagraphShadowNode : public ConcreteViewShadowNode< ParagraphComponentName, ParagraphProps, ParagraphEventEmitter>, public BaseTextShadowNode { public: using ConcreteViewShadowNode::ConcreteViewShadowNode; /* * Returns a `AttributedString` which represents text content of the node. */ AttributedString getAttributedString() const; /* * Associates a shared TextLayoutManager with the node. * `ParagraphShadowNode` uses the manager to measure text content * and construct `ParagraphLocalData` objects. */ void setTextLayoutManager(SharedTextLayoutManager textLayoutManager); #pragma mark - LayoutableShadowNode void layout(LayoutContext layoutContext) override; Size measure(LayoutConstraints layoutConstraints) const override; private: /* * Creates a `LocalData` object (with `AttributedText` and * `TextLayoutManager`) if needed. */ void updateLocalData(); SharedTextLayoutManager textLayoutManager_; /* * Cached attributed string that represents the content of the subtree started * from the node. */ mutable folly::Optional cachedAttributedString_{}; }; } // namespace react } // namespace facebook