ssap_app/node_modules/react-native-screens/ios/gamma/split-view/RNSSplitViewScreenShadowSta...

67 lines
2.0 KiB
Plaintext

#import "RNSSplitViewScreenShadowStateProxy.h"
#import "RNSSplitViewScreenComponentView.h"
#import <React/RCTAssert.h>
#import <React/RCTConversions.h>
#import <rnscreens/RNSSplitViewScreenShadowNode.h>
namespace react = facebook::react;
@implementation RNSSplitViewScreenShadowStateProxy {
react::RNSSplitViewScreenShadowNode::ConcreteState::Shared _state;
CGRect _lastScheduledFrame;
}
- (instancetype)init
{
if (self = [super init]) {
_lastScheduledFrame = CGRectNull;
}
return self;
}
- (void)updateShadowStateOfComponent:(RNSSplitViewScreenComponentView *)screenComponentView
{
[self updateShadowStateOfComponent:screenComponentView inContextOfAncestorView:nil];
}
- (void)updateShadowStateOfComponent:(RNSSplitViewScreenComponentView *)screenComponentView
inContextOfAncestorView:(UIView *_Nullable)ancestorView
{
CGRect frame = screenComponentView.frame;
if (ancestorView != nil) {
frame = [screenComponentView convertRect:frame toView:ancestorView];
}
[self updateShadowStateWithFrame:frame];
}
- (void)updateShadowStateWithFrame:(CGRect)frame
{
if (_state == nullptr) {
return;
}
if (!CGRectEqualToRect(frame, _lastScheduledFrame)) {
auto newState = react::RNSSplitViewScreenState{RCTSizeFromCGSize(frame.size), RCTPointFromCGPoint(frame.origin)};
_state->updateState(std::move(newState));
_lastScheduledFrame = frame;
}
}
- (void)updateShadowStateOfComponent:(RNSSplitViewScreenComponentView *)screenComponentView
withFrame:(CGRect)frame
inContextOfAncestorView:(nonnull UIView *)ancestorView
{
RCTAssert(ancestorView != nil, @"[RNScreens] ancestorView must not be nil");
CGRect convertedFrame = [screenComponentView convertRect:frame toView:ancestorView];
[self updateShadowStateWithFrame:convertedFrame];
}
- (void)updateState:(react::State::Shared const &)state oldState:(react::State::Shared const &)oldState
{
_state = std::static_pointer_cast<const react::RNSSplitViewScreenShadowNode::ConcreteState>(state);
}
@end