Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2015
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.53 KB | None | 0 0
  1. From 4528dd8a4f8c93472c10dd27a875bd1d21ae0ec0 Mon Sep 17 00:00:00 2001
  2. From: Matej Knopp <matej.knopp@gmail.com>
  3. Date: Tue, 22 Dec 2015 22:09:00 +0100
  4. Subject: [PATCH] initialize text renderer in background thread
  5.  
  6. Signed-off-by: Matej Knopp <matej.knopp@gmail.com>
  7. ---
  8. AsyncDisplayKit/ASTextNode.mm | 78 +++++++++++++++++++++++++++++--------------
  9. 1 file changed, 53 insertions(+), 25 deletions(-)
  10.  
  11. diff --git a/AsyncDisplayKit/ASTextNode.mm b/AsyncDisplayKit/ASTextNode.mm
  12. index f5d3b03..9f4e633 100644
  13. --- a/AsyncDisplayKit/ASTextNode.mm
  14. +++ b/AsyncDisplayKit/ASTextNode.mm
  15. @@ -30,11 +30,21 @@ static const CGFloat ASTextNodeHighlightLightOpacity = 0.11;
  16. static const CGFloat ASTextNodeHighlightDarkOpacity = 0.22;
  17. static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncationAttribute";
  18.  
  19. +@interface ASTextNode () <UIGestureRecognizerDelegate>
  20. +
  21. +- (ASTextKitRenderer *)_rendererWithBounds:(CGRect)_bounds;
  22. +
  23. +@end
  24. +
  25. @interface ASTextNodeDrawParameters : NSObject
  26. +{
  27. + ASTextNode *_node;
  28. + CGRect _bounds;
  29. + ASTextKitRenderer *_renderer;
  30. + CGPoint _textOrigin;
  31. +}
  32.  
  33. -- (instancetype)initWithRenderer:(ASTextKitRenderer *)renderer
  34. - textOrigin:(CGPoint)textOrigin
  35. - backgroundColor:(CGColorRef)backgroundColor;
  36. +- (instancetype)initWithNode:(ASTextNode*)node;
  37.  
  38. @property (nonatomic, strong, readonly) ASTextKitRenderer *renderer;
  39.  
  40. @@ -46,14 +56,13 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation
  41.  
  42. @implementation ASTextNodeDrawParameters
  43.  
  44. -- (instancetype)initWithRenderer:(ASTextKitRenderer *)renderer
  45. - textOrigin:(CGPoint)textOrigin
  46. - backgroundColor:(CGColorRef)backgroundColor
  47. +-(instancetype)initWithNode:(ASTextNode *)node
  48. {
  49. - if (self = [super init]) {
  50. - _renderer = renderer;
  51. - _textOrigin = textOrigin;
  52. - _backgroundColor = CGColorRetain(backgroundColor);
  53. + if (self = [super init])
  54. + {
  55. + _node = node;
  56. + _bounds = node.bounds;
  57. + _backgroundColor = CGColorRetain(node.backgroundColor.CGColor);
  58. }
  59. return self;
  60. }
  61. @@ -63,9 +72,28 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation
  62. CGColorRelease(_backgroundColor);
  63. }
  64.  
  65. -@end
  66.  
  67. -@interface ASTextNode () <UIGestureRecognizerDelegate>
  68. +-(void)ensureInitialized
  69. +{
  70. + if (!_renderer)
  71. + {
  72. + _renderer = [_node _rendererWithBounds:_bounds];
  73. + UIEdgeInsets shadowPadding = _renderer.shadower.shadowPadding;
  74. + _textOrigin = CGPointMake(_bounds.origin.x - shadowPadding.left, _bounds.origin.y - shadowPadding.top);
  75. + }
  76. +}
  77. +
  78. +-(ASTextKitRenderer *)renderer
  79. +{
  80. + [self ensureInitialized];
  81. + return _renderer;
  82. +}
  83. +
  84. +-(CGPoint)textOrigin
  85. +{
  86. + [self ensureInitialized];
  87. + return _textOrigin;
  88. +}
  89.  
  90. @end
  91.  
  92. @@ -248,13 +276,18 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation
  93.  
  94. - (ASTextKitRenderer *)_renderer
  95. {
  96. - ASDN::MutexLocker l(_rendererLock);
  97. - if (_renderer == nil) {
  98. - CGSize constrainedSize = _constrainedSize.width != -INFINITY ? _constrainedSize : self.bounds.size;
  99. - _renderer = [[ASTextKitRenderer alloc] initWithTextKitAttributes:[self _rendererAttributes]
  100. - constrainedSize:constrainedSize];
  101. - }
  102. - return _renderer;
  103. + return [self _rendererWithBounds:self.bounds];
  104. +}
  105. +
  106. +- (ASTextKitRenderer *)_rendererWithBounds:(CGRect)_bounds
  107. +{
  108. + ASDN::MutexLocker l(_rendererLock);
  109. + if (_renderer == nil) {
  110. + CGSize constrainedSize = _constrainedSize.width != -INFINITY ? _constrainedSize : _bounds.size;
  111. + _renderer = [[ASTextKitRenderer alloc] initWithTextKitAttributes:[self _rendererAttributes]
  112. + constrainedSize:constrainedSize];
  113. + }
  114. + return _renderer;
  115. }
  116.  
  117. - (ASTextKitAttributes)_rendererAttributes
  118. @@ -377,12 +410,7 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation
  119.  
  120. - (NSObject *)drawParametersForAsyncLayer:(_ASDisplayLayer *)layer
  121. {
  122. - // Offset the text origin by any shadow padding
  123. - UIEdgeInsets shadowPadding = [self shadowPadding];
  124. - CGPoint textOrigin = CGPointMake(self.bounds.origin.x - shadowPadding.left, self.bounds.origin.y - shadowPadding.top);
  125. - return [[ASTextNodeDrawParameters alloc] initWithRenderer:[self _renderer]
  126. - textOrigin:textOrigin
  127. - backgroundColor:self.backgroundColor.CGColor];
  128. + return [[ASTextNodeDrawParameters alloc] initWithNode:self];
  129. }
  130.  
  131. #pragma mark - Attributes
  132. --
  133. 2.5.4 (Apple Git-61)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement