mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
6aea6256a6
Summary: Until now, there were two measure functions that differ in only one parameter (rootTag). The rootTag is used to use the context associated to the tag as part of the calculation of layout, otherwise it just uses the ReactApplicationContext. This diff unifies both method into an unique method that changelog: [internal] Reviewed By: JoshuaGross Differential Revision: D20081281 fbshipit-source-id: b1f6a6cedbf78f36f36fd0f93407c23c6996d76b
87 lines
2.7 KiB
C++
87 lines
2.7 KiB
C++
/*
|
|
* 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 "TextLayoutManager.h"
|
|
|
|
#include <react/attributedstring/conversions.h>
|
|
#include <react/core/conversions.h>
|
|
#include <react/jni/ReadableNativeMap.h>
|
|
|
|
using namespace facebook::jni;
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
TextLayoutManager::~TextLayoutManager() {}
|
|
|
|
void *TextLayoutManager::getNativeTextLayoutManager() const {
|
|
return self_;
|
|
}
|
|
|
|
Size TextLayoutManager::measure(
|
|
AttributedStringBox attributedStringBox,
|
|
ParagraphAttributes paragraphAttributes,
|
|
LayoutConstraints layoutConstraints) const {
|
|
auto &attributedString = attributedStringBox.getValue();
|
|
|
|
return measureCache_.get(
|
|
{attributedString, paragraphAttributes, layoutConstraints},
|
|
[&](TextMeasureCacheKey const &key) {
|
|
return doMeasure(
|
|
attributedString, paragraphAttributes, layoutConstraints);
|
|
});
|
|
}
|
|
|
|
Size TextLayoutManager::doMeasure(
|
|
AttributedString attributedString,
|
|
ParagraphAttributes paragraphAttributes,
|
|
LayoutConstraints layoutConstraints) const {
|
|
const jni::global_ref<jobject> &fabricUIManager =
|
|
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
|
|
|
|
static auto measure =
|
|
jni::findClassStatic("com/facebook/react/fabric/FabricUIManager")
|
|
->getMethod<jlong(
|
|
jint,
|
|
jstring,
|
|
ReadableMap::javaobject,
|
|
ReadableMap::javaobject,
|
|
ReadableMap::javaobject,
|
|
jfloat,
|
|
jfloat,
|
|
jfloat,
|
|
jfloat)>("measure");
|
|
|
|
auto minimumSize = layoutConstraints.minimumSize;
|
|
auto maximumSize = layoutConstraints.maximumSize;
|
|
|
|
local_ref<JString> componentName = make_jstring("RCTText");
|
|
local_ref<ReadableNativeMap::javaobject> attributedStringRNM =
|
|
ReadableNativeMap::newObjectCxxArgs(toDynamic(attributedString));
|
|
local_ref<ReadableNativeMap::javaobject> paragraphAttributesRNM =
|
|
ReadableNativeMap::newObjectCxxArgs(toDynamic(paragraphAttributes));
|
|
|
|
local_ref<ReadableMap::javaobject> attributedStringRM = make_local(
|
|
reinterpret_cast<ReadableMap::javaobject>(attributedStringRNM.get()));
|
|
local_ref<ReadableMap::javaobject> paragraphAttributesRM = make_local(
|
|
reinterpret_cast<ReadableMap::javaobject>(paragraphAttributesRNM.get()));
|
|
return yogaMeassureToSize(measure(
|
|
fabricUIManager,
|
|
-1,
|
|
componentName.get(),
|
|
attributedStringRM.get(),
|
|
paragraphAttributesRM.get(),
|
|
nullptr,
|
|
minimumSize.width,
|
|
maximumSize.width,
|
|
minimumSize.height,
|
|
maximumSize.height));
|
|
}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|