mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Rename measure to measureContent and pass it LayoutContext
Summary: In order to build dynamic text sizing, `LayoutableShadowNode::measure` needs to accept `LayoutContext` Changelog: [Internal] Reviewed By: shergin Differential Revision: D20184598 fbshipit-source-id: 8928b59d51948caf3654f40049212a89a91dceb6
This commit is contained in:
committed by
Facebook Github Bot
parent
d98a229202
commit
b40f0562f5
@@ -76,7 +76,7 @@
|
||||
[super invalidateIntrinsicContentSize];
|
||||
|
||||
// Setting `intrinsicContentSize` dirties the Yoga node and
|
||||
// enforce Yoga to call `measure` function (backed to `measureBlock`).
|
||||
// enforce Yoga to call `measureContent` function (backed to `measureBlock`).
|
||||
[_bridge.uiManager setIntrinsicContentSize:self.intrinsicContentSize forView:self];
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,12 @@
|
||||
|
||||
using namespace facebook::react;
|
||||
|
||||
static LayoutContext RCTCurrentLayoutContext() {
|
||||
return {
|
||||
.pointScaleFactor = RCTScreenScale(),
|
||||
};
|
||||
}
|
||||
|
||||
@interface RCTSurfacePresenter () <RCTSchedulerDelegate, RCTMountingManagerDelegate>
|
||||
@end
|
||||
|
||||
@@ -68,6 +74,7 @@ using namespace facebook::react;
|
||||
_observers = [NSMutableArray array];
|
||||
|
||||
_scheduler = [self _createScheduler];
|
||||
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -135,7 +142,7 @@ using namespace facebook::react;
|
||||
surface:(RCTFabricSurface *)surface
|
||||
{
|
||||
std::shared_lock<better::shared_mutex> lock(_schedulerMutex);
|
||||
LayoutContext layoutContext = {.pointScaleFactor = RCTScreenScale()};
|
||||
LayoutContext layoutContext = RCTCurrentLayoutContext();
|
||||
LayoutConstraints layoutConstraints = {.minimumSize = RCTSizeFromCGSize(minimumSize),
|
||||
.maximumSize = RCTSizeFromCGSize(maximumSize)};
|
||||
return [_scheduler measureSurfaceWithLayoutConstraints:layoutConstraints
|
||||
@@ -146,7 +153,7 @@ using namespace facebook::react;
|
||||
- (void)setMinimumSize:(CGSize)minimumSize maximumSize:(CGSize)maximumSize surface:(RCTFabricSurface *)surface
|
||||
{
|
||||
std::shared_lock<better::shared_mutex> lock(_schedulerMutex);
|
||||
LayoutContext layoutContext = {.pointScaleFactor = RCTScreenScale()};
|
||||
LayoutContext layoutContext = RCTCurrentLayoutContext();
|
||||
LayoutConstraints layoutConstraints = {.minimumSize = RCTSizeFromCGSize(minimumSize),
|
||||
.maximumSize = RCTSizeFromCGSize(maximumSize)};
|
||||
[_scheduler constraintSurfaceLayoutWithLayoutConstraints:layoutConstraints
|
||||
@@ -255,7 +262,7 @@ using namespace facebook::react;
|
||||
tag:surface.rootTag];
|
||||
});
|
||||
|
||||
LayoutContext layoutContext = {.pointScaleFactor = RCTScreenScale()};
|
||||
LayoutContext layoutContext = RCTCurrentLayoutContext();
|
||||
|
||||
LayoutConstraints layoutConstraints = {.minimumSize = RCTSizeFromCGSize(surface.minimumSize),
|
||||
.maximumSize = RCTSizeFromCGSize(surface.maximumSize)};
|
||||
|
||||
@@ -83,7 +83,7 @@ ImageSource SliderShadowNode::getThumbImageSource() const {
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size SliderShadowNode::measure(LayoutConstraints layoutConstraints) const {
|
||||
Size SliderShadowNode::measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const {
|
||||
if (SliderMeasurementsManager::shouldMeasureSlider()) {
|
||||
return measurementsManager_->measure(getSurfaceId(), layoutConstraints);
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ class SliderShadowNode final : public ConcreteViewShadowNode<
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size measure(LayoutConstraints layoutConstraints) const override;
|
||||
Size measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const override;
|
||||
void layout(LayoutContext layoutContext) override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -21,8 +21,9 @@ void AndroidSwitchShadowNode::setAndroidSwitchMeasurementsManager(
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size AndroidSwitchShadowNode::measure(
|
||||
LayoutConstraints layoutConstraints) const {
|
||||
Size AndroidSwitchShadowNode::measureContent(
|
||||
LayoutConstraints layoutConstraints,
|
||||
LayoutContext layoutContext) const {
|
||||
return measurementsManager_->measure(getSurfaceId(), layoutConstraints);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <react/components/rncore/EventEmitters.h>
|
||||
#include <react/components/rncore/Props.h>
|
||||
#include <react/core/LayoutContext.h>
|
||||
#include <react/components/view/ConcreteViewShadowNode.h>
|
||||
|
||||
namespace facebook {
|
||||
@@ -35,7 +36,7 @@ class AndroidSwitchShadowNode final : public ConcreteViewShadowNode<
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size measure(LayoutConstraints layoutConstraints) const override;
|
||||
Size measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<AndroidSwitchMeasurementsManager> measurementsManager_;
|
||||
|
||||
@@ -56,9 +56,8 @@ void ParagraphShadowNode::updateStateIfNeeded() {
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size ParagraphShadowNode::measure(LayoutConstraints layoutConstraints) const {
|
||||
Size ParagraphShadowNode::measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const {
|
||||
AttributedString attributedString = getAttributedString();
|
||||
|
||||
if (attributedString.isEmpty()) {
|
||||
return layoutConstraints.clamp({0, 0});
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ class ParagraphShadowNode : public ConcreteViewShadowNode<
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
void layout(LayoutContext layoutContext) override;
|
||||
Size measure(LayoutConstraints layoutConstraints) const override;
|
||||
Size measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const override;
|
||||
|
||||
private:
|
||||
/*
|
||||
|
||||
+3
-2
@@ -153,8 +153,9 @@ void AndroidTextInputShadowNode::updateStateIfNeeded() {
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size AndroidTextInputShadowNode::measure(
|
||||
LayoutConstraints layoutConstraints) const {
|
||||
Size AndroidTextInputShadowNode::measureContent(
|
||||
LayoutConstraints layoutConstraints,
|
||||
LayoutContext layoutContext) const {
|
||||
// Layout is called right after measure.
|
||||
// Measure is marked as `const`, and `layout` is not; so State can be updated
|
||||
// during layout, but not during `measure`. If State is out-of-date in layout,
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@ class AndroidTextInputShadowNode : public ConcreteViewShadowNode<
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size measure(LayoutConstraints layoutConstraints) const override;
|
||||
Size measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const override;
|
||||
void layout(LayoutContext layoutContext) override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -55,6 +55,7 @@ AttributedString TextInputShadowNode::getAttributedString() const {
|
||||
|
||||
attributedString.appendAttributedString(
|
||||
BaseTextShadowNode::getAttributedString(textAttributes, *this));
|
||||
|
||||
return attributedString;
|
||||
}
|
||||
|
||||
@@ -78,7 +79,7 @@ void TextInputShadowNode::updateStateIfNeeded() {
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size TextInputShadowNode::measure(LayoutConstraints layoutConstraints) const {
|
||||
Size TextInputShadowNode::measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const {
|
||||
return textLayoutManager_->measure(
|
||||
attributedStringBoxToMeasure(),
|
||||
getConcreteProps().getEffectiveParagraphAttributes(),
|
||||
|
||||
@@ -47,7 +47,7 @@ class TextInputShadowNode : public ConcreteViewShadowNode<
|
||||
|
||||
#pragma mark - LayoutableShadowNode
|
||||
|
||||
Size measure(LayoutConstraints layoutConstraints) const override;
|
||||
Size measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const override;
|
||||
void layout(LayoutContext layoutContext) override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -359,7 +359,8 @@ YGSize YogaLayoutableShadowNode::yogaNodeMeasureCallbackConnector(
|
||||
break;
|
||||
}
|
||||
|
||||
auto size = shadowNodeRawPtr->measure({minimumSize, maximumSize});
|
||||
auto size = shadowNodeRawPtr->measureContent({minimumSize, maximumSize},
|
||||
*static_cast<LayoutContext *>(layoutContext));
|
||||
|
||||
return YGSize{yogaFloatFromFloat(size.width),
|
||||
yogaFloatFromFloat(size.height)};
|
||||
|
||||
@@ -156,7 +156,7 @@ LayoutableShadowNode::getLayoutableChildNodes() const {
|
||||
return layoutableChildren;
|
||||
}
|
||||
|
||||
Size LayoutableShadowNode::measure(LayoutConstraints layoutConstraints) const {
|
||||
Size LayoutableShadowNode::measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const {
|
||||
return Size();
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ class LayoutableShadowNode : public ShadowNode {
|
||||
* given constrains and relying on possible layout.
|
||||
* Default implementation returns zero size.
|
||||
*/
|
||||
virtual Size measure(LayoutConstraints layoutConstraints) const;
|
||||
virtual Size measureContent(LayoutConstraints layoutConstraints, LayoutContext layoutContext) const;
|
||||
|
||||
/*
|
||||
* Computes layout recursively.
|
||||
|
||||
@@ -54,7 +54,7 @@ class ShadowNodeTraits {
|
||||
// leaf.
|
||||
LeafYogaNode = 1 << 10,
|
||||
|
||||
// Inherits `LayoutableShadowNode` and calls `measure()`.
|
||||
// Inherits `LayoutableShadowNode` and calls `measureContent()`.
|
||||
HasMeasure = 1 << 11,
|
||||
|
||||
// Internal to `ShadowNode`; do not use it outside.
|
||||
|
||||
Reference in New Issue
Block a user