/** * Copyright (c) 2015-present, Horcrux. * All rights reserved. * * This source code is licensed under the MIT-style license found in the * LICENSE file in the root directory of this source tree. */ #import "RNSVGPattern.h" #import "RCTConvert+RNSVG.h" #import @implementation RNSVGPattern { CGImageRef _image; CGRect _rect; } - (instancetype)initWithArray:(NSArray *)array { if ((self = [super initWithArray:array])) { if (array.count < 6) { RCTLogError(@"-[%@ %@] expects 6 elements, received %@", self.class, NSStringFromSelector(_cmd), array); return nil; } _image = CGImageRetain([RCTConvert CGImage:array[1]]); _rect = [RCTConvert RNSVGCGRect:array offset:2]; } return self; } - (void)dealloc { CGImageRelease(_image); } // Note: This could use applyFillColor with a pattern. This could be more efficient but // to do that, we need to calculate our own user space CTM. - (void)paint:(CGContextRef)context opacity:(CGFloat)opacity brushConverter:(RNSVGPainter *)brushConverter; { CGContextDrawTiledImage(context, _rect, _image); } @end