/** * 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 "RNSVGMask.h" #import "RNSVGBrushType.h" #import "RNSVGNode.h" #import "RNSVGPainter.h" #ifdef RCT_NEW_ARCH_ENABLED #import #import #import #import #import "RNSVGFabricConversions.h" #endif // RCT_NEW_ARCH_ENABLED @implementation RNSVGMask #ifdef RCT_NEW_ARCH_ENABLED using namespace facebook::react; - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { static const auto defaultProps = std::make_shared(); _props = defaultProps; } return self; } #pragma mark - RCTComponentViewProtocol + (ComponentDescriptorProvider)componentDescriptorProvider { return concreteComponentDescriptorProvider(); } - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps { const auto &newProps = *std::static_pointer_cast(props); self.x = [RNSVGLength lengthWithString:RCTNSStringFromString(newProps.x)]; self.y = [RNSVGLength lengthWithString:RCTNSStringFromString(newProps.y)]; if (RCTNSStringFromStringNilIfEmpty(newProps.height)) { self.maskheight = [RNSVGLength lengthWithString:RCTNSStringFromString(newProps.height)]; } if (RCTNSStringFromStringNilIfEmpty(newProps.width)) { self.maskwidth = [RNSVGLength lengthWithString:RCTNSStringFromString(newProps.width)]; } self.maskUnits = newProps.maskUnits == 0 ? kRNSVGUnitsObjectBoundingBox : kRNSVGUnitsUserSpaceOnUse; self.maskContentUnits = newProps.maskUnits == 0 ? kRNSVGUnitsObjectBoundingBox : kRNSVGUnitsUserSpaceOnUse; setCommonGroupProps(newProps, self); _props = std::static_pointer_cast(props); } - (void)prepareForRecycle { [super prepareForRecycle]; _x = nil; _y = nil; _maskheight = nil; _maskwidth = nil; _maskUnits = kRNSVGUnitsObjectBoundingBox; _maskContentUnits = kRNSVGUnitsObjectBoundingBox; } #endif // RCT_NEW_ARCH_ENABLED - (RNSVGPlatformView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { return nil; } - (void)parseReference { self.dirty = false; [self.svgView defineMask:self maskName:self.name]; } - (void)setX:(RNSVGLength *)x { if ([x isEqualTo:_x]) { return; } _x = x; [self invalidate]; } - (void)setY:(RNSVGLength *)y { if ([y isEqualTo:_y]) { return; } _y = y; [self invalidate]; } - (void)setMaskwidth:(RNSVGLength *)maskwidth { if ([maskwidth isEqualTo:_maskwidth]) { return; } _maskwidth = maskwidth; [self invalidate]; } - (void)setMaskheight:(RNSVGLength *)maskheight { if ([maskheight isEqualTo:_maskheight]) { return; } _maskheight = maskheight; [self invalidate]; } - (void)setMaskUnits:(RNSVGUnits)maskUnits { if (maskUnits == _maskUnits) { return; } _maskUnits = maskUnits; [self invalidate]; } - (void)setMaskContentUnits:(RNSVGUnits)maskContentUnits { if (maskContentUnits == _maskContentUnits) { return; } _maskContentUnits = maskContentUnits; [self invalidate]; } @end #ifdef RCT_NEW_ARCH_ENABLED Class RNSVGMaskCls(void) { return RNSVGMask.class; } #endif // RCT_NEW_ARCH_ENABLED