// // YYTextRunDelegate.m // 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