From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传

---
 screendisplay/Pods/YYText/YYText/Component/YYTextLine.m |  167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 167 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/YYText/YYText/Component/YYTextLine.m b/screendisplay/Pods/YYText/YYText/Component/YYTextLine.m
new file mode 100755
index 0000000..0987383
--- /dev/null
+++ b/screendisplay/Pods/YYText/YYText/Component/YYTextLine.m
@@ -0,0 +1,167 @@
+//
+//  YYYTextLine.m
+//  YYText <https://github.com/ibireme/YYText>
+//
+//  Created by ibireme on 15/3/3.
+//  Copyright (c) 2015 ibireme.
+//
+//  This source code is licensed under the MIT-style license found in the
+//  LICENSE file in the root directory of this source tree.
+//
+
+#import "YYTextLine.h"
+#import "YYTextUtilities.h"
+
+
+@implementation YYTextLine {
+    CGFloat _firstGlyphPos; // first glyph position for baseline, typically 0.
+}
+
++ (instancetype)lineWithCTLine:(CTLineRef)CTLine position:(CGPoint)position vertical:(BOOL)isVertical {
+    if (!CTLine) return nil;
+    YYTextLine *line = [self new];
+    line->_position = position;
+    line->_vertical = isVertical;
+    [line setCTLine:CTLine];
+    return line;
+}
+
+- (void)dealloc {
+    if (_CTLine) CFRelease(_CTLine);
+}
+
+- (void)setCTLine:(_Nonnull CTLineRef)CTLine {
+    if (_CTLine != CTLine) {
+        if (CTLine) CFRetain(CTLine);
+        if (_CTLine) CFRelease(_CTLine);
+        _CTLine = CTLine;
+        if (_CTLine) {
+            _lineWidth = CTLineGetTypographicBounds(_CTLine, &_ascent, &_descent, &_leading);
+            CFRange range = CTLineGetStringRange(_CTLine);
+            _range = NSMakeRange(range.location, range.length);
+            if (CTLineGetGlyphCount(_CTLine) > 0) {
+                CFArrayRef runs = CTLineGetGlyphRuns(_CTLine);
+                CTRunRef run = CFArrayGetValueAtIndex(runs, 0);
+                CGPoint pos;
+                CTRunGetPositions(run, CFRangeMake(0, 1), &pos);
+                _firstGlyphPos = pos.x;
+            } else {
+                _firstGlyphPos = 0;
+            }
+            _trailingWhitespaceWidth = CTLineGetTrailingWhitespaceWidth(_CTLine);
+        } else {
+            _lineWidth = _ascent = _descent = _leading = _firstGlyphPos = _trailingWhitespaceWidth = 0;
+            _range = NSMakeRange(0, 0);
+        }
+        [self reloadBounds];
+    }
+}
+
+- (void)setPosition:(CGPoint)position {
+    _position = position;
+    [self reloadBounds];
+}
+
+- (void)reloadBounds {
+    if (_vertical) {
+        _bounds = CGRectMake(_position.x - _descent, _position.y, _ascent + _descent, _lineWidth);
+        _bounds.origin.y += _firstGlyphPos;
+    } else {
+        _bounds = CGRectMake(_position.x, _position.y - _ascent, _lineWidth, _ascent + _descent);
+        _bounds.origin.x += _firstGlyphPos;
+    }
+    
+    _attachments = nil;
+    _attachmentRanges = nil;
+    _attachmentRects = nil;
+    if (!_CTLine) return;
+    CFArrayRef runs = CTLineGetGlyphRuns(_CTLine);
+    NSUInteger runCount = CFArrayGetCount(runs);
+    if (runCount == 0) return;
+    
+    NSMutableArray *attachments = [NSMutableArray new];
+    NSMutableArray *attachmentRanges = [NSMutableArray new];
+    NSMutableArray *attachmentRects = [NSMutableArray new];
+    for (NSUInteger r = 0; r < runCount; r++) {
+        CTRunRef run = CFArrayGetValueAtIndex(runs, r);
+        CFIndex glyphCount = CTRunGetGlyphCount(run);
+        if (glyphCount == 0) continue;
+        NSDictionary *attrs = (id)CTRunGetAttributes(run);
+        YYTextAttachment *attachment = attrs[YYTextAttachmentAttributeName];
+        if (attachment) {
+            CGPoint runPosition = CGPointZero;
+            CTRunGetPositions(run, CFRangeMake(0, 1), &runPosition);
+            
+            CGFloat ascent, descent, leading, runWidth;
+            CGRect runTypoBounds;
+            runWidth = CTRunGetTypographicBounds(run, CFRangeMake(0, 0), &ascent, &descent, &leading);
+            
+            if (_vertical) {
+                YYTEXT_SWAP(runPosition.x, runPosition.y);
+                runPosition.y = _position.y + runPosition.y;
+                runTypoBounds = CGRectMake(_position.x + runPosition.x - descent, runPosition.y , ascent + descent, runWidth);
+            } else {
+                runPosition.x += _position.x;
+                runPosition.y = _position.y - runPosition.y;
+                runTypoBounds = CGRectMake(runPosition.x, runPosition.y - ascent, runWidth, ascent + descent);
+            }
+            
+            NSRange runRange = YYTextNSRangeFromCFRange(CTRunGetStringRange(run));
+            [attachments addObject:attachment];
+            [attachmentRanges addObject:[NSValue valueWithRange:runRange]];
+            [attachmentRects addObject:[NSValue valueWithCGRect:runTypoBounds]];
+        }
+    }
+    _attachments = attachments.count ? attachments : nil;
+    _attachmentRanges = attachmentRanges.count ? attachmentRanges : nil;
+    _attachmentRects = attachmentRects.count ? attachmentRects : nil;
+}
+
+- (CGSize)size {
+    return _bounds.size;
+}
+
+- (CGFloat)width {
+    return CGRectGetWidth(_bounds);
+}
+
+- (CGFloat)height {
+    return CGRectGetHeight(_bounds);
+}
+
+- (CGFloat)top {
+    return CGRectGetMinY(_bounds);
+}
+
+- (CGFloat)bottom {
+    return CGRectGetMaxY(_bounds);
+}
+
+- (CGFloat)left {
+    return CGRectGetMinX(_bounds);
+}
+
+- (CGFloat)right {
+    return CGRectGetMaxX(_bounds);
+}
+
+- (NSString *)description {
+    NSMutableString *desc = @"".mutableCopy;
+    NSRange range = self.range;
+    [desc appendFormat:@"<YYTextLine: %p> row:%zd range:%tu,%tu",self, self.row, range.location, range.length];
+    [desc appendFormat:@" position:%@",NSStringFromCGPoint(self.position)];
+    [desc appendFormat:@" bounds:%@",NSStringFromCGRect(self.bounds)];
+    return desc;
+}
+
+@end
+
+
+@implementation YYTextRunGlyphRange
++ (instancetype)rangeWithRange:(NSRange)range drawMode:(YYTextRunGlyphDrawMode)mode {
+    YYTextRunGlyphRange *one = [self new];
+    one.glyphRangeInRun = range;
+    one.drawMode = mode;
+    return one;
+}
+@end

--
Gitblit v1.8.0