Fabric: Enabling view hierarchy flattening (for <View> component only for now)

Summary: This change implements `onLayoutOnly` for regular bare <View> component (*not* for its descendants!) After this view flattening is actually starting working for all platforms.

Reviewed By: mdvacca

Differential Revision: D9511001

fbshipit-source-id: 3562dd1b7570a064150f100cc2e1bc4220b81290
This commit is contained in:
Valentin Shergin
2018-09-30 22:01:51 -07:00
committed by Facebook Github Bot
parent d00bdb9bb8
commit c70abb393f
3 changed files with 40 additions and 4 deletions

View File

@@ -12,5 +12,32 @@ namespace react {
const char ViewComponentName[] = "View";
bool ViewShadowNode::isLayoutOnly() const {
#ifdef ANDROID
// This feature is not properly tested on Android yet.
return false;
#else
const auto &viewProps = *std::static_pointer_cast<const ViewProps>(props_);
return
// Event listeners
!viewProps.onLayout &&
// Generic Props
viewProps.nativeId.empty() &&
// Accessibility Props
!viewProps.accessible &&
// Style Props
viewProps.yogaStyle.overflow == YGOverflowVisible &&
viewProps.opacity == 1.0 &&
!viewProps.backgroundColor &&
!viewProps.foregroundColor &&
!viewProps.shadowColor &&
viewProps.transform == Transform {} &&
viewProps.zIndex == 0 &&
// Layout Metrics
getLayoutMetrics().borderWidth == EdgeInsets {};
#endif
}
} // namespace react
} // namespace facebook

View File

@@ -15,12 +15,21 @@ namespace react {
extern const char ViewComponentName[];
using ViewShadowNode =
ConcreteViewShadowNode<
/*
* `ShadowNode` for <View> component.
*/
class ViewShadowNode final:
public ConcreteViewShadowNode<
ViewComponentName,
ViewProps,
ViewEventEmitter
>;
> {
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;
bool isLayoutOnly() const;
};
} // namespace react
} // namespace facebook

View File

@@ -29,7 +29,7 @@ public:
#pragma mark - Props
const bool accessible {true};
const bool accessible {false};
const std::vector<std::string> accessibilityActions {};
const std::string accessibilityLabel {""};
const AccessibilityTraits accessibilityTraits {AccessibilityTraits::None};