Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(831)

Side by Side Diff: ios/chrome/browser/ui/util/text_frame.mm

Issue 2819283004: [ObjC ARC] Converts ios/chrome/browser/ui/util:util to ARC. (Closed)
Patch Set: Fix copy for block Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/ui/util/text_frame.h" 5 #import "ios/chrome/browser/ui/util/text_frame.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/mac/foundation_util.h" 8 #include "base/mac/foundation_util.h"
9 #import "base/mac/scoped_nsobject.h" 9
10 #if !defined(__has_feature) || !__has_feature(objc_arc)
11 #error "This file requires ARC support."
12 #endif
10 13
11 #pragma mark - FramedLine 14 #pragma mark - FramedLine
12 15
13 @implementation FramedLine { 16 @implementation FramedLine {
14 // Backing object for property of the same name. 17 // Backing object for property of the same name.
15 base::scoped_nsprotocol<id> _line; 18 id _line;
16 } 19 }
17 20
18 @synthesize stringRange = _stringRange; 21 @synthesize stringRange = _stringRange;
19 @synthesize origin = _origin; 22 @synthesize origin = _origin;
20 23
21 - (instancetype)initWithLine:(CTLineRef)line 24 - (instancetype)initWithLine:(CTLineRef)line
22 stringRange:(NSRange)stringRange 25 stringRange:(NSRange)stringRange
23 origin:(CGPoint)origin { 26 origin:(CGPoint)origin {
24 if ((self = [super init])) { 27 if ((self = [super init])) {
25 DCHECK(line); 28 DCHECK(line);
26 // CTLines created by ManualTextFramers all have zero for their string range 29 // CTLines created by ManualTextFramers all have zero for their string range
27 // locations, but its length should be equal to |stringRange|. 30 // locations, but its length should be equal to |stringRange|.
28 NSRange lineRange; 31 NSRange lineRange;
29 if (!base::mac::CFRangeToNSRange(CTLineGetStringRange(line), &lineRange)) { 32 if (!base::mac::CFRangeToNSRange(CTLineGetStringRange(line), &lineRange)) {
30 [self release];
31 return nil; 33 return nil;
32 } 34 }
33 DCHECK_EQ(lineRange.length, stringRange.length); 35 DCHECK_EQ(lineRange.length, stringRange.length);
34 _line.reset([static_cast<id>(line) retain]); 36 _line = (__bridge id)(line);
marq (ping after 24h) 2017/04/21 16:25:04 static cast
35 _stringRange = stringRange; 37 _stringRange = stringRange;
36 _origin = origin; 38 _origin = origin;
37 } 39 }
38 return self; 40 return self;
39 } 41 }
40 42
41 - (NSString*)description { 43 - (NSString*)description {
42 return [NSString stringWithFormat:@"%@ line:%@, stringRange:%@, origin:%@", 44 return [NSString stringWithFormat:@"%@ line:%@, stringRange:%@, origin:%@",
43 [super description], _line.get(), 45 [super description], _line,
44 NSStringFromRange(_stringRange), 46 NSStringFromRange(_stringRange),
45 NSStringFromCGPoint(_origin)]; 47 NSStringFromCGPoint(_origin)];
46 } 48 }
47 49
48 - (CFIndex)lineOffsetForStringLocation:(NSUInteger)stringLocation { 50 - (CFIndex)lineOffsetForStringLocation:(NSUInteger)stringLocation {
49 if (stringLocation < self.stringRange.location || 51 if (stringLocation < self.stringRange.location ||
50 stringLocation >= self.stringRange.location + self.stringRange.length) { 52 stringLocation >= self.stringRange.location + self.stringRange.length) {
51 return kCFNotFound; 53 return kCFNotFound;
52 } 54 }
53 NSRange lineRange; 55 NSRange lineRange;
54 if (!base::mac::CFRangeToNSRange(CTLineGetStringRange(self.line), &lineRange)) 56 if (!base::mac::CFRangeToNSRange(CTLineGetStringRange(self.line), &lineRange))
55 return kCFNotFound; 57 return kCFNotFound;
56 return lineRange.location + (stringLocation - self.stringRange.location); 58 return lineRange.location + (stringLocation - self.stringRange.location);
57 } 59 }
58 60
59 #pragma mark Accessors 61 #pragma mark Accessors
60 62
61 - (CTLineRef)line { 63 - (CTLineRef)line {
62 return static_cast<CTLineRef>(_line.get()); 64 return (__bridge CTLineRef)(_line);
63 } 65 }
64 66
65 @end 67 @end
66 68
67 #pragma mark - CoreTextTextFrame 69 #pragma mark - CoreTextTextFrame
68 70
69 @interface CoreTextTextFrame () { 71 @interface CoreTextTextFrame () {
70 // Backing object for property of the same name. 72 // Backing object for property of the same name.
71 base::scoped_nsobject<NSAttributedString> _string; 73 NSAttributedString* _string;
72 base::scoped_nsprotocol<id> _frame; 74 id _frame;
73 base::scoped_nsobject<NSMutableArray> _lines; 75 NSMutableArray* _lines;
74 } 76 }
75 77
76 // The CTFrameRef passed on initializaton. 78 // The CTFrameRef passed on initializaton.
77 @property(nonatomic, readonly) CTFrameRef frame; 79 @property(nonatomic, readonly) CTFrameRef frame;
78 80
79 // Populates |lines| using |frame|. 81 // Populates |lines| using |frame|.
80 - (void)createFramedLines; 82 - (void)createFramedLines;
81 83
82 @end 84 @end
83 85
84 @implementation CoreTextTextFrame 86 @implementation CoreTextTextFrame
85 87
86 @synthesize bounds = _bounds; 88 @synthesize bounds = _bounds;
87 89
88 - (instancetype)initWithString:(NSAttributedString*)string 90 - (instancetype)initWithString:(NSAttributedString*)string
89 bounds:(CGRect)bounds 91 bounds:(CGRect)bounds
90 frame:(CTFrameRef)frame { 92 frame:(CTFrameRef)frame {
91 if ((self = [super self])) { 93 if ((self = [super self])) {
92 DCHECK(string.string.length); 94 DCHECK(string.string.length);
93 _string.reset([string retain]); 95 _string = string;
94 _bounds = bounds; 96 _bounds = bounds;
95 DCHECK(frame); 97 DCHECK(frame);
96 _frame.reset([static_cast<id>(frame) retain]); 98 _frame = (__bridge id)(frame);
97 } 99 }
98 return self; 100 return self;
99 } 101 }
100 102
101 #pragma mark Accessors 103 #pragma mark Accessors
102 104
103 - (NSAttributedString*)string { 105 - (NSAttributedString*)string {
104 return _string.get(); 106 return _string;
105 } 107 }
106 108
107 - (NSRange)framedRange { 109 - (NSRange)framedRange {
108 NSRange range; 110 NSRange range;
109 CFRange cfRange = CTFrameGetVisibleStringRange(self.frame); 111 CFRange cfRange = CTFrameGetVisibleStringRange(self.frame);
110 if (base::mac::CFRangeToNSRange(cfRange, &range)) 112 if (base::mac::CFRangeToNSRange(cfRange, &range))
111 return range; 113 return range;
112 return NSMakeRange(NSNotFound, 0); 114 return NSMakeRange(NSNotFound, 0);
113 } 115 }
114 116
115 - (NSArray*)lines { 117 - (NSArray*)lines {
116 if (!_lines) 118 if (!_lines)
117 [self createFramedLines]; 119 [self createFramedLines];
118 return _lines.get(); 120 return _lines;
119 } 121 }
120 122
121 - (CTFrameRef)frame { 123 - (CTFrameRef)frame {
122 return static_cast<CTFrameRef>(_frame.get()); 124 return (__bridge CTFrameRef)(_frame);
123 } 125 }
124 126
125 #pragma mark Private 127 #pragma mark Private
126 128
127 - (void)createFramedLines { 129 - (void)createFramedLines {
128 NSArray* lines = base::mac::CFToNSCast(CTFrameGetLines(self.frame)); 130 NSArray* lines = base::mac::CFToNSCast(CTFrameGetLines(self.frame));
129 CGPoint origins[lines.count]; 131 CGPoint origins[lines.count];
130 CTFrameGetLineOrigins(self.frame, CFRangeMake(0, 0), origins); 132 CTFrameGetLineOrigins(self.frame, CFRangeMake(0, 0), origins);
131 _lines.reset([[NSMutableArray alloc] initWithCapacity:lines.count]); 133 _lines = [[NSMutableArray alloc] initWithCapacity:lines.count];
132 for (NSUInteger line_idx = 0; line_idx < lines.count; ++line_idx) { 134 for (NSUInteger line_idx = 0; line_idx < lines.count; ++line_idx) {
133 CTLineRef line = static_cast<CTLineRef>(lines[line_idx]); 135 CTLineRef line = (__bridge CTLineRef)(lines[line_idx]);
134 NSRange stringRange; 136 NSRange stringRange;
135 CFRange cfStringRange = CTLineGetStringRange(line); 137 CFRange cfStringRange = CTLineGetStringRange(line);
136 if (!base::mac::CFRangeToNSRange(cfStringRange, &stringRange)) 138 if (!base::mac::CFRangeToNSRange(cfStringRange, &stringRange))
137 break; 139 break;
138 base::scoped_nsobject<FramedLine> framedLine([[FramedLine alloc] 140 FramedLine* framedLine =
139 initWithLine:line 141 [[FramedLine alloc] initWithLine:line
140 stringRange:stringRange 142 stringRange:stringRange
141 origin:origins[line_idx]]); 143 origin:origins[line_idx]];
142 [_lines addObject:framedLine]; 144 [_lines addObject:framedLine];
143 } 145 }
144 } 146 }
145 147
146 @end 148 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698