// // ASYogaUtilities.h // Texture // // Copyright (c) 2017-present, Pinterest, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // #import #if YOGA /* YOGA */ #import #import extern void ASDisplayNodePerformBlockOnEveryYogaChild(ASDisplayNode *node, void(^block)(ASDisplayNode *node)); ASDISPLAYNODE_EXTERN_C_BEGIN #pragma mark - Yoga Type Conversion Helpers YGAlign yogaAlignItems(ASStackLayoutAlignItems alignItems); YGJustify yogaJustifyContent(ASStackLayoutJustifyContent justifyContent); YGAlign yogaAlignSelf(ASStackLayoutAlignSelf alignSelf); YGFlexDirection yogaFlexDirection(ASStackLayoutDirection direction); float yogaFloatForCGFloat(CGFloat value); float yogaDimensionToPoints(ASDimension dimension); float yogaDimensionToPercent(ASDimension dimension); ASDimension dimensionForEdgeWithEdgeInsets(YGEdge edge, ASEdgeInsets insets); YGSize ASLayoutElementYogaMeasureFunc(YGNodeRef yogaNode, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode); #pragma mark - Yoga Style Setter Helpers #define YGNODE_STYLE_SET_DIMENSION(yogaNode, property, dimension) \ if (dimension.unit == ASDimensionUnitPoints) { \ YGNodeStyleSet##property(yogaNode, yogaDimensionToPoints(dimension)); \ } else if (dimension.unit == ASDimensionUnitFraction) { \ YGNodeStyleSet##property##Percent(yogaNode, yogaDimensionToPercent(dimension)); \ } else { \ YGNodeStyleSet##property(yogaNode, YGUndefined); \ }\ #define YGNODE_STYLE_SET_DIMENSION_WITH_EDGE(yogaNode, property, dimension, edge) \ if (dimension.unit == ASDimensionUnitPoints) { \ YGNodeStyleSet##property(yogaNode, edge, yogaDimensionToPoints(dimension)); \ } else if (dimension.unit == ASDimensionUnitFraction) { \ YGNodeStyleSet##property##Percent(yogaNode, edge, yogaDimensionToPercent(dimension)); \ } else { \ YGNodeStyleSet##property(yogaNode, edge, YGUndefined); \ } \ #define YGNODE_STYLE_SET_FLOAT_WITH_EDGE(yogaNode, property, dimension, edge) \ if (dimension.unit == ASDimensionUnitPoints) { \ YGNodeStyleSet##property(yogaNode, edge, yogaDimensionToPoints(dimension)); \ } else if (dimension.unit == ASDimensionUnitFraction) { \ ASDisplayNodeAssert(NO, @"Unexpected Fraction value in applying ##property## values to YGNode"); \ } else { \ YGNodeStyleSet##property(yogaNode, edge, YGUndefined); \ } \ ASDISPLAYNODE_EXTERN_C_END #endif /* YOGA */