/** * 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 "RNSVGUse.h" #import "RNSVGSymbol.h" #import @implementation RNSVGUse - (void)setHref:(NSString *)href { if (href == _href) { return; } [self invalidate]; _href = href; } - (void)renderLayerTo:(CGContextRef)context { RNSVGNode* template = [[self getSvgView] getDefinedTemplate:self.href]; if (template) { [self beginTransparencyLayer:context]; [self clip:context]; if ([template isKindOfClass:[RNSVGRenderable class]]) { [(RNSVGRenderable*)template mergeProperties:self]; } if ([template class] == [RNSVGSymbol class]) { RNSVGSymbol *symbol = (RNSVGSymbol*)template; [symbol renderSymbolTo:context width:[self relativeOnWidth:self.width] height:[self relativeOnWidth:self.height]]; } else { [template renderTo:context]; } if ([template isKindOfClass:[RNSVGRenderable class]]) { [(RNSVGRenderable*)template resetProperties]; } [self endTransparencyLayer:context]; } else if (self.href) { // TODO: calling yellow box here RCTLogWarn(@"`Use` element expected a pre-defined svg template as `href` prop, template named: %@ is not defined.", self.href); } } @end