123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //
- // YYTextRunDelegate.m
- // YYKit <https://github.com/ibireme/YYKit>
- //
- // Created by ibireme on 14/10/14.
- // 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 "YYTextRunDelegate.h"
- static void DeallocCallback(void *ref) {
- YYTextRunDelegate *self = (__bridge_transfer YYTextRunDelegate *)(ref);
- self = nil; // release
- }
- static CGFloat GetAscentCallback(void *ref) {
- YYTextRunDelegate *self = (__bridge YYTextRunDelegate *)(ref);
- return self.ascent;
- }
- static CGFloat GetDecentCallback(void *ref) {
- YYTextRunDelegate *self = (__bridge YYTextRunDelegate *)(ref);
- return self.descent;
- }
- static CGFloat GetWidthCallback(void *ref) {
- YYTextRunDelegate *self = (__bridge YYTextRunDelegate *)(ref);
- return self.width;
- }
- @implementation YYTextRunDelegate
- - (CTRunDelegateRef)CTRunDelegate CF_RETURNS_RETAINED {
- CTRunDelegateCallbacks callbacks;
- callbacks.version = kCTRunDelegateCurrentVersion;
- callbacks.dealloc = DeallocCallback;
- callbacks.getAscent = GetAscentCallback;
- callbacks.getDescent = GetDecentCallback;
- callbacks.getWidth = GetWidthCallback;
- return CTRunDelegateCreate(&callbacks, (__bridge_retained void *)(self.copy));
- }
- - (void)encodeWithCoder:(NSCoder *)aCoder {
- [aCoder encodeObject:@(_ascent) forKey:@"ascent"];
- [aCoder encodeObject:@(_descent) forKey:@"descent"];
- [aCoder encodeObject:@(_width) forKey:@"width"];
- [aCoder encodeObject:_userInfo forKey:@"userInfo"];
- }
- - (id)initWithCoder:(NSCoder *)aDecoder {
- self = [super init];
- _ascent = ((NSNumber *)[aDecoder decodeObjectForKey:@"ascent"]).floatValue;
- _descent = ((NSNumber *)[aDecoder decodeObjectForKey:@"descent"]).floatValue;
- _width = ((NSNumber *)[aDecoder decodeObjectForKey:@"width"]).floatValue;
- _userInfo = [aDecoder decodeObjectForKey:@"userInfo"];
- return self;
- }
- - (id)copyWithZone:(NSZone *)zone {
- typeof(self) one = [self.class new];
- one.ascent = self.ascent;
- one.descent = self.descent;
- one.width = self.width;
- one.userInfo = self.userInfo;
- return one;
- }
- @end
|