diff --git a/AsyncDisplayKit/ASEditableTextNode.mm b/AsyncDisplayKit/ASEditableTextNode.mm index 217fe2677a..70e02b495b 100644 --- a/AsyncDisplayKit/ASEditableTextNode.mm +++ b/AsyncDisplayKit/ASEditableTextNode.mm @@ -49,8 +49,8 @@ // TextKit. ASDN::RecursiveMutex _textKitLock; - ASTextKitComponents _textKitComponents; - ASTextKitComponents _placeholderTextKitComponents; + ASTextKitComponents *_textKitComponents; + ASTextKitComponents *_placeholderTextKitComponents; // Forwards NSLayoutManagerDelegate methods related to word kerning ASTextNodeWordKerner *_wordKerner; @@ -133,7 +133,7 @@ - (CGSize)calculateSizeThatFits:(CGSize)constrainedSize { - ASTextKitComponents displayedComponents = [self isDisplayingPlaceholder] ? _placeholderTextKitComponents : _textKitComponents; + ASTextKitComponents *displayedComponents = [self isDisplayingPlaceholder] ? _placeholderTextKitComponents : _textKitComponents; CGSize textSize = ASTextKitComponentsSizeForConstrainedWidth(displayedComponents, constrainedSize.width); return CGSizeMake(constrainedSize.width, fminf(textSize.height, constrainedSize.height)); } diff --git a/AsyncDisplayKit/Details/ASTextNodeRenderer.mm b/AsyncDisplayKit/Details/ASTextNodeRenderer.mm index 06acd27722..2771b4e549 100644 --- a/AsyncDisplayKit/Details/ASTextNodeRenderer.mm +++ b/AsyncDisplayKit/Details/ASTextNodeRenderer.mm @@ -505,7 +505,7 @@ static const CGFloat ASTextNodeRendererTextCapHeightPadding = 1.3; CGRect lastLineRect = [_layoutManager lineFragmentRectForGlyphAtIndex:lastVisibleGlyphIndex effectiveRange:NULL]; // Calculate the bounding rectangle for the truncation message - ASTextKitComponents truncationComponents = ASTextKitComponentsCreate(_truncationString, constrainedRect.size); + ASTextKitComponents *truncationComponents = ASTextKitComponentsCreate(_truncationString, constrainedRect.size); // Size the truncation message [truncationComponents.layoutManager ensureLayoutForTextContainer:truncationComponents.textContainer]; diff --git a/AsyncDisplayKit/Details/ASTextNodeTextKitHelpers.h b/AsyncDisplayKit/Details/ASTextNodeTextKitHelpers.h index 0820315e1b..88860971ba 100644 --- a/AsyncDisplayKit/Details/ASTextNodeTextKitHelpers.h +++ b/AsyncDisplayKit/Details/ASTextNodeTextKitHelpers.h @@ -11,12 +11,14 @@ #import #import -typedef struct { - NSTextStorage *textStorage; - NSTextContainer *textContainer; - NSLayoutManager *layoutManager; - UITextView *textView; -} ASTextKitComponents; +@interface ASTextKitComponents : NSObject + +@property (nonatomic, strong) NSTextStorage *textStorage; +@property (nonatomic, strong) NSTextContainer *textContainer; +@property (nonatomic, strong) NSLayoutManager *layoutManager; +@property (nonatomic, strong) UITextView *textView; + +@end // Convenience. /** @@ -26,11 +28,11 @@ typedef struct { @return A `ASTextKitComponents` containing the created components. The text view component will be nil. @discussion The returned components will be hooked up together, so they are ready for use as a system upon return. */ -extern ASTextKitComponents ASTextKitComponentsCreate(NSAttributedString *attributedSeedString, CGSize textContainerSize); +extern ASTextKitComponents *ASTextKitComponentsCreate(NSAttributedString *attributedSeedString, CGSize textContainerSize); /** @abstract Returns the bounding size for the text view's text. @param components The TextKit components to calculate the constrained size of the text for. @param constrainedWidth The constraining width to be used during text-sizing. Usually, this value should be the receiver's calculated size. @result A CGSize representing the bounding size for the receiver's text. */ -extern CGSize ASTextKitComponentsSizeForConstrainedWidth(ASTextKitComponents components, CGFloat constrainedWidth); +extern CGSize ASTextKitComponentsSizeForConstrainedWidth(ASTextKitComponents *components, CGFloat constrainedWidth); diff --git a/AsyncDisplayKit/Details/ASTextNodeTextKitHelpers.mm b/AsyncDisplayKit/Details/ASTextNodeTextKitHelpers.mm index 2ca5109a46..421c40082b 100644 --- a/AsyncDisplayKit/Details/ASTextNodeTextKitHelpers.mm +++ b/AsyncDisplayKit/Details/ASTextNodeTextKitHelpers.mm @@ -8,9 +8,13 @@ #import "ASTextNodeTextKitHelpers.h" +@implementation ASTextKitComponents + +@end + #pragma mark - Convenience -CGSize ASTextKitComponentsSizeForConstrainedWidth(ASTextKitComponents components, CGFloat constrainedWidth) +CGSize ASTextKitComponentsSizeForConstrainedWidth(ASTextKitComponents *components, CGFloat constrainedWidth) { // If our text-view's width is already the constrained width, we can use our existing TextKit stack for this sizing calculation. // Otherwise, we create a temporary stack to size for `constrainedWidth`. @@ -25,9 +29,9 @@ CGSize ASTextKitComponentsSizeForConstrainedWidth(ASTextKitComponents components return textSize; } -ASTextKitComponents ASTextKitComponentsCreate(NSAttributedString *attributedSeedString, CGSize textContainerSize) +ASTextKitComponents *ASTextKitComponentsCreate(NSAttributedString *attributedSeedString, CGSize textContainerSize) { - ASTextKitComponents components; + ASTextKitComponents *components = [[ASTextKitComponents alloc] init]; // Create the TextKit component stack with our default configuration. components.textStorage = (attributedSeedString ? [[NSTextStorage alloc] initWithAttributedString:attributedSeedString] : [[NSTextStorage alloc] init]); diff --git a/AsyncDisplayKitTests/ASTextNodeWordKernerTests.mm b/AsyncDisplayKitTests/ASTextNodeWordKernerTests.mm index ad53664620..1aa99966b3 100644 --- a/AsyncDisplayKitTests/ASTextNodeWordKernerTests.mm +++ b/AsyncDisplayKitTests/ASTextNodeWordKernerTests.mm @@ -17,7 +17,7 @@ @interface ASTextNodeWordKernerTests : XCTestCase @property (nonatomic, readwrite, strong) ASTextNodeWordKerner *layoutManagerDelegate; -@property (nonatomic, readwrite, assign) ASTextKitComponents components; +@property (nonatomic, readwrite, assign) ASTextKitComponents *components; @property (nonatomic, readwrite, copy) NSAttributedString *attributedString; @end