Skip to content
Open
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 @@ -261,7 +261,14 @@ - (void)boundsDidChange:(CGRect)newBounds
}

if (_state != nullptr) {
auto newState = ModalHostViewState{RCTSizeFromCGSize(newBounds.size)};
CGPoint viewportOffset = CGPointZero;
UIView *modalView = _viewController.view;
if (modalView && modalView.window) {
CGRect frameInWindow = [modalView convertRect:modalView.bounds toView:nil];
viewportOffset = frameInWindow.origin;
}
auto newState = ModalHostViewState{
RCTSizeFromCGSize(newBounds.size), facebook::react::Point{(Float)viewportOffset.x, (Float)viewportOffset.y}};
_state->updateState(std::move(newState));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,9 @@ namespace facebook::react {

extern const char ModalHostViewComponentName[] = "ModalHostView";

Transform ModalHostViewShadowNode::getTransform() const {
auto viewportOffset = getStateData().viewportOffset;
return Transform::Translate(viewportOffset.x, viewportOffset.y, 0);
}

} // namespace facebook::react
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ class ModalHostViewShadowNode final : public ConcreteViewShadowNode<
traits.set(ShadowNodeTraits::Trait::Unstable_uncullableView);
return traits;
}

Transform getTransform() const override;
};

} // namespace facebook::react
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ ModalHostViewState::ModalHostViewState()
#ifdef RN_SERIALIZABLE_STATE
folly::dynamic ModalHostViewState::getDynamic() const {
return folly::dynamic::object("screenWidth", screenSize.width)(
"screenHeight", screenSize.height);
"screenHeight", screenSize.height)("viewportOffsetX", viewportOffset.x)(
"viewportOffsetY", viewportOffset.y);
}
#endif

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,21 @@ class ModalHostViewState final {

ModalHostViewState();
ModalHostViewState(Size screenSize_) : screenSize(screenSize_) {};
ModalHostViewState(Size screenSize_, Point viewportOffset_)
: screenSize(screenSize_), viewportOffset(viewportOffset_) {};

#ifdef RN_SERIALIZABLE_STATE
ModalHostViewState(const ModalHostViewState &previousState, folly::dynamic data)
: screenSize(
Size{.width = (Float)data["screenWidth"].getDouble(), .height = (Float)data["screenHeight"].getDouble()}) {
};
Size{.width = (Float)data["screenWidth"].getDouble(), .height = (Float)data["screenHeight"].getDouble()}),
viewportOffset(
Point{
.x = data.count("viewportOffsetX") ? (Float)data["viewportOffsetX"].getDouble() : 0.0f,
.y = data.count("viewportOffsetY") ? (Float)data["viewportOffsetY"].getDouble() : 0.0f}) {};
#endif

const Size screenSize{};
const Point viewportOffset{};

#ifdef RN_SERIALIZABLE_STATE
folly::dynamic getDynamic() const;
Expand Down
3 changes: 3 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -2758,12 +2758,15 @@ class facebook::react::ModalHostViewShadowNode : public facebook::react::Concret
public ModalHostViewShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
public ModalHostViewShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
public static facebook::react::ShadowNodeTraits BaseTraits();
public virtual facebook::react::Transform getTransform() const override;
}

class facebook::react::ModalHostViewState {
public ModalHostViewState();
public ModalHostViewState(const facebook::react::ModalHostViewState& previousState, folly::dynamic data);
public ModalHostViewState(facebook::react::Size screenSize_);
public ModalHostViewState(facebook::react::Size screenSize_, facebook::react::Point viewportOffset_);
public const facebook::react::Point viewportOffset;
public const facebook::react::Size screenSize;
public folly::dynamic getDynamic() const;
public using Shared = std::shared_ptr<const facebook::react::ModalHostViewState>;
Expand Down
3 changes: 3 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -4974,11 +4974,14 @@ class facebook::react::ModalHostViewShadowNode : public facebook::react::Concret
public ModalHostViewShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
public ModalHostViewShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
public static facebook::react::ShadowNodeTraits BaseTraits();
public virtual facebook::react::Transform getTransform() const override;
}

class facebook::react::ModalHostViewState {
public ModalHostViewState();
public ModalHostViewState(facebook::react::Size screenSize_);
public ModalHostViewState(facebook::react::Size screenSize_, facebook::react::Point viewportOffset_);
public const facebook::react::Point viewportOffset;
public const facebook::react::Size screenSize;
public using Shared = std::shared_ptr<const facebook::react::ModalHostViewState>;
}
Expand Down
3 changes: 3 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -1646,11 +1646,14 @@ class facebook::react::ModalHostViewShadowNode : public facebook::react::Concret
public ModalHostViewShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
public ModalHostViewShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
public static facebook::react::ShadowNodeTraits BaseTraits();
public virtual facebook::react::Transform getTransform() const override;
}

class facebook::react::ModalHostViewState {
public ModalHostViewState();
public ModalHostViewState(facebook::react::Size screenSize_);
public ModalHostViewState(facebook::react::Size screenSize_, facebook::react::Point viewportOffset_);
public const facebook::react::Point viewportOffset;
public const facebook::react::Size screenSize;
public using Shared = std::shared_ptr<const facebook::react::ModalHostViewState>;
}
Expand Down
Loading