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:
Samuel Susla
2020-03-03 04:14:04 -08:00
committed by Facebook Github Bot
parent d98a229202
commit b40f0562f5
16 changed files with 32 additions and 21 deletions
+1 -1
View File
@@ -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];
}
+10 -3
View File
@@ -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:
/*
@@ -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,
@@ -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.