1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #import "RCTSurfaceRootShadowView.h"
- #import "RCTI18nUtil.h"
- #import "RCTShadowView+Layout.h"
- #import "RCTUIManagerUtils.h"
- @implementation RCTSurfaceRootShadowView {
- CGSize _intrinsicSize;
- BOOL _isRendered;
- BOOL _isLaidOut;
- }
- - (instancetype)init
- {
- if (self = [super init]) {
- self.viewName = @"RCTSurfaceRootView";
- _baseDirection = [[RCTI18nUtil sharedInstance] isRTL] ? YGDirectionRTL : YGDirectionLTR;
- _minimumSize = CGSizeZero;
- _maximumSize = CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX);
- self.alignSelf = YGAlignStretch;
- self.flex = 1;
- }
- return self;
- }
- - (void)insertReactSubview:(RCTShadowView *)subview atIndex:(NSInteger)atIndex
- {
- [super insertReactSubview:subview atIndex:atIndex];
- if (!_isRendered) {
- [_delegate rootShadowViewDidStartRendering:self];
- _isRendered = YES;
- }
- }
- - (void)layoutWithAffectedShadowViews:(NSHashTable<RCTShadowView *> *)affectedShadowViews
- {
- NSHashTable<NSString *> *other = [NSHashTable new];
- RCTLayoutContext layoutContext = {};
- layoutContext.absolutePosition = CGPointZero;
- layoutContext.affectedShadowViews = affectedShadowViews;
- layoutContext.other = other;
- [self layoutWithMinimumSize:_minimumSize
- maximumSize:_maximumSize
- layoutDirection:RCTUIKitLayoutDirectionFromYogaLayoutDirection(_baseDirection)
- layoutContext:layoutContext];
- self.intrinsicSize = self.layoutMetrics.frame.size;
- if (_isRendered && !_isLaidOut) {
- [_delegate rootShadowViewDidStartLayingOut:self];
- _isLaidOut = YES;
- }
- }
- - (void)setMinimumSize:(CGSize)minimumSize maximumSize:(CGSize)maximumSize
- {
- if (CGSizeEqualToSize(minimumSize, _minimumSize) && CGSizeEqualToSize(maximumSize, _maximumSize)) {
- return;
- }
- _maximumSize = maximumSize;
- _minimumSize = minimumSize;
- }
- - (void)setIntrinsicSize:(CGSize)intrinsicSize
- {
- if (CGSizeEqualToSize(_intrinsicSize, intrinsicSize)) {
- return;
- }
- _intrinsicSize = intrinsicSize;
- [_delegate rootShadowView:self didChangeIntrinsicSize:intrinsicSize];
- }
- - (CGSize)intrinsicSize
- {
- return _intrinsicSize;
- }
- @end
|