Files
react-native-svg/apple/Elements/RNSVGSvgView.h
Jakub Grzywacz 2a58016ec1 feat: get currentColor from caller instead of parent (#2521)
# Summary

Fixes #2520
When an element uses `currentColor`, it should look for color in its
caller, not in its parent.
Example: 
```svg
<Svg width="100" height="100" viewBox="0 0 100 100" color="red">
  <Defs color="blue">
    <G color="green">
      <Rect id="a" x="0" y="0" width="50" height="50" fill="currentColor"/>
    </G>
  </Defs>
  <G color="pink">
    <Use href="#a"/>												<!-- #1 -->
  </G>
  <Use href="#a" transform="translate(25 25)"/>						<!-- #2 -->
  <G color="green">
    <Use href="#a" transform="translate(50 50)"/>					<!-- #3 -->
  </G>
</Svg>
```

* `#1` should be **pink**
* `#2` should be **red**
* `#3` should be **green**


![image](https://github.com/user-attachments/assets/b7ba2ec6-ea05-4bcb-9f40-0cf024e5c749)

## Test Plan

Example app -> test -> Test2520

## Compatibility

| OS      | Implemented |
| ------- | :---------: |
| iOS     |          |
| MacOS   |          |
| Android |          |
2024-10-31 16:00:36 +01:00

79 lines
2.4 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 "RNSVGUIKit.h"
#import "RNSVGContainer.h"
#import "RNSVGPainter.h"
#import "RNSVGVBMOS.h"
@class RNSVGNode;
@class RNSVGMarker;
@class RNSVGMask;
@class RNSVGFilter;
@interface RNSVGSvgView : RNSVGView <RNSVGContainer>
@property (nonatomic, strong) RNSVGColor *color;
@property (nonatomic, strong) RNSVGLength *bbWidth;
@property (nonatomic, strong) RNSVGLength *bbHeight;
@property (nonatomic, assign) CGFloat minX;
@property (nonatomic, assign) CGFloat minY;
@property (nonatomic, assign) CGFloat vbWidth;
@property (nonatomic, assign) CGFloat vbHeight;
@property (nonatomic, strong) NSString *align;
@property (nonatomic, assign) RNSVGVBMOS meetOrSlice;
@property (nonatomic, assign) BOOL responsible;
@property (nonatomic, assign) BOOL active;
@property (nonatomic, assign) CGRect boundingBox;
@property (nonatomic, assign) CGAffineTransform initialCTM;
@property (nonatomic, assign) CGAffineTransform invInitialCTM;
@property (nonatomic, assign) CGAffineTransform viewBoxTransform;
@property (nonatomic, assign) UIEdgeInsets hitTestEdgeInsets;
/**
* define <ClipPath></ClipPath> content as clipPath template.
*/
- (void)defineClipPath:(__kindof RNSVGNode *)clipPath clipPathName:(NSString *)clipPathName;
- (RNSVGNode *)getDefinedClipPath:(NSString *)clipPathName;
- (void)defineTemplate:(__kindof RNSVGNode *)definedTemplate templateName:(NSString *)templateName;
- (RNSVGNode *)getDefinedTemplate:(NSString *)templateName;
- (void)definePainter:(RNSVGPainter *)painter painterName:(NSString *)painterName;
- (RNSVGPainter *)getDefinedPainter:(NSString *)painterName;
- (void)defineMarker:(RNSVGMarker *)marker markerName:(NSString *)markerName;
- (RNSVGMarker *)getDefinedMarker:(NSString *)markerName;
- (void)defineMask:(RNSVGMask *)mask maskName:(NSString *)maskName;
- (RNSVGMask *)getDefinedMask:(NSString *)maskName;
- (void)defineFilter:(RNSVGFilter *)filter filterName:(NSString *)filterName;
- (RNSVGFilter *)getDefinedFilter:(NSString *)filterName;
- (NSString *)getDataURLWithBounds:(CGRect)bounds;
- (CGRect)getContextBounds;
- (void)drawRect:(CGRect)rect;
- (void)drawToContext:(CGContextRef)context withRect:(CGRect)rect;
- (CGAffineTransform)getViewBoxTransform;
- (CGAffineTransform)getInvViewBoxTransform;
@end