Fabric: `pointScaleFactor` is now part of LayoutContext and LayoutMetrics

Summary:
@public
... and we initalize this in Surface.
We need this for requesting images with proper size/pixel-density, setup proper parameters for rasterizing CALayer's and rounding layout metric values.
Then we have to figure out how to wire this up with YGConfig.

Reviewed By: fkgozali

Differential Revision: D8475639

fbshipit-source-id: cec7af581b94efb4595dcf3f232252ce87a1fde3
This commit is contained in:
Valentin Shergin 2018-06-22 07:28:29 -07:00 committed by Facebook Github Bot
parent 62a458bcea
commit a3f9ff4f93
5 changed files with 13 additions and 1 deletions

View File

@ -17,6 +17,7 @@
#import <React/RCTSurfaceRegistry.h>
#import <React/RCTSurfaceView.h>
#import <React/RCTSurfaceView+Internal.h>
#import <React/RCTUtils.h>
#import <fabric/core/LayoutContext.h>
#import <fabric/core/LayoutConstraints.h>
@ -106,6 +107,7 @@ using namespace facebook::react;
surface:(RCTFabricSurface *)surface
{
LayoutContext layoutContext;
layoutContext.pointScaleFactor = RCTScreenScale();
LayoutConstraints layoutConstraints = {};
layoutConstraints.minimumSize = RCTSizeFromCGSize(minimumSize);
layoutConstraints.maximumSize = RCTSizeFromCGSize(maximumSize);
@ -120,6 +122,7 @@ using namespace facebook::react;
surface:(RCTFabricSurface *)surface
{
LayoutContext layoutContext;
layoutContext.pointScaleFactor = RCTScreenScale();
LayoutConstraints layoutConstraints = {};
layoutConstraints.minimumSize = RCTSizeFromCGSize(minimumSize);
layoutConstraints.maximumSize = RCTSizeFromCGSize(maximumSize);

View File

@ -59,7 +59,6 @@
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties
{
if (self = [super init]) {
_surfacePresenter = surfacePresenter;
_moduleName = moduleName;

View File

@ -21,6 +21,14 @@ struct LayoutContext {
* Compound absolute position of the node relative to the root node.
*/
Point absolutePosition {0, 0};
/*
* Reflects the scale factor needed to convert from the logical coordinate
* space into the device coordinate space of the physical screen.
* Some layout systems *might* use this to round layout metric values
* to `pixel value`.
*/
Float pointScaleFactor = {1.0};
};
} // namespace react

View File

@ -22,6 +22,7 @@ struct LayoutMetrics {
EdgeInsets borderWidth {0};
DisplayType displayType {DisplayType::Flex};
LayoutDirection layoutDirection {LayoutDirection::Undefined};
Float pointScaleFactor {1.0};
Rect getContentFrame() const {
return Rect {

View File

@ -126,6 +126,7 @@ void YogaLayoutableShadowNode::layoutChildren(LayoutContext layoutContext) {
auto nonConstYogaLayoutableChild = std::const_pointer_cast<YogaLayoutableShadowNode>(yogaLayoutableChild);
LayoutMetrics childLayoutMetrics = layoutMetricsFromYogaNode(nonConstYogaLayoutableChild->yogaNode_);
childLayoutMetrics.pointScaleFactor = layoutContext.pointScaleFactor;
nonConstYogaLayoutableChild->setLayoutMetrics(childLayoutMetrics);
}
}