From dc0ebf7cb05dc808f12e160124b9c434dabb91bc Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Fri, 15 Jun 2018 11:25:34 -0700 Subject: [PATCH] Fabric: Implementation of property Summary: After moving all matrix math to C++, the actual client native code is quite trivial. Reviewed By: fkgozali Differential Revision: D8344059 fbshipit-source-id: 6910c6af5de64d5f901e82075d30edbde177af40 --- .../View/RCTViewComponentView.mm | 4 ++++ React/Fabric/RCTConversions.h | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 5fb8f11dfc..763f7a3d81 100644 --- a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -110,6 +110,10 @@ using namespace facebook::react; self.userInteractionEnabled = newViewProps.pointerEvents != PointerEventsMode::None; } + // `transform` + if (oldViewProps.transform != newViewProps.transform) { + self.layer.transform = RCTCATransform3DFromTransformMatrix(newViewProps.transform); + self.layer.allowsEdgeAntialiasing = newViewProps.transform != Transform::Identity(); } // TODO: Implement all sutable non-layout props. diff --git a/React/Fabric/RCTConversions.h b/React/Fabric/RCTConversions.h index 49ba410843..2fe12e1050 100644 --- a/React/Fabric/RCTConversions.h +++ b/React/Fabric/RCTConversions.h @@ -35,6 +35,28 @@ inline UIEdgeInsets RCTUIEdgeInsetsFromEdgeInsets(facebook::react::EdgeInsets ed return {edgeInsets.top, edgeInsets.left, edgeInsets.bottom, edgeInsets.right}; } + +inline CATransform3D RCTCATransform3DFromTransformMatrix(facebook::react::Transform transformMatrix) { + return { + (CGFloat)transformMatrix.matrix[0], + (CGFloat)transformMatrix.matrix[1], + (CGFloat)transformMatrix.matrix[2], + (CGFloat)transformMatrix.matrix[3], + (CGFloat)transformMatrix.matrix[4], + (CGFloat)transformMatrix.matrix[5], + (CGFloat)transformMatrix.matrix[6], + (CGFloat)transformMatrix.matrix[7], + (CGFloat)transformMatrix.matrix[8], + (CGFloat)transformMatrix.matrix[9], + (CGFloat)transformMatrix.matrix[10], + (CGFloat)transformMatrix.matrix[11], + (CGFloat)transformMatrix.matrix[12], + (CGFloat)transformMatrix.matrix[13], + (CGFloat)transformMatrix.matrix[14], + (CGFloat)transformMatrix.matrix[15] + }; +} + inline facebook::react::Point RCTPointFromCGPoint(CGPoint point) { return {point.x, point.y}; }