mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-09 15:51:05 +00:00
[ASDimension] Simplify header file to focus on the most essential types for app developers. (#2794)
* First round of cleanups for ASDimension.mm/h * Add ASDimensionDeprecated and ASDimensionInternal to Copy Files build phase
This commit is contained in:
parent
c85aa11dbb
commit
cdf7f70747
@ -203,8 +203,16 @@
|
||||
6907C2581DC4ECFE00374C66 /* ASObjectDescriptionHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 6907C2561DC4ECFE00374C66 /* ASObjectDescriptionHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
6907C2591DC4ECFE00374C66 /* ASObjectDescriptionHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 6907C2571DC4ECFE00374C66 /* ASObjectDescriptionHelpers.m */; };
|
||||
6907C25A1DC4ECFE00374C66 /* ASObjectDescriptionHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 6907C2571DC4ECFE00374C66 /* ASObjectDescriptionHelpers.m */; };
|
||||
690C35611E055C5D00069B91 /* ASDimensionInternal.mm in Sources */ = {isa = PBXBuildFile; fileRef = 690C35601E055C5D00069B91 /* ASDimensionInternal.mm */; };
|
||||
690C35621E055C5D00069B91 /* ASDimensionInternal.mm in Sources */ = {isa = PBXBuildFile; fileRef = 690C35601E055C5D00069B91 /* ASDimensionInternal.mm */; };
|
||||
690C35641E055C7B00069B91 /* ASDimensionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 690C35631E055C7B00069B91 /* ASDimensionInternal.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
690C35661E0567C600069B91 /* ASDimensionDeprecated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 690C35651E0567C600069B91 /* ASDimensionDeprecated.mm */; };
|
||||
690C35671E0567C600069B91 /* ASDimensionDeprecated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 690C35651E0567C600069B91 /* ASDimensionDeprecated.mm */; };
|
||||
690C356B1E05680300069B91 /* ASDimensionDeprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = 690C356A1E05680300069B91 /* ASDimensionDeprecated.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
69127CFE1DD2B387004BF6E2 /* ASEventLog.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 696F01EA1DD2AF450049FBD5 /* ASEventLog.h */; };
|
||||
693117CE1DC7C72700DE4784 /* ASDisplayNode+Deprecated.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 683489271D70DE3400327501 /* ASDisplayNode+Deprecated.h */; };
|
||||
693DA50F1E2536A600F66DF4 /* ASDimensionInternal.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 690C35631E055C7B00069B91 /* ASDimensionInternal.h */; };
|
||||
693DA5141E25373100F66DF4 /* ASDimensionDeprecated.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 690C356A1E05680300069B91 /* ASDimensionDeprecated.h */; };
|
||||
69527B121DC84292004785FB /* ASLayoutElementStylePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 69527B111DC84292004785FB /* ASLayoutElementStylePrivate.h */; };
|
||||
6959433E1D70815300B0EE1F /* ASDisplayNodeLayout.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6959433C1D70815300B0EE1F /* ASDisplayNodeLayout.mm */; };
|
||||
6959433F1D70815300B0EE1F /* ASDisplayNodeLayout.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6959433C1D70815300B0EE1F /* ASDisplayNodeLayout.mm */; };
|
||||
@ -673,6 +681,8 @@
|
||||
dstPath = "include/$(PRODUCT_NAME)";
|
||||
dstSubfolderSpec = 16;
|
||||
files = (
|
||||
693DA5141E25373100F66DF4 /* ASDimensionDeprecated.h in CopyFiles */,
|
||||
693DA50F1E2536A600F66DF4 /* ASDimensionInternal.h in CopyFiles */,
|
||||
68C2155C1DE11AA80019C4BC /* ASObjectDescriptionHelpers.h in CopyFiles */,
|
||||
68C2155B1DE11A790019C4BC /* ASCollectionViewLayoutInspector.h in CopyFiles */,
|
||||
DEB8ED7E1DD007F400DBDE55 /* ASLayoutElementInspectorNode.h in CopyFiles */,
|
||||
@ -1003,6 +1013,10 @@
|
||||
68FC85E81CE29C7D00EDD713 /* ASVisibilityProtocols.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASVisibilityProtocols.m; sourceTree = "<group>"; };
|
||||
6907C2561DC4ECFE00374C66 /* ASObjectDescriptionHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASObjectDescriptionHelpers.h; sourceTree = "<group>"; };
|
||||
6907C2571DC4ECFE00374C66 /* ASObjectDescriptionHelpers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASObjectDescriptionHelpers.m; sourceTree = "<group>"; };
|
||||
690C35601E055C5D00069B91 /* ASDimensionInternal.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ASDimensionInternal.mm; path = AsyncDisplayKit/Layout/ASDimensionInternal.mm; sourceTree = "<group>"; };
|
||||
690C35631E055C7B00069B91 /* ASDimensionInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASDimensionInternal.h; path = AsyncDisplayKit/Layout/ASDimensionInternal.h; sourceTree = "<group>"; };
|
||||
690C35651E0567C600069B91 /* ASDimensionDeprecated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ASDimensionDeprecated.mm; path = AsyncDisplayKit/Layout/ASDimensionDeprecated.mm; sourceTree = "<group>"; };
|
||||
690C356A1E05680300069B91 /* ASDimensionDeprecated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASDimensionDeprecated.h; path = AsyncDisplayKit/Layout/ASDimensionDeprecated.h; sourceTree = "<group>"; };
|
||||
69527B111DC84292004785FB /* ASLayoutElementStylePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASLayoutElementStylePrivate.h; path = AsyncDisplayKit/Layout/ASLayoutElementStylePrivate.h; sourceTree = SOURCE_ROOT; };
|
||||
6959433C1D70815300B0EE1F /* ASDisplayNodeLayout.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASDisplayNodeLayout.mm; sourceTree = "<group>"; };
|
||||
6959433D1D70815300B0EE1F /* ASDisplayNodeLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASDisplayNodeLayout.h; sourceTree = "<group>"; };
|
||||
@ -1731,6 +1745,10 @@
|
||||
ACF6ED041B17843500DA7C62 /* ASCenterLayoutSpec.mm */,
|
||||
ACF6ED071B17843500DA7C62 /* ASDimension.h */,
|
||||
ACF6ED081B17843500DA7C62 /* ASDimension.mm */,
|
||||
690C356A1E05680300069B91 /* ASDimensionDeprecated.h */,
|
||||
690C35651E0567C600069B91 /* ASDimensionDeprecated.mm */,
|
||||
690C35631E055C7B00069B91 /* ASDimensionInternal.h */,
|
||||
690C35601E055C5D00069B91 /* ASDimensionInternal.mm */,
|
||||
ACF6ED091B17843500DA7C62 /* ASInsetLayoutSpec.h */,
|
||||
ACF6ED0A1B17843500DA7C62 /* ASInsetLayoutSpec.mm */,
|
||||
ACF6ED0B1B17843500DA7C62 /* ASLayout.h */,
|
||||
@ -1808,6 +1826,8 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
696F01EC1DD2AF450049FBD5 /* ASEventLog.h in Headers */,
|
||||
690C35641E055C7B00069B91 /* ASDimensionInternal.h in Headers */,
|
||||
690C356B1E05680300069B91 /* ASDimensionDeprecated.h in Headers */,
|
||||
683489281D70DE3400327501 /* ASDisplayNode+Deprecated.h in Headers */,
|
||||
6907C2581DC4ECFE00374C66 /* ASObjectDescriptionHelpers.h in Headers */,
|
||||
69E0E8A71D356C9400627613 /* ASEqualityHelpers.h in Headers */,
|
||||
@ -2192,6 +2212,7 @@
|
||||
8B0768B41CE752EC002E1453 /* ASDefaultPlaybackButton.m in Sources */,
|
||||
E55D86321CA8A14000A0C26F /* ASLayoutElement.mm in Sources */,
|
||||
68FC85E41CE29B7E00EDD713 /* ASTabBarController.m in Sources */,
|
||||
690C35661E0567C600069B91 /* ASDimensionDeprecated.mm in Sources */,
|
||||
058D0A23195D050800B7D73C /* _ASAsyncTransactionContainer.m in Sources */,
|
||||
058D0A24195D050800B7D73C /* _ASAsyncTransactionGroup.m in Sources */,
|
||||
68355B3A1CB57A5A001D4E68 /* ASPINRemoteImageDownloader.m in Sources */,
|
||||
@ -2296,6 +2317,7 @@
|
||||
92074A691CC8BADA00918F75 /* ASControlNode+tvOS.m in Sources */,
|
||||
ACF6ED321B17843500DA7C62 /* ASAbsoluteLayoutSpec.mm in Sources */,
|
||||
AC026B6B1BD57D6F00BBC17E /* ASChangeSetDataController.mm in Sources */,
|
||||
690C35611E055C5D00069B91 /* ASDimensionInternal.mm in Sources */,
|
||||
68355B311CB5799E001D4E68 /* ASImageNode+AnimatedImage.mm in Sources */,
|
||||
68C215591DE10D330019C4BC /* ASCollectionViewLayoutInspector.m in Sources */,
|
||||
9CFFC6C01CCAC73C006A6476 /* ASViewController.mm in Sources */,
|
||||
@ -2383,6 +2405,7 @@
|
||||
9C70F2091CDABA36007D6C76 /* ASViewController.mm in Sources */,
|
||||
8BBBAB8D1CEBAF1E00107FC6 /* ASDefaultPlaybackButton.m in Sources */,
|
||||
B30BF6541C59D889004FCD53 /* ASLayoutManager.m in Sources */,
|
||||
690C35671E0567C600069B91 /* ASDimensionDeprecated.mm in Sources */,
|
||||
92DD2FE71BF4D0850074C9DD /* ASMapNode.mm in Sources */,
|
||||
636EA1A51C7FF4EF00EE152F /* ASDefaultPlayButton.m in Sources */,
|
||||
9B92C8861BC2EB7600EE46B2 /* ASCollectionViewFlowLayoutInspector.m in Sources */,
|
||||
@ -2487,6 +2510,7 @@
|
||||
AC026B6C1BD57D6F00BBC17E /* ASChangeSetDataController.mm in Sources */,
|
||||
34EFC7741B701D0A00AD841F /* ASAbsoluteLayoutSpec.mm in Sources */,
|
||||
92074A6A1CC8BADA00918F75 /* ASControlNode+tvOS.m in Sources */,
|
||||
690C35621E055C5D00069B91 /* ASDimensionInternal.mm in Sources */,
|
||||
68C2155A1DE10D330019C4BC /* ASCollectionViewLayoutInspector.m in Sources */,
|
||||
DB78412E1C6BCE1600A9E2B4 /* _ASTransitionContext.m in Sources */,
|
||||
B350620B1B010EFD0018CF92 /* ASTableView.mm in Sources */,
|
||||
|
||||
@ -48,6 +48,8 @@
|
||||
|
||||
#import <AsyncDisplayKit/ASLayout.h>
|
||||
#import <AsyncDisplayKit/ASDimension.h>
|
||||
#import <AsyncDisplayKit/ASDimensionInternal.h>
|
||||
#import <AsyncDisplayKit/ASDimensionDeprecated.h>
|
||||
#import <AsyncDisplayKit/ASEnvironment.h>
|
||||
#import <AsyncDisplayKit/ASLayoutElement.h>
|
||||
#import <AsyncDisplayKit/ASLayoutSpec.h>
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
//
|
||||
|
||||
#import <AsyncDisplayKit/ASBaseDefines.h>
|
||||
#import <AsyncDisplayKit/ASDimension.h>
|
||||
#import <AsyncDisplayKit/ASDimensionDeprecated.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
||||
@ -13,6 +13,11 @@
|
||||
#import <AsyncDisplayKit/ASBaseDefines.h>
|
||||
#import <AsyncDisplayKit/ASAssert.h>
|
||||
|
||||
ASDISPLAYNODE_EXTERN_C_BEGIN
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#pragma mark -
|
||||
|
||||
ASDISPLAYNODE_INLINE BOOL AS_WARN_UNUSED_RESULT ASPointsValidForLayout(CGFloat points)
|
||||
{
|
||||
return ((isnormal(points) || points == 0.0) && points >= 0.0 && points < (CGFLOAT_MAX / 2.0));
|
||||
@ -33,6 +38,8 @@ ASDISPLAYNODE_INLINE BOOL AS_WARN_UNUSED_RESULT ASIsCGSizeValidForSize(CGSize si
|
||||
return (ASPointsValidForSize(size.width) && ASPointsValidForSize(size.height));
|
||||
}
|
||||
|
||||
#pragma mark - ASDimension
|
||||
|
||||
/**
|
||||
* A dimension relative to constraints to be provided in the future.
|
||||
* A ASDimension can be one of three types:
|
||||
@ -58,42 +65,10 @@ typedef struct {
|
||||
} ASDimension;
|
||||
|
||||
/**
|
||||
* Expresses an inclusive range of sizes. Used to provide a simple constraint to layout.
|
||||
* Represents auto as ASDimension
|
||||
*/
|
||||
typedef struct {
|
||||
CGSize min;
|
||||
CGSize max;
|
||||
} ASSizeRange;
|
||||
|
||||
/**
|
||||
* A struct specifying a ASLayoutElement's size. Example:
|
||||
*
|
||||
* ASLayoutElementSize size = (ASLayoutElementSize){
|
||||
* .width = ASDimensionMakeWithFraction(0.25),
|
||||
* .maxWidth = ASDimensionMakeWithPoints(200),
|
||||
* .minHeight = ASDimensionMakeWithFraction(0.50)
|
||||
* };
|
||||
*
|
||||
* Description: <ASLayoutElementSize: exact={25%, Auto}, min={Auto, 50%}, max={200pt, Auto}>
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
ASDimension width;
|
||||
ASDimension height;
|
||||
ASDimension minWidth;
|
||||
ASDimension maxWidth;
|
||||
ASDimension minHeight;
|
||||
ASDimension maxHeight;
|
||||
} ASLayoutElementSize;
|
||||
|
||||
extern ASDimension const ASDimensionAuto;
|
||||
|
||||
ASDISPLAYNODE_EXTERN_C_BEGIN
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
||||
#pragma mark - ASDimension
|
||||
|
||||
/**
|
||||
* Returns a dimension with the specified type and value.
|
||||
*/
|
||||
@ -173,15 +148,6 @@ ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT CGFloat ASDimensionResolve(ASDimensio
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - NSNumber+ASDimension
|
||||
|
||||
@interface NSNumber (ASDimension)
|
||||
@property (nonatomic, readonly) ASDimension as_pointDimension;
|
||||
@property (nonatomic, readonly) ASDimension as_fractionDimension;
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark - ASLayoutSize
|
||||
|
||||
/**
|
||||
@ -205,6 +171,15 @@ ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT ASLayoutSize ASLayoutSizeMake(ASDimen
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve this relative size relative to a parent size.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE CGSize ASLayoutSizeResolveSize(ASLayoutSize layoutSize, CGSize parentSize, CGSize autoSize)
|
||||
{
|
||||
return CGSizeMake(ASDimensionResolve(layoutSize.width, parentSize.width, autoSize.width),
|
||||
ASDimensionResolve(layoutSize.height, parentSize.height, autoSize.height));
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns a string representation of a relative size.
|
||||
*/
|
||||
@ -217,6 +192,14 @@ ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT NSString *NSStringFromASLayoutSize(AS
|
||||
|
||||
#pragma mark - ASSizeRange
|
||||
|
||||
/**
|
||||
* Expresses an inclusive range of sizes. Used to provide a simple constraint to layout.
|
||||
*/
|
||||
typedef struct {
|
||||
CGSize min;
|
||||
CGSize max;
|
||||
} ASSizeRange;
|
||||
|
||||
/**
|
||||
* Creates an ASSizeRange with provided min and max size.
|
||||
*/
|
||||
@ -272,149 +255,5 @@ ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT BOOL ASSizeRangeEqualToSizeRange(ASSi
|
||||
*/
|
||||
extern AS_WARN_UNUSED_RESULT NSString *NSStringFromASSizeRange(ASSizeRange sizeRange);
|
||||
|
||||
|
||||
#pragma mark - ASLayoutElementSize
|
||||
|
||||
/**
|
||||
* Returns an ASLayoutElementSize with default values.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT ASLayoutElementSize ASLayoutElementSizeMake()
|
||||
{
|
||||
return (ASLayoutElementSize){
|
||||
.width = ASDimensionAuto,
|
||||
.height = ASDimensionAuto,
|
||||
.minWidth = ASDimensionAuto,
|
||||
.maxWidth = ASDimensionAuto,
|
||||
.minHeight = ASDimensionAuto,
|
||||
.maxHeight = ASDimensionAuto
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ASLayoutElementSize with the specified CGSize values as width and height.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT ASLayoutElementSize ASLayoutElementSizeMakeFromCGSize(CGSize size)
|
||||
{
|
||||
ASLayoutElementSize s = ASLayoutElementSizeMake();
|
||||
s.width = ASDimensionMakeWithPoints(size.width);
|
||||
s.height = ASDimensionMakeWithPoints(size.height);
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether two sizes are equal.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT BOOL ASLayoutElementSizeEqualToLayoutElementSize(ASLayoutElementSize lhs, ASLayoutElementSize rhs)
|
||||
{
|
||||
return (ASDimensionEqualToDimension(lhs.width, rhs.width)
|
||||
&& ASDimensionEqualToDimension(lhs.height, rhs.height)
|
||||
&& ASDimensionEqualToDimension(lhs.minWidth, rhs.minWidth)
|
||||
&& ASDimensionEqualToDimension(lhs.maxWidth, rhs.maxWidth)
|
||||
&& ASDimensionEqualToDimension(lhs.minHeight, rhs.minHeight)
|
||||
&& ASDimensionEqualToDimension(lhs.maxHeight, rhs.maxHeight));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string formatted to contain the data from an ASLayoutElementSize.
|
||||
*/
|
||||
extern AS_WARN_UNUSED_RESULT NSString *NSStringFromASLayoutElementSize(ASLayoutElementSize size);
|
||||
|
||||
/**
|
||||
* Resolve the given size relative to a parent size and an auto size.
|
||||
* From the given size uses width, height to resolve the exact size constraint, uses the minHeight and minWidth to
|
||||
* resolve the min size constraint and the maxHeight and maxWidth to resolve the max size constraint. For every
|
||||
* dimension with unit ASDimensionUnitAuto the given autoASSizeRange value will be used.
|
||||
* Based on the calculated exact, min and max size constraints the final size range will be calculated.
|
||||
*/
|
||||
extern AS_WARN_UNUSED_RESULT ASSizeRange ASLayoutElementSizeResolveAutoSize(ASLayoutElementSize size, const CGSize parentSize, ASSizeRange autoASSizeRange);
|
||||
|
||||
/**
|
||||
* Resolve the given size to a parent size. Uses internally ASLayoutElementSizeResolveAutoSize with {INFINITY, INFINITY} as
|
||||
* as autoASSizeRange. For more information look at ASLayoutElementSizeResolveAutoSize.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT ASSizeRange ASLayoutElementSizeResolve(ASLayoutElementSize size, const CGSize parentSize)
|
||||
{
|
||||
return ASLayoutElementSizeResolveAutoSize(size, parentSize, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY)));
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Deprecated
|
||||
|
||||
/**
|
||||
* A dimension relative to constraints to be provided in the future.
|
||||
* A ASDimension can be one of three types:
|
||||
*
|
||||
* "Auto" - This indicated "I have no opinion" and may be resolved in whatever way makes most sense given the circumstances.
|
||||
*
|
||||
* "Points" - Just a number. It will always resolve to exactly this amount.
|
||||
*
|
||||
* "Percent" - Multiplied to a provided parent amount to resolve a final amount.
|
||||
*/
|
||||
typedef NS_ENUM(NSInteger, ASRelativeDimensionType) {
|
||||
/** This indicates "I have no opinion" and may be resolved in whatever way makes most sense given the circumstances. */
|
||||
ASRelativeDimensionTypeAuto,
|
||||
/** Just a number. It will always resolve to exactly this amount. This is the default type. */
|
||||
ASRelativeDimensionTypePoints,
|
||||
/** Multiplied to a provided parent amount to resolve a final amount. */
|
||||
ASRelativeDimensionTypeFraction,
|
||||
};
|
||||
|
||||
#define ASRelativeDimension ASDimension
|
||||
#define ASRelativeSize ASLayoutSize
|
||||
#define ASRelativeDimensionMakeWithPoints ASDimensionMakeWithPoints
|
||||
#define ASRelativeDimensionMakeWithFraction ASDimensionMakeWithFraction
|
||||
|
||||
/**
|
||||
* Function is deprecated. Use ASSizeRangeMake instead.
|
||||
*/
|
||||
extern AS_WARN_UNUSED_RESULT ASSizeRange ASSizeRangeMakeExactSize(CGSize size) ASDISPLAYNODE_DEPRECATED_MSG("Use ASSizeRangeMake instead.");
|
||||
|
||||
/**
|
||||
Expresses an inclusive range of relative sizes. Used to provide additional constraint to layout.
|
||||
Used by ASStaticLayoutSpec.
|
||||
*/
|
||||
typedef struct {
|
||||
ASLayoutSize min;
|
||||
ASLayoutSize max;
|
||||
} ASRelativeSizeRange;
|
||||
|
||||
extern ASRelativeSizeRange const ASRelativeSizeRangeUnconstrained;
|
||||
|
||||
#pragma mark - ASRelativeDimension
|
||||
|
||||
extern ASDimension ASRelativeDimensionMake(ASRelativeDimensionType type, CGFloat value) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
#pragma mark - ASRelativeSize
|
||||
|
||||
extern ASLayoutSize ASRelativeSizeMake(ASRelativeDimension width, ASRelativeDimension height) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
/** Convenience constructor to provide size in points. */
|
||||
extern ASLayoutSize ASRelativeSizeMakeWithCGSize(CGSize size) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
/** Convenience constructor to provide size as a fraction. */
|
||||
extern ASLayoutSize ASRelativeSizeMakeWithFraction(CGFloat fraction) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern BOOL ASRelativeSizeEqualToRelativeSize(ASLayoutSize lhs, ASLayoutSize rhs) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern NSString *NSStringFromASRelativeSize(ASLayoutSize size) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
#pragma mark - ASRelativeSizeRange
|
||||
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMake(ASLayoutSize min, ASLayoutSize max) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
#pragma mark Convenience constructors to provide an exact size (min == max).
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactRelativeSize(ASLayoutSize exact) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactCGSize(CGSize exact) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactFraction(CGFloat fraction) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactRelativeDimensions(ASRelativeDimension exactWidth, ASRelativeDimension exactHeight) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern BOOL ASRelativeSizeRangeEqualToRelativeSizeRange(ASRelativeSizeRange lhs, ASRelativeSizeRange rhs) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
/** Provided a parent size, compute final dimensions for this RelativeSizeRange to arrive at a SizeRange. */
|
||||
extern ASSizeRange ASRelativeSizeRangeResolve(ASRelativeSizeRange relativeSizeRange, CGSize parentSize) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
ASDISPLAYNODE_EXTERN_C_END
|
||||
|
||||
@ -52,91 +52,10 @@ NSString *NSStringFromASDimension(ASDimension dimension)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - NSNumber+ASDimension
|
||||
|
||||
@implementation NSNumber (ASDimension)
|
||||
|
||||
- (ASDimension)as_pointDimension
|
||||
{
|
||||
return ASDimensionMake(ASDimensionUnitPoints, ASCGFloatFromNumber(self));
|
||||
}
|
||||
|
||||
- (ASDimension)as_fractionDimension
|
||||
{
|
||||
return ASDimensionMake(ASDimensionUnitFraction, ASCGFloatFromNumber(self));
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark - ASLayoutSize
|
||||
|
||||
ASLayoutSize const ASLayoutSizeAuto = {ASDimensionAuto, ASDimensionAuto};
|
||||
|
||||
// ** Resolve this relative size relative to a parent size. */
|
||||
ASDISPLAYNODE_INLINE CGSize ASLayoutSizeResolveSize(ASLayoutSize layoutSize, CGSize parentSize, CGSize autoSize)
|
||||
{
|
||||
return CGSizeMake(ASDimensionResolve(layoutSize.width, parentSize.width, autoSize.width),
|
||||
ASDimensionResolve(layoutSize.height, parentSize.height, autoSize.height));
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - ASLayoutElementSize
|
||||
|
||||
NSString *NSStringFromASLayoutElementSize(ASLayoutElementSize size)
|
||||
{
|
||||
return [NSString stringWithFormat:
|
||||
@"<ASLayoutElementSize: exact=%@, min=%@, max=%@>",
|
||||
NSStringFromASLayoutSize(ASLayoutSizeMake(size.width, size.height)),
|
||||
NSStringFromASLayoutSize(ASLayoutSizeMake(size.minWidth, size.minHeight)),
|
||||
NSStringFromASLayoutSize(ASLayoutSizeMake(size.maxWidth, size.maxHeight))];
|
||||
}
|
||||
|
||||
ASDISPLAYNODE_INLINE void ASLayoutElementSizeConstrain(CGFloat minVal, CGFloat exactVal, CGFloat maxVal, CGFloat *outMin, CGFloat *outMax)
|
||||
{
|
||||
NSCAssert(!isnan(minVal), @"minVal must not be NaN");
|
||||
NSCAssert(!isnan(maxVal), @"maxVal must not be NaN");
|
||||
// Avoid use of min/max primitives since they're harder to reason
|
||||
// about in the presence of NaN (in exactVal)
|
||||
// Follow CSS: min overrides max overrides exact.
|
||||
|
||||
// Begin with the min/max range
|
||||
*outMin = minVal;
|
||||
*outMax = maxVal;
|
||||
if (maxVal <= minVal) {
|
||||
// min overrides max and exactVal is irrelevant
|
||||
*outMax = minVal;
|
||||
return;
|
||||
}
|
||||
if (isnan(exactVal)) {
|
||||
// no exact value, so leave as a min/max range
|
||||
return;
|
||||
}
|
||||
if (exactVal > maxVal) {
|
||||
// clip to max value
|
||||
*outMin = maxVal;
|
||||
} else if (exactVal < minVal) {
|
||||
// clip to min value
|
||||
*outMax = minVal;
|
||||
} else {
|
||||
// use exact value
|
||||
*outMin = *outMax = exactVal;
|
||||
}
|
||||
}
|
||||
|
||||
ASSizeRange ASLayoutElementSizeResolveAutoSize(ASLayoutElementSize size, const CGSize parentSize, ASSizeRange autoASSizeRange)
|
||||
{
|
||||
CGSize resolvedExact = ASLayoutSizeResolveSize(ASLayoutSizeMake(size.width, size.height), parentSize, {NAN, NAN});
|
||||
CGSize resolvedMin = ASLayoutSizeResolveSize(ASLayoutSizeMake(size.minWidth, size.minHeight), parentSize, autoASSizeRange.min);
|
||||
CGSize resolvedMax = ASLayoutSizeResolveSize(ASLayoutSizeMake(size.maxWidth, size.maxHeight), parentSize, autoASSizeRange.max);
|
||||
|
||||
CGSize rangeMin, rangeMax;
|
||||
ASLayoutElementSizeConstrain(resolvedMin.width, resolvedExact.width, resolvedMax.width, &rangeMin.width, &rangeMax.width);
|
||||
ASLayoutElementSizeConstrain(resolvedMin.height, resolvedExact.height, resolvedMax.height, &rangeMin.height, &rangeMax.height);
|
||||
return {rangeMin, rangeMax};
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - ASSizeRange
|
||||
|
||||
@ -178,90 +97,3 @@ NSString *NSStringFromASSizeRange(ASSizeRange sizeRange)
|
||||
NSStringFromCGSize(sizeRange.min),
|
||||
NSStringFromCGSize(sizeRange.max)];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Deprecated
|
||||
|
||||
ASDimension ASRelativeDimensionMake(ASRelativeDimensionType type, CGFloat value)
|
||||
{
|
||||
if (type == ASRelativeDimensionTypePoints) {
|
||||
return ASDimensionMakeWithPoints(value);
|
||||
} else if (type == ASRelativeDimensionTypeFraction) {
|
||||
return ASDimensionMakeWithFraction(value);
|
||||
}
|
||||
|
||||
ASDisplayNodeCAssert(NO, @"ASRelativeDimensionMake does not support the given ASRelativeDimensionType");
|
||||
return ASDimensionMakeWithPoints(0);
|
||||
}
|
||||
|
||||
ASSizeRange ASSizeRangeMakeExactSize(CGSize size)
|
||||
{
|
||||
return ASSizeRangeMake(size);
|
||||
}
|
||||
|
||||
ASRelativeSizeRange const ASRelativeSizeRangeUnconstrained = {};
|
||||
|
||||
#pragma mark - ASRelativeSize
|
||||
|
||||
ASLayoutSize ASRelativeSizeMake(ASRelativeDimension width, ASRelativeDimension height)
|
||||
{
|
||||
return ASLayoutSizeMake(width, height);
|
||||
}
|
||||
|
||||
ASLayoutSize ASRelativeSizeMakeWithCGSize(CGSize size)
|
||||
{
|
||||
return ASRelativeSizeMake(ASRelativeDimensionMakeWithPoints(size.width),
|
||||
ASRelativeDimensionMakeWithPoints(size.height));
|
||||
}
|
||||
|
||||
ASLayoutSize ASRelativeSizeMakeWithFraction(CGFloat fraction)
|
||||
{
|
||||
return ASRelativeSizeMake(ASRelativeDimensionMakeWithFraction(fraction),
|
||||
ASRelativeDimensionMakeWithFraction(fraction));
|
||||
}
|
||||
|
||||
BOOL ASRelativeSizeEqualToRelativeSize(ASLayoutSize lhs, ASLayoutSize rhs)
|
||||
{
|
||||
return ASDimensionEqualToDimension(lhs.width, rhs.width)
|
||||
&& ASDimensionEqualToDimension(lhs.height, rhs.height);
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - ASRelativeSizeRange
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMake(ASLayoutSize min, ASLayoutSize max)
|
||||
{
|
||||
ASRelativeSizeRange sizeRange; sizeRange.min = min; sizeRange.max = max; return sizeRange;
|
||||
}
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactRelativeSize(ASLayoutSize exact)
|
||||
{
|
||||
return ASRelativeSizeRangeMake(exact, exact);
|
||||
}
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactCGSize(CGSize exact)
|
||||
{
|
||||
return ASRelativeSizeRangeMakeWithExactRelativeSize(ASRelativeSizeMakeWithCGSize(exact));
|
||||
}
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactFraction(CGFloat fraction)
|
||||
{
|
||||
return ASRelativeSizeRangeMakeWithExactRelativeSize(ASRelativeSizeMakeWithFraction(fraction));
|
||||
}
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactRelativeDimensions(ASRelativeDimension exactWidth, ASRelativeDimension exactHeight)
|
||||
{
|
||||
return ASRelativeSizeRangeMakeWithExactRelativeSize(ASRelativeSizeMake(exactWidth, exactHeight));
|
||||
}
|
||||
|
||||
BOOL ASRelativeSizeRangeEqualToRelativeSizeRange(ASRelativeSizeRange lhs, ASRelativeSizeRange rhs)
|
||||
{
|
||||
return ASRelativeSizeEqualToRelativeSize(lhs.min, rhs.min) && ASRelativeSizeEqualToRelativeSize(lhs.max, rhs.max);
|
||||
}
|
||||
|
||||
ASSizeRange ASRelativeSizeRangeResolve(ASRelativeSizeRange relativeSizeRange,
|
||||
CGSize parentSize)
|
||||
{
|
||||
return ASSizeRangeMake(ASLayoutSizeResolveSize(relativeSizeRange.min, parentSize, parentSize),
|
||||
ASLayoutSizeResolveSize(relativeSizeRange.max, parentSize, parentSize));
|
||||
}
|
||||
|
||||
95
AsyncDisplayKit/Layout/ASDimensionDeprecated.h
Normal file
95
AsyncDisplayKit/Layout/ASDimensionDeprecated.h
Normal file
@ -0,0 +1,95 @@
|
||||
//
|
||||
// ASDimensionDeprecated.h
|
||||
// AsyncDisplayKit
|
||||
//
|
||||
// Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
||||
// This source code is licensed under the BSD-style license found in the
|
||||
// LICENSE file in the root directory of this source tree. An additional grant
|
||||
// of patent rights can be found in the PATENTS file in the same directory.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#import <AsyncDisplayKit/ASBaseDefines.h>
|
||||
#import <AsyncDisplayKit/ASDimension.h>
|
||||
|
||||
ASDISPLAYNODE_EXTERN_C_BEGIN
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* A dimension relative to constraints to be provided in the future.
|
||||
* A ASDimension can be one of three types:
|
||||
*
|
||||
* "Auto" - This indicated "I have no opinion" and may be resolved in whatever way makes most sense given the circumstances.
|
||||
*
|
||||
* "Points" - Just a number. It will always resolve to exactly this amount.
|
||||
*
|
||||
* "Percent" - Multiplied to a provided parent amount to resolve a final amount.
|
||||
*/
|
||||
typedef NS_ENUM(NSInteger, ASRelativeDimensionType) {
|
||||
/** This indicates "I have no opinion" and may be resolved in whatever way makes most sense given the circumstances. */
|
||||
ASRelativeDimensionTypeAuto,
|
||||
/** Just a number. It will always resolve to exactly this amount. This is the default type. */
|
||||
ASRelativeDimensionTypePoints,
|
||||
/** Multiplied to a provided parent amount to resolve a final amount. */
|
||||
ASRelativeDimensionTypeFraction,
|
||||
};
|
||||
|
||||
#define ASRelativeDimension ASDimension
|
||||
#define ASRelativeSize ASLayoutSize
|
||||
#define ASRelativeDimensionMakeWithPoints ASDimensionMakeWithPoints
|
||||
#define ASRelativeDimensionMakeWithFraction ASDimensionMakeWithFraction
|
||||
|
||||
/**
|
||||
* Function is deprecated. Use ASSizeRangeMake instead.
|
||||
*/
|
||||
extern AS_WARN_UNUSED_RESULT ASSizeRange ASSizeRangeMakeExactSize(CGSize size) ASDISPLAYNODE_DEPRECATED_MSG("Use ASSizeRangeMake instead.");
|
||||
|
||||
/**
|
||||
Expresses an inclusive range of relative sizes. Used to provide additional constraint to layout.
|
||||
Used by ASStaticLayoutSpec.
|
||||
*/
|
||||
typedef struct {
|
||||
ASLayoutSize min;
|
||||
ASLayoutSize max;
|
||||
} ASRelativeSizeRange;
|
||||
|
||||
extern ASRelativeSizeRange const ASRelativeSizeRangeUnconstrained;
|
||||
|
||||
#pragma mark - ASRelativeDimension
|
||||
|
||||
extern ASDimension ASRelativeDimensionMake(ASRelativeDimensionType type, CGFloat value) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
#pragma mark - ASRelativeSize
|
||||
|
||||
extern ASLayoutSize ASRelativeSizeMake(ASRelativeDimension width, ASRelativeDimension height) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
/** Convenience constructor to provide size in points. */
|
||||
extern ASLayoutSize ASRelativeSizeMakeWithCGSize(CGSize size) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
/** Convenience constructor to provide size as a fraction. */
|
||||
extern ASLayoutSize ASRelativeSizeMakeWithFraction(CGFloat fraction) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern BOOL ASRelativeSizeEqualToRelativeSize(ASLayoutSize lhs, ASLayoutSize rhs) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern NSString *NSStringFromASRelativeSize(ASLayoutSize size) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
#pragma mark - ASRelativeSizeRange
|
||||
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMake(ASLayoutSize min, ASLayoutSize max) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
#pragma mark Convenience constructors to provide an exact size (min == max).
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactRelativeSize(ASLayoutSize exact) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactCGSize(CGSize exact) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactFraction(CGFloat fraction) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactRelativeDimensions(ASRelativeDimension exactWidth, ASRelativeDimension exactHeight) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
extern BOOL ASRelativeSizeRangeEqualToRelativeSizeRange(ASRelativeSizeRange lhs, ASRelativeSizeRange rhs) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
/** Provided a parent size, compute final dimensions for this RelativeSizeRange to arrive at a SizeRange. */
|
||||
extern ASSizeRange ASRelativeSizeRangeResolve(ASRelativeSizeRange relativeSizeRange, CGSize parentSize) ASDISPLAYNODE_DEPRECATED;
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
ASDISPLAYNODE_EXTERN_C_END
|
||||
95
AsyncDisplayKit/Layout/ASDimensionDeprecated.mm
Normal file
95
AsyncDisplayKit/Layout/ASDimensionDeprecated.mm
Normal file
@ -0,0 +1,95 @@
|
||||
//
|
||||
// ASDimensionDeprecated.mm
|
||||
// AsyncDisplayKit
|
||||
//
|
||||
// Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
||||
// This source code is licensed under the BSD-style license found in the
|
||||
// LICENSE file in the root directory of this source tree. An additional grant
|
||||
// of patent rights can be found in the PATENTS file in the same directory.
|
||||
//
|
||||
|
||||
#import "ASDimensionDeprecated.h"
|
||||
|
||||
ASDimension ASRelativeDimensionMake(ASRelativeDimensionType type, CGFloat value)
|
||||
{
|
||||
if (type == ASRelativeDimensionTypePoints) {
|
||||
return ASDimensionMakeWithPoints(value);
|
||||
} else if (type == ASRelativeDimensionTypeFraction) {
|
||||
return ASDimensionMakeWithFraction(value);
|
||||
}
|
||||
|
||||
ASDisplayNodeCAssert(NO, @"ASRelativeDimensionMake does not support the given ASRelativeDimensionType");
|
||||
return ASDimensionMakeWithPoints(0);
|
||||
}
|
||||
|
||||
ASSizeRange ASSizeRangeMakeExactSize(CGSize size)
|
||||
{
|
||||
return ASSizeRangeMake(size);
|
||||
}
|
||||
|
||||
ASRelativeSizeRange const ASRelativeSizeRangeUnconstrained = {};
|
||||
|
||||
#pragma mark - ASRelativeSize
|
||||
|
||||
ASLayoutSize ASRelativeSizeMake(ASRelativeDimension width, ASRelativeDimension height)
|
||||
{
|
||||
return ASLayoutSizeMake(width, height);
|
||||
}
|
||||
|
||||
ASLayoutSize ASRelativeSizeMakeWithCGSize(CGSize size)
|
||||
{
|
||||
return ASRelativeSizeMake(ASRelativeDimensionMakeWithPoints(size.width),
|
||||
ASRelativeDimensionMakeWithPoints(size.height));
|
||||
}
|
||||
|
||||
ASLayoutSize ASRelativeSizeMakeWithFraction(CGFloat fraction)
|
||||
{
|
||||
return ASRelativeSizeMake(ASRelativeDimensionMakeWithFraction(fraction),
|
||||
ASRelativeDimensionMakeWithFraction(fraction));
|
||||
}
|
||||
|
||||
BOOL ASRelativeSizeEqualToRelativeSize(ASLayoutSize lhs, ASLayoutSize rhs)
|
||||
{
|
||||
return ASDimensionEqualToDimension(lhs.width, rhs.width)
|
||||
&& ASDimensionEqualToDimension(lhs.height, rhs.height);
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - ASRelativeSizeRange
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMake(ASLayoutSize min, ASLayoutSize max)
|
||||
{
|
||||
ASRelativeSizeRange sizeRange; sizeRange.min = min; sizeRange.max = max; return sizeRange;
|
||||
}
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactRelativeSize(ASLayoutSize exact)
|
||||
{
|
||||
return ASRelativeSizeRangeMake(exact, exact);
|
||||
}
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactCGSize(CGSize exact)
|
||||
{
|
||||
return ASRelativeSizeRangeMakeWithExactRelativeSize(ASRelativeSizeMakeWithCGSize(exact));
|
||||
}
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactFraction(CGFloat fraction)
|
||||
{
|
||||
return ASRelativeSizeRangeMakeWithExactRelativeSize(ASRelativeSizeMakeWithFraction(fraction));
|
||||
}
|
||||
|
||||
ASRelativeSizeRange ASRelativeSizeRangeMakeWithExactRelativeDimensions(ASRelativeDimension exactWidth, ASRelativeDimension exactHeight)
|
||||
{
|
||||
return ASRelativeSizeRangeMakeWithExactRelativeSize(ASRelativeSizeMake(exactWidth, exactHeight));
|
||||
}
|
||||
|
||||
BOOL ASRelativeSizeRangeEqualToRelativeSizeRange(ASRelativeSizeRange lhs, ASRelativeSizeRange rhs)
|
||||
{
|
||||
return ASRelativeSizeEqualToRelativeSize(lhs.min, rhs.min) && ASRelativeSizeEqualToRelativeSize(lhs.max, rhs.max);
|
||||
}
|
||||
|
||||
ASSizeRange ASRelativeSizeRangeResolve(ASRelativeSizeRange relativeSizeRange,
|
||||
CGSize parentSize)
|
||||
{
|
||||
return ASSizeRangeMake(ASLayoutSizeResolveSize(relativeSizeRange.min, parentSize, parentSize),
|
||||
ASLayoutSizeResolveSize(relativeSizeRange.max, parentSize, parentSize));
|
||||
}
|
||||
105
AsyncDisplayKit/Layout/ASDimensionInternal.h
Normal file
105
AsyncDisplayKit/Layout/ASDimensionInternal.h
Normal file
@ -0,0 +1,105 @@
|
||||
//
|
||||
// ASDimensionInternal.h
|
||||
// AsyncDisplayKit
|
||||
//
|
||||
// Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
||||
// This source code is licensed under the BSD-style license found in the
|
||||
// LICENSE file in the root directory of this source tree. An additional grant
|
||||
// of patent rights can be found in the PATENTS file in the same directory.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#import <AsyncDisplayKit/ASBaseDefines.h>
|
||||
#import <AsyncDisplayKit/ASDimension.h>
|
||||
|
||||
ASDISPLAYNODE_EXTERN_C_BEGIN
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#pragma mark - ASLayoutElementSize
|
||||
|
||||
/**
|
||||
* A struct specifying a ASLayoutElement's size. Example:
|
||||
*
|
||||
* ASLayoutElementSize size = (ASLayoutElementSize){
|
||||
* .width = ASDimensionMakeWithFraction(0.25),
|
||||
* .maxWidth = ASDimensionMakeWithPoints(200),
|
||||
* .minHeight = ASDimensionMakeWithFraction(0.50)
|
||||
* };
|
||||
*
|
||||
* Description: <ASLayoutElementSize: exact={25%, Auto}, min={Auto, 50%}, max={200pt, Auto}>
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
ASDimension width;
|
||||
ASDimension height;
|
||||
ASDimension minWidth;
|
||||
ASDimension maxWidth;
|
||||
ASDimension minHeight;
|
||||
ASDimension maxHeight;
|
||||
} ASLayoutElementSize;
|
||||
|
||||
/**
|
||||
* Returns an ASLayoutElementSize with default values.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT ASLayoutElementSize ASLayoutElementSizeMake()
|
||||
{
|
||||
return (ASLayoutElementSize){
|
||||
.width = ASDimensionAuto,
|
||||
.height = ASDimensionAuto,
|
||||
.minWidth = ASDimensionAuto,
|
||||
.maxWidth = ASDimensionAuto,
|
||||
.minHeight = ASDimensionAuto,
|
||||
.maxHeight = ASDimensionAuto
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ASLayoutElementSize with the specified CGSize values as width and height.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT ASLayoutElementSize ASLayoutElementSizeMakeFromCGSize(CGSize size)
|
||||
{
|
||||
ASLayoutElementSize s = ASLayoutElementSizeMake();
|
||||
s.width = ASDimensionMakeWithPoints(size.width);
|
||||
s.height = ASDimensionMakeWithPoints(size.height);
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether two sizes are equal.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT BOOL ASLayoutElementSizeEqualToLayoutElementSize(ASLayoutElementSize lhs, ASLayoutElementSize rhs)
|
||||
{
|
||||
return (ASDimensionEqualToDimension(lhs.width, rhs.width)
|
||||
&& ASDimensionEqualToDimension(lhs.height, rhs.height)
|
||||
&& ASDimensionEqualToDimension(lhs.minWidth, rhs.minWidth)
|
||||
&& ASDimensionEqualToDimension(lhs.maxWidth, rhs.maxWidth)
|
||||
&& ASDimensionEqualToDimension(lhs.minHeight, rhs.minHeight)
|
||||
&& ASDimensionEqualToDimension(lhs.maxHeight, rhs.maxHeight));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string formatted to contain the data from an ASLayoutElementSize.
|
||||
*/
|
||||
extern AS_WARN_UNUSED_RESULT NSString *NSStringFromASLayoutElementSize(ASLayoutElementSize size);
|
||||
|
||||
/**
|
||||
* Resolve the given size relative to a parent size and an auto size.
|
||||
* From the given size uses width, height to resolve the exact size constraint, uses the minHeight and minWidth to
|
||||
* resolve the min size constraint and the maxHeight and maxWidth to resolve the max size constraint. For every
|
||||
* dimension with unit ASDimensionUnitAuto the given autoASSizeRange value will be used.
|
||||
* Based on the calculated exact, min and max size constraints the final size range will be calculated.
|
||||
*/
|
||||
extern AS_WARN_UNUSED_RESULT ASSizeRange ASLayoutElementSizeResolveAutoSize(ASLayoutElementSize size, const CGSize parentSize, ASSizeRange autoASSizeRange);
|
||||
|
||||
/**
|
||||
* Resolve the given size to a parent size. Uses internally ASLayoutElementSizeResolveAutoSize with {INFINITY, INFINITY} as
|
||||
* as autoASSizeRange. For more information look at ASLayoutElementSizeResolveAutoSize.
|
||||
*/
|
||||
ASDISPLAYNODE_INLINE AS_WARN_UNUSED_RESULT ASSizeRange ASLayoutElementSizeResolve(ASLayoutElementSize size, const CGSize parentSize)
|
||||
{
|
||||
return ASLayoutElementSizeResolveAutoSize(size, parentSize, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY)));
|
||||
}
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
ASDISPLAYNODE_EXTERN_C_END
|
||||
66
AsyncDisplayKit/Layout/ASDimensionInternal.mm
Normal file
66
AsyncDisplayKit/Layout/ASDimensionInternal.mm
Normal file
@ -0,0 +1,66 @@
|
||||
//
|
||||
// ASDimensionInternal.mm
|
||||
// AsyncDisplayKit
|
||||
//
|
||||
// Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
||||
// This source code is licensed under the BSD-style license found in the
|
||||
// LICENSE file in the root directory of this source tree. An additional grant
|
||||
// of patent rights can be found in the PATENTS file in the same directory.
|
||||
//
|
||||
|
||||
#import "ASDimensionInternal.h"
|
||||
|
||||
#pragma mark - ASLayoutElementSize
|
||||
|
||||
NSString *NSStringFromASLayoutElementSize(ASLayoutElementSize size)
|
||||
{
|
||||
return [NSString stringWithFormat:
|
||||
@"<ASLayoutElementSize: exact=%@, min=%@, max=%@>",
|
||||
NSStringFromASLayoutSize(ASLayoutSizeMake(size.width, size.height)),
|
||||
NSStringFromASLayoutSize(ASLayoutSizeMake(size.minWidth, size.minHeight)),
|
||||
NSStringFromASLayoutSize(ASLayoutSizeMake(size.maxWidth, size.maxHeight))];
|
||||
}
|
||||
|
||||
ASDISPLAYNODE_INLINE void ASLayoutElementSizeConstrain(CGFloat minVal, CGFloat exactVal, CGFloat maxVal, CGFloat *outMin, CGFloat *outMax)
|
||||
{
|
||||
NSCAssert(!isnan(minVal), @"minVal must not be NaN");
|
||||
NSCAssert(!isnan(maxVal), @"maxVal must not be NaN");
|
||||
// Avoid use of min/max primitives since they're harder to reason
|
||||
// about in the presence of NaN (in exactVal)
|
||||
// Follow CSS: min overrides max overrides exact.
|
||||
|
||||
// Begin with the min/max range
|
||||
*outMin = minVal;
|
||||
*outMax = maxVal;
|
||||
if (maxVal <= minVal) {
|
||||
// min overrides max and exactVal is irrelevant
|
||||
*outMax = minVal;
|
||||
return;
|
||||
}
|
||||
if (isnan(exactVal)) {
|
||||
// no exact value, so leave as a min/max range
|
||||
return;
|
||||
}
|
||||
if (exactVal > maxVal) {
|
||||
// clip to max value
|
||||
*outMin = maxVal;
|
||||
} else if (exactVal < minVal) {
|
||||
// clip to min value
|
||||
*outMax = minVal;
|
||||
} else {
|
||||
// use exact value
|
||||
*outMin = *outMax = exactVal;
|
||||
}
|
||||
}
|
||||
|
||||
ASSizeRange ASLayoutElementSizeResolveAutoSize(ASLayoutElementSize size, const CGSize parentSize, ASSizeRange autoASSizeRange)
|
||||
{
|
||||
CGSize resolvedExact = ASLayoutSizeResolveSize(ASLayoutSizeMake(size.width, size.height), parentSize, {NAN, NAN});
|
||||
CGSize resolvedMin = ASLayoutSizeResolveSize(ASLayoutSizeMake(size.minWidth, size.minHeight), parentSize, autoASSizeRange.min);
|
||||
CGSize resolvedMax = ASLayoutSizeResolveSize(ASLayoutSizeMake(size.maxWidth, size.maxHeight), parentSize, autoASSizeRange.max);
|
||||
|
||||
CGSize rangeMin, rangeMax;
|
||||
ASLayoutElementSizeConstrain(resolvedMin.width, resolvedExact.width, resolvedMax.width, &rangeMin.width, &rangeMax.width);
|
||||
ASLayoutElementSizeConstrain(resolvedMin.height, resolvedExact.height, resolvedMax.height, &rangeMin.height, &rangeMax.height);
|
||||
return {rangeMin, rangeMax};
|
||||
}
|
||||
@ -8,7 +8,7 @@
|
||||
// of patent rights can be found in the PATENTS file in the same directory.
|
||||
//
|
||||
|
||||
#import <AsyncDisplayKit/ASDimension.h>
|
||||
#import <AsyncDisplayKit/ASDimensionInternal.h>
|
||||
#import <AsyncDisplayKit/ASStackLayoutDefines.h>
|
||||
#import <AsyncDisplayKit/ASStackLayoutElement.h>
|
||||
#import <AsyncDisplayKit/ASAbsoluteLayoutElement.h>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user