mirror of
https://github.com/zoriya/react-native-svg.git
synced 2026-06-09 17:30:58 +00:00
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**  ## Test Plan Example app -> test -> Test2520 ## Compatibility | OS | Implemented | | ------- | :---------: | | iOS | ✅ | | MacOS | ✅ | | Android | ✅ |
This commit is contained in:
@@ -47,8 +47,6 @@ using namespace facebook::react;
|
||||
// This is necessary to ensure that [self setNeedsDisplay] actually triggers
|
||||
// a redraw when our parent transitions between hidden and visible.
|
||||
self.contentMode = UIViewContentModeRedraw;
|
||||
// We don't want the dimming effect on tint as it's used as currentColor
|
||||
self.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
|
||||
#endif // TARGET_OS_OSX
|
||||
rendered = false;
|
||||
#ifdef RCT_NEW_ARCH_ENABLED
|
||||
@@ -90,7 +88,7 @@ using namespace facebook::react;
|
||||
self.align = RCTNSStringFromStringNilIfEmpty(newProps.align);
|
||||
self.meetOrSlice = intToRNSVGVBMOS(newProps.meetOrSlice);
|
||||
if (RCTUIColorFromSharedColor(newProps.color)) {
|
||||
self.tintColor = RCTUIColorFromSharedColor(newProps.color);
|
||||
self.color = RCTUIColorFromSharedColor(newProps.color);
|
||||
}
|
||||
[super updateProps:props oldProps:oldProps];
|
||||
}
|
||||
@@ -184,10 +182,13 @@ using namespace facebook::react;
|
||||
[self setNeedsDisplay];
|
||||
}
|
||||
|
||||
- (void)tintColorDidChange
|
||||
- (void)setColor:(RNSVGColor *)color
|
||||
{
|
||||
if (color == _color) {
|
||||
return;
|
||||
}
|
||||
[self invalidate];
|
||||
[self clearChildCache];
|
||||
_color = color;
|
||||
}
|
||||
|
||||
- (void)setMinX:(CGFloat)minX
|
||||
|
||||
Reference in New Issue
Block a user