56 lines
1.5 KiB
Objective-C
56 lines
1.5 KiB
Objective-C
/**
|
|
* 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 <React/RCTLog.h>
|
|
|
|
@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
|
|
|