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 @@ -117,6 +117,11 @@ 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 Expand Up @@ -170,7 +175,7 @@ class LayoutableShadowNode : public ShadowNode {
#pragma mark - DebugStringConvertible

#if RN_DEBUG_STRING_CONVERTIBLE
SharedDebugStringConvertibleList getDebugProps() const;
SharedDebugStringConvertibleList getDebugProps() const override;
#endif

LayoutMetrics layoutMetrics_;
Expand Down
10 changes: 10 additions & 0 deletions packages/react-native/ReactCommon/react/renderer/core/ShadowNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
namespace facebook::react {

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

Expand Down Expand Up @@ -122,6 +123,15 @@ 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 @@ -13,8 +13,7 @@
namespace facebook::react {

static LayoutMetrics layoutMetricsFromShadowNode(const ShadowNode& shadowNode) {
auto layoutableShadowNode =
dynamic_cast<const LayoutableShadowNode*>(&shadowNode);
auto layoutableShadowNode = shadowNode.asLayoutable();
return layoutableShadowNode != nullptr
? layoutableShadowNode->getLayoutMetrics()
: EmptyLayoutMetrics;
Expand Down
2 changes: 2 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -1718,6 +1718,7 @@ 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 @@ -2249,6 +2250,7 @@ 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
2 changes: 2 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -2588,6 +2588,7 @@ 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 @@ -3633,6 +3634,7 @@ 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
2 changes: 2 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -1717,6 +1717,7 @@ 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 @@ -2242,6 +2243,7 @@ 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
2 changes: 2 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -1717,6 +1717,7 @@ 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 @@ -2242,6 +2243,7 @@ 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
2 changes: 2 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -4002,6 +4002,7 @@ 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 @@ -4510,6 +4511,7 @@ 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
2 changes: 2 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -4807,6 +4807,7 @@ 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 @@ -5843,6 +5844,7 @@ 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
2 changes: 2 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -3993,6 +3993,7 @@ 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 @@ -4495,6 +4496,7 @@ 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
2 changes: 2 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -4001,6 +4001,7 @@ 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 @@ -4503,6 +4504,7 @@ 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
Loading
Loading