diff --git a/ComponentKit.xcodeproj/project.pbxproj b/ComponentKit.xcodeproj/project.pbxproj index b70a82324..d7e6ad2f5 100644 --- a/ComponentKit.xcodeproj/project.pbxproj +++ b/ComponentKit.xcodeproj/project.pbxproj @@ -318,7 +318,7 @@ D0B47D6E1CBD948E00BB33CE /* CKTextKitShadower.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B47C5C1CBD92C200BB33CE /* CKTextKitShadower.h */; }; D0B47D6F1CBD948E00BB33CE /* CKTextKitTailTruncater.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B47C5E1CBD92C200BB33CE /* CKTextKitTailTruncater.h */; settings = {ATTRIBUTES = (Private, ); }; }; D0B47D701CBD948E00BB33CE /* CKTextKitTruncating.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B47C601CBD92C200BB33CE /* CKTextKitTruncating.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D0B47D711CBD948E00BB33CE /* CKAsyncLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B47C621CBD92C200BB33CE /* CKAsyncLayer.h */; }; + D0B47D711CBD948E00BB33CE /* CKAsyncLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B47C621CBD92C200BB33CE /* CKAsyncLayer.h */; settings = {ATTRIBUTES = (Private, ); }; }; D0B47D721CBD948E00BB33CE /* CKAsyncLayerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B47C641CBD92C200BB33CE /* CKAsyncLayerInternal.h */; }; D0B47D731CBD948E00BB33CE /* CKAsyncLayerSubclass.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B47C651CBD92C200BB33CE /* CKAsyncLayerSubclass.h */; }; D0B47D741CBD948E00BB33CE /* CKAsyncTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B47C661CBD92C200BB33CE /* CKAsyncTransaction.h */; }; diff --git a/ComponentTextKit/CKLabelComponent.mm b/ComponentTextKit/CKLabelComponent.mm index dcfc71db2..ba45e808d 100644 --- a/ComponentTextKit/CKLabelComponent.mm +++ b/ComponentTextKit/CKLabelComponent.mm @@ -23,7 +23,7 @@ + (instancetype)newWithLabelAttributes:(const CKLabelAttributes &)attributes [CKTextComponent newWithTextAttributes:textKitAttributes(attributes) viewAttributes:std::move(copiedMap) - accessibilityContext:{.isAccessibilityElement = @(YES)} + options:{.accessibilityContext = {.isAccessibilityElement = @(YES)}} size:size]]; } diff --git a/ComponentTextKit/CKTextComponent.h b/ComponentTextKit/CKTextComponent.h index c3fe643a1..39c38e4ed 100644 --- a/ComponentTextKit/CKTextComponent.h +++ b/ComponentTextKit/CKTextComponent.h @@ -10,6 +10,7 @@ #import +#import #import struct CKTextComponentAccessibilityContext @@ -23,11 +24,17 @@ struct CKTextComponentAccessibilityContext CKComponentAccessibilityTextAttribute accessibilityLabel; }; +struct CKTextComponentOptions +{ + CKAsyncLayerDisplayMode displayMode; + CKTextComponentAccessibilityContext accessibilityContext; +}; + @interface CKTextComponent : CKComponent + (instancetype)newWithTextAttributes:(const CKTextKitAttributes &)attributes viewAttributes:(const CKViewComponentAttributeValueMap &)viewAttributes - accessibilityContext:(const CKTextComponentAccessibilityContext &)accessibilityContext + options:(const CKTextComponentOptions &)options size:(const CKComponentSize &)size; @end diff --git a/ComponentTextKit/CKTextComponent.mm b/ComponentTextKit/CKTextComponent.mm index 29e9291f7..a4b8ad090 100644 --- a/ComponentTextKit/CKTextComponent.mm +++ b/ComponentTextKit/CKTextComponent.mm @@ -63,24 +63,25 @@ @implementation CKTextComponent + (instancetype)newWithTextAttributes:(const CKTextKitAttributes &)attributes viewAttributes:(const CKViewComponentAttributeValueMap &)viewAttributes - accessibilityContext:(const CKTextComponentAccessibilityContext &)accessibilityContext + options:(const CKTextComponentOptions &)options size:(const CKComponentSize &)size { CKTextKitAttributes copyAttributes = attributes.copy(); CKViewComponentAttributeValueMap copiedMap = viewAttributes; + copiedMap.insert({CKComponentViewAttribute::LayerAttribute(@selector(setDisplayMode:)), @(options.displayMode)}); CKTextComponent *c = [super newWithView:{ [CKTextComponentView class], std::move(copiedMap), { - .isAccessibilityElement = accessibilityContext.isAccessibilityElement, - .accessibilityIdentifier = accessibilityContext.accessibilityIdentifier, - .accessibilityLabel = accessibilityContext.accessibilityLabel.hasText() - ? accessibilityContext.accessibilityLabel : ^{ return copyAttributes.attributedString.string; } + .isAccessibilityElement = options.accessibilityContext.isAccessibilityElement, + .accessibilityIdentifier = options.accessibilityContext.accessibilityIdentifier, + .accessibilityLabel = options.accessibilityContext.accessibilityLabel.hasText() + ? options.accessibilityContext.accessibilityLabel : ^{ return copyAttributes.attributedString.string; } } } size:size]; if (c) { c->_attributes = copyAttributes; - c->_accessibilityContext = accessibilityContext; + c->_accessibilityContext = options.accessibilityContext; } return c; } diff --git a/ComponentTextKitApplicationTests/CKTextComponentTests.mm b/ComponentTextKitApplicationTests/CKTextComponentTests.mm index bc62614ca..621e7a768 100644 --- a/ComponentTextKitApplicationTests/CKTextComponentTests.mm +++ b/ComponentTextKitApplicationTests/CKTextComponentTests.mm @@ -72,7 +72,7 @@ - (void)testSimpleString viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -90,7 +90,7 @@ - (void)testSimpleRTLString viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -112,7 +112,7 @@ - (void)testSimpleShadowedString viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -129,7 +129,7 @@ - (void)testMultilineString viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -147,7 +147,7 @@ - (void)testMultilineRTLString viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -166,7 +166,7 @@ - (void)testMaximumNumberOfLines viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -189,7 +189,7 @@ - (void)testMaximumNumberOfLinesWithTruncationString viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -213,7 +213,7 @@ - (void)testMaximumNumberOfLinesWithTruncationStringRTL viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -237,7 +237,7 @@ - (void)testNaturalTruncation viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -266,7 +266,7 @@ - (void)testEmptyTruncationCharacterSet viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -287,7 +287,7 @@ - (void)testDoesNotClipDescenders viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -306,7 +306,7 @@ - (void)testDoesNotCrashWithArabicUnicodeSequenceThatUsedToCrashCoreText viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -327,7 +327,7 @@ - (void)testCenterAlignmentFlexibleBounds viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -348,7 +348,7 @@ - (void)testCenterAlignmentStrictBounds viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kStrictSize, @""); } @@ -368,7 +368,7 @@ - (void)testVerticallyLaidOutText viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -394,7 +394,7 @@ - (void)testDrawsUnderlinesAndStrikethroughs viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kFlexibleSize, @""); } @@ -415,7 +415,7 @@ - (void)testComplexLigatures viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kUnrestrictedSize, @""); } @@ -439,7 +439,7 @@ - (void)testTruncationStringLargerThanLastLine viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kUnrestrictedSize, @""); } @@ -466,7 +466,7 @@ - (void)testShouldUseCustomLayoutManagerClass viewAttributes:{ {{@selector(setBackgroundColor:), [UIColor clearColor]}} } - accessibilityContext:{ } + options:{ } size:{ }]; CKSnapshotVerifyComponent(c, kUnrestrictedSize, @""); }