Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,19 @@ LayoutableShadowNode::LayoutableShadowNode(
const ShadowNodeFragment& fragment,
const ShadowNodeFamily::Shared& family,
ShadowNodeTraits traits)
: ShadowNode(fragment, family, traits), layoutMetrics_({}) {}
: ShadowNode(fragment, family, traits), layoutMetrics_({}) {
traits_.set(ShadowNodeTraits::Trait::LayoutableKind);
}

LayoutableShadowNode::LayoutableShadowNode(
const ShadowNode& sourceShadowNode,
const ShadowNodeFragment& fragment)
: ShadowNode(sourceShadowNode, fragment),
layoutMetrics_(
static_cast<const LayoutableShadowNode&>(sourceShadowNode)
.layoutMetrics_) {}
.layoutMetrics_) {
traits_.set(ShadowNodeTraits::Trait::LayoutableKind);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should go in BaseTraits

}

LayoutMetrics LayoutableShadowNode::computeLayoutMetricsFromRoot(
const ShadowNodeFamily& descendantNodeFamily,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,6 @@ class LayoutableShadowNode : public ShadowNode {
*/
LayoutMetrics getLayoutMetrics() const;

const LayoutableShadowNode *asLayoutable() const override
{
return this;
}

/*
* Returns a transform object that represents transformations that will/should
* be applied on top of regular layout metrics by mounting layer.
Expand Down
10 changes: 0 additions & 10 deletions packages/react-native/ReactCommon/react/renderer/core/ShadowNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
namespace facebook::react {

class ComponentDescriptor;
class LayoutableShadowNode;
struct ShadowNodeFragment;
struct ShadowNodeWrapper;

Expand Down Expand Up @@ -123,15 +122,6 @@ class ShadowNode : public Sealable, public DebugStringConvertible, public jsi::N
*/
virtual void completeClone(const ShadowNode & /* sourceShadowNode */, const ShadowNodeFragment & /* fragment */) {}

/**
* Returns this node as a `LayoutableShadowNode`, or `nullptr` if it isn't
* one. Cheaper than a `dynamic_cast`.
*/
virtual const LayoutableShadowNode *asLayoutable() const
{
return nullptr;
}

#pragma mark - Getters

ComponentName getComponentName() const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ class ShadowNodeTraits {
// **Deprecated**: This trait is deprecated and will be removed in a future
// version of React Native.
DirtyYogaNode = 1 << 14,

// Inherits `LayoutableShadowNode`. Set by its constructors, so a node is a
// `LayoutableShadowNode` exactly when it has this trait.
LayoutableKind = 1 << 15,
};

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,15 @@
namespace facebook::react {

static LayoutMetrics layoutMetricsFromShadowNode(const ShadowNode& shadowNode) {
auto layoutableShadowNode = shadowNode.asLayoutable();
return layoutableShadowNode != nullptr
? layoutableShadowNode->getLayoutMetrics()
: EmptyLayoutMetrics;
// `LayoutableShadowNode`'s constructors set `LayoutableKind`, so the trait
// tells whether the node is one without a `dynamic_cast`. A trait rather
// than a virtual method keeps the `ShadowNode` vtable unchanged for native
// code built against other headers.
if (!shadowNode.getTraits().check(ShadowNodeTraits::Trait::LayoutableKind)) {
return EmptyLayoutMetrics;
}
return static_cast<const LayoutableShadowNode&>(shadowNode)
.getLayoutMetrics();
}

ShadowView::ShadowView(const ShadowNode& shadowNode)
Expand Down
3 changes: 1 addition & 2 deletions scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -1719,7 +1719,6 @@ class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode
public virtual bool canBeTouchTarget() const;
public virtual bool canChildrenBeTouchTarget() const;
public virtual bool getIsLayoutClean() const = 0;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const override;
public virtual facebook::react::Float baseline(const facebook::react::LayoutContext& layoutContext, facebook::react::Size size) const;
public virtual facebook::react::Point getContentOriginOffset(bool includeTransform) const;
public virtual facebook::react::Size measure(const facebook::react::LayoutContext& layoutContext, const facebook::react::LayoutConstraints& layoutConstraints) const;
Expand Down Expand Up @@ -2251,7 +2250,6 @@ class facebook::react::ShadowNode : public facebook::react::Sealable, public fac
public std::shared_ptr<facebook::react::ShadowNode> cloneMultiple(const std::unordered_set<std::shared_ptr<const facebook::react::ShadowNodeFamily>>& familiesToUpdate, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode, const facebook::react::ShadowNodeFragment& fragment)>& callback) const;
public std::shared_ptr<facebook::react::ShadowNode> cloneTree(const facebook::react::ShadowNodeFamily& shadowNodeFamily, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode)>& callback) const;
public using AncestorList = std::vector<std::pair<std::reference_wrapper<const facebook::react::ShadowNode>, int>>;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const;
public virtual void appendChild(const std::shared_ptr<const facebook::react::ShadowNode>& child);
public virtual void completeClone(const facebook::react::ShadowNode&, const facebook::react::ShadowNodeFragment&);
public virtual void replaceChild(const facebook::react::ShadowNode& oldChild, const std::shared_ptr<const facebook::react::ShadowNode>& newChild, size_t suggestedIndex = std::numeric_limits<size_t>::max());
Expand Down Expand Up @@ -2307,6 +2305,7 @@ enum facebook::react::ShadowNodeTraits::Trait : int32_t {
FormsView,
Hidden,
KeyboardFocusable,
LayoutableKind,
LeafYogaNode,
MeasurableYogaNode,
None,
Expand Down
3 changes: 1 addition & 2 deletions scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -2598,7 +2598,6 @@ class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode
public virtual bool canBeTouchTarget() const;
public virtual bool canChildrenBeTouchTarget() const;
public virtual bool getIsLayoutClean() const = 0;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const override;
public virtual facebook::react::Float baseline(const facebook::react::LayoutContext& layoutContext, facebook::react::Size size) const;
public virtual facebook::react::Point getContentOriginOffset(bool includeTransform) const;
public virtual facebook::react::Size measure(const facebook::react::LayoutContext& layoutContext, const facebook::react::LayoutConstraints& layoutConstraints) const;
Expand Down Expand Up @@ -3646,7 +3645,6 @@ class facebook::react::ShadowNode : public facebook::react::Sealable, public fac
public std::shared_ptr<facebook::react::ShadowNode> cloneMultiple(const std::unordered_set<std::shared_ptr<const facebook::react::ShadowNodeFamily>>& familiesToUpdate, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode, const facebook::react::ShadowNodeFragment& fragment)>& callback) const;
public std::shared_ptr<facebook::react::ShadowNode> cloneTree(const facebook::react::ShadowNodeFamily& shadowNodeFamily, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode)>& callback) const;
public using AncestorList = std::vector<std::pair<std::reference_wrapper<const facebook::react::ShadowNode>, int>>;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const;
public virtual void appendChild(const std::shared_ptr<const facebook::react::ShadowNode>& child);
public virtual void completeClone(const facebook::react::ShadowNode&, const facebook::react::ShadowNodeFragment&);
public virtual void replaceChild(const facebook::react::ShadowNode& oldChild, const std::shared_ptr<const facebook::react::ShadowNode>& newChild, size_t suggestedIndex = std::numeric_limits<size_t>::max());
Expand Down Expand Up @@ -3702,6 +3700,7 @@ enum facebook::react::ShadowNodeTraits::Trait : int32_t {
FormsView,
Hidden,
KeyboardFocusable,
LayoutableKind,
LeafYogaNode,
MeasurableYogaNode,
None,
Expand Down
3 changes: 1 addition & 2 deletions scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -1718,7 +1718,6 @@ class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode
public virtual bool canBeTouchTarget() const;
public virtual bool canChildrenBeTouchTarget() const;
public virtual bool getIsLayoutClean() const = 0;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const override;
public virtual facebook::react::Float baseline(const facebook::react::LayoutContext& layoutContext, facebook::react::Size size) const;
public virtual facebook::react::Point getContentOriginOffset(bool includeTransform) const;
public virtual facebook::react::Size measure(const facebook::react::LayoutContext& layoutContext, const facebook::react::LayoutConstraints& layoutConstraints) const;
Expand Down Expand Up @@ -2244,7 +2243,6 @@ class facebook::react::ShadowNode : public facebook::react::Sealable, public fac
public std::shared_ptr<facebook::react::ShadowNode> cloneMultiple(const std::unordered_set<std::shared_ptr<const facebook::react::ShadowNodeFamily>>& familiesToUpdate, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode, const facebook::react::ShadowNodeFragment& fragment)>& callback) const;
public std::shared_ptr<facebook::react::ShadowNode> cloneTree(const facebook::react::ShadowNodeFamily& shadowNodeFamily, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode)>& callback) const;
public using AncestorList = std::vector<std::pair<std::reference_wrapper<const facebook::react::ShadowNode>, int>>;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const;
public virtual void appendChild(const std::shared_ptr<const facebook::react::ShadowNode>& child);
public virtual void completeClone(const facebook::react::ShadowNode&, const facebook::react::ShadowNodeFragment&);
public virtual void replaceChild(const facebook::react::ShadowNode& oldChild, const std::shared_ptr<const facebook::react::ShadowNode>& newChild, size_t suggestedIndex = std::numeric_limits<size_t>::max());
Expand Down Expand Up @@ -2300,6 +2298,7 @@ enum facebook::react::ShadowNodeTraits::Trait : int32_t {
FormsView,
Hidden,
KeyboardFocusable,
LayoutableKind,
LeafYogaNode,
MeasurableYogaNode,
None,
Expand Down
3 changes: 1 addition & 2 deletions scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -1718,7 +1718,6 @@ class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode
public virtual bool canBeTouchTarget() const;
public virtual bool canChildrenBeTouchTarget() const;
public virtual bool getIsLayoutClean() const = 0;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const override;
public virtual facebook::react::Float baseline(const facebook::react::LayoutContext& layoutContext, facebook::react::Size size) const;
public virtual facebook::react::Point getContentOriginOffset(bool includeTransform) const;
public virtual facebook::react::Size measure(const facebook::react::LayoutContext& layoutContext, const facebook::react::LayoutConstraints& layoutConstraints) const;
Expand Down Expand Up @@ -2244,7 +2243,6 @@ class facebook::react::ShadowNode : public facebook::react::Sealable, public fac
public std::shared_ptr<facebook::react::ShadowNode> cloneMultiple(const std::unordered_set<std::shared_ptr<const facebook::react::ShadowNodeFamily>>& familiesToUpdate, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode, const facebook::react::ShadowNodeFragment& fragment)>& callback) const;
public std::shared_ptr<facebook::react::ShadowNode> cloneTree(const facebook::react::ShadowNodeFamily& shadowNodeFamily, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode)>& callback) const;
public using AncestorList = std::vector<std::pair<std::reference_wrapper<const facebook::react::ShadowNode>, int>>;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const;
public virtual void appendChild(const std::shared_ptr<const facebook::react::ShadowNode>& child);
public virtual void completeClone(const facebook::react::ShadowNode&, const facebook::react::ShadowNodeFragment&);
public virtual void replaceChild(const facebook::react::ShadowNode& oldChild, const std::shared_ptr<const facebook::react::ShadowNode>& newChild, size_t suggestedIndex = std::numeric_limits<size_t>::max());
Expand Down Expand Up @@ -2300,6 +2298,7 @@ enum facebook::react::ShadowNodeTraits::Trait : int32_t {
FormsView,
Hidden,
KeyboardFocusable,
LayoutableKind,
LeafYogaNode,
MeasurableYogaNode,
None,
Expand Down
3 changes: 1 addition & 2 deletions scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -3983,7 +3983,6 @@ class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode
public virtual bool canBeTouchTarget() const;
public virtual bool canChildrenBeTouchTarget() const;
public virtual bool getIsLayoutClean() const = 0;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const override;
public virtual facebook::react::Float baseline(const facebook::react::LayoutContext& layoutContext, facebook::react::Size size) const;
public virtual facebook::react::Point getContentOriginOffset(bool includeTransform) const;
public virtual facebook::react::Size measure(const facebook::react::LayoutContext& layoutContext, const facebook::react::LayoutConstraints& layoutConstraints) const;
Expand Down Expand Up @@ -4492,7 +4491,6 @@ class facebook::react::ShadowNode : public facebook::react::Sealable, public fac
public std::shared_ptr<facebook::react::ShadowNode> cloneMultiple(const std::unordered_set<std::shared_ptr<const facebook::react::ShadowNodeFamily>>& familiesToUpdate, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode, const facebook::react::ShadowNodeFragment& fragment)>& callback) const;
public std::shared_ptr<facebook::react::ShadowNode> cloneTree(const facebook::react::ShadowNodeFamily& shadowNodeFamily, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode)>& callback) const;
public using AncestorList = std::vector<std::pair<std::reference_wrapper<const facebook::react::ShadowNode>, int>>;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const;
public virtual void appendChild(const std::shared_ptr<const facebook::react::ShadowNode>& child);
public virtual void completeClone(const facebook::react::ShadowNode&, const facebook::react::ShadowNodeFragment&);
public virtual void replaceChild(const facebook::react::ShadowNode& oldChild, const std::shared_ptr<const facebook::react::ShadowNode>& newChild, size_t suggestedIndex = std::numeric_limits<size_t>::max());
Expand Down Expand Up @@ -4548,6 +4546,7 @@ enum facebook::react::ShadowNodeTraits::Trait : int32_t {
FormsView,
Hidden,
KeyboardFocusable,
LayoutableKind,
LeafYogaNode,
MeasurableYogaNode,
None,
Expand Down
3 changes: 1 addition & 2 deletions scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -4794,7 +4794,6 @@ class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode
public virtual bool canBeTouchTarget() const;
public virtual bool canChildrenBeTouchTarget() const;
public virtual bool getIsLayoutClean() const = 0;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const override;
public virtual facebook::react::Float baseline(const facebook::react::LayoutContext& layoutContext, facebook::react::Size size) const;
public virtual facebook::react::Point getContentOriginOffset(bool includeTransform) const;
public virtual facebook::react::Size measure(const facebook::react::LayoutContext& layoutContext, const facebook::react::LayoutConstraints& layoutConstraints) const;
Expand Down Expand Up @@ -5833,7 +5832,6 @@ class facebook::react::ShadowNode : public facebook::react::Sealable, public fac
public std::shared_ptr<facebook::react::ShadowNode> cloneMultiple(const std::unordered_set<std::shared_ptr<const facebook::react::ShadowNodeFamily>>& familiesToUpdate, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode, const facebook::react::ShadowNodeFragment& fragment)>& callback) const;
public std::shared_ptr<facebook::react::ShadowNode> cloneTree(const facebook::react::ShadowNodeFamily& shadowNodeFamily, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode)>& callback) const;
public using AncestorList = std::vector<std::pair<std::reference_wrapper<const facebook::react::ShadowNode>, int>>;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const;
public virtual void appendChild(const std::shared_ptr<const facebook::react::ShadowNode>& child);
public virtual void completeClone(const facebook::react::ShadowNode&, const facebook::react::ShadowNodeFragment&);
public virtual void replaceChild(const facebook::react::ShadowNode& oldChild, const std::shared_ptr<const facebook::react::ShadowNode>& newChild, size_t suggestedIndex = std::numeric_limits<size_t>::max());
Expand Down Expand Up @@ -5889,6 +5887,7 @@ enum facebook::react::ShadowNodeTraits::Trait : int32_t {
FormsView,
Hidden,
KeyboardFocusable,
LayoutableKind,
LeafYogaNode,
MeasurableYogaNode,
None,
Expand Down
3 changes: 1 addition & 2 deletions scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -3975,7 +3975,6 @@ class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode
public virtual bool canBeTouchTarget() const;
public virtual bool canChildrenBeTouchTarget() const;
public virtual bool getIsLayoutClean() const = 0;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const override;
public virtual facebook::react::Float baseline(const facebook::react::LayoutContext& layoutContext, facebook::react::Size size) const;
public virtual facebook::react::Point getContentOriginOffset(bool includeTransform) const;
public virtual facebook::react::Size measure(const facebook::react::LayoutContext& layoutContext, const facebook::react::LayoutConstraints& layoutConstraints) const;
Expand Down Expand Up @@ -4478,7 +4477,6 @@ class facebook::react::ShadowNode : public facebook::react::Sealable, public fac
public std::shared_ptr<facebook::react::ShadowNode> cloneMultiple(const std::unordered_set<std::shared_ptr<const facebook::react::ShadowNodeFamily>>& familiesToUpdate, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode, const facebook::react::ShadowNodeFragment& fragment)>& callback) const;
public std::shared_ptr<facebook::react::ShadowNode> cloneTree(const facebook::react::ShadowNodeFamily& shadowNodeFamily, const std::function<std::shared_ptr<facebook::react::ShadowNode>(const facebook::react::ShadowNode& oldShadowNode)>& callback) const;
public using AncestorList = std::vector<std::pair<std::reference_wrapper<const facebook::react::ShadowNode>, int>>;
public virtual const facebook::react::LayoutableShadowNode* asLayoutable() const;
public virtual void appendChild(const std::shared_ptr<const facebook::react::ShadowNode>& child);
public virtual void completeClone(const facebook::react::ShadowNode&, const facebook::react::ShadowNodeFragment&);
public virtual void replaceChild(const facebook::react::ShadowNode& oldChild, const std::shared_ptr<const facebook::react::ShadowNode>& newChild, size_t suggestedIndex = std::numeric_limits<size_t>::max());
Expand Down Expand Up @@ -4534,6 +4532,7 @@ enum facebook::react::ShadowNodeTraits::Trait : int32_t {
FormsView,
Hidden,
KeyboardFocusable,
LayoutableKind,
LeafYogaNode,
MeasurableYogaNode,
None,
Expand Down
Loading
Loading