diff --git a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 35b7858f01e..5e3b33d9a00 100644 --- a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -7,10 +7,12 @@ #import "RCTViewComponentView.h" +#import +#import + #import #import #import -#import #import #import #import @@ -118,7 +120,7 @@ using namespace facebook::react; // `shadowColor` if (oldViewProps.shadowColor != newViewProps.shadowColor) { - CGColorRef shadowColor = RCTCGColorRefFromSharedColor(newViewProps.shadowColor); + CGColorRef shadowColor = RCTCreateCGColorRefFromSharedColor(newViewProps.shadowColor); self.layer.shadowColor = shadowColor; CGColorRelease(shadowColor); needsInvalidateLayer = YES; @@ -344,12 +346,20 @@ static RCTCornerRadii RCTCornerRadiiFromBorderRadii(BorderRadii borderRadii) .bottomRight = (CGFloat)borderRadii.bottomRight}; } -static RCTBorderColors RCTBorderColorsFromBorderColors(BorderColors borderColors) +static RCTBorderColors RCTCreateRCTBorderColorsFromBorderColors(BorderColors borderColors) { - return RCTBorderColors{.top = RCTCGColorRefUnretainedFromSharedColor(borderColors.top), - .left = RCTCGColorRefUnretainedFromSharedColor(borderColors.left), - .bottom = RCTCGColorRefUnretainedFromSharedColor(borderColors.bottom), - .right = RCTCGColorRefUnretainedFromSharedColor(borderColors.right)}; + return RCTBorderColors{.top = RCTCreateCGColorRefFromSharedColor(borderColors.top), + .left = RCTCreateCGColorRefFromSharedColor(borderColors.left), + .bottom = RCTCreateCGColorRefFromSharedColor(borderColors.bottom), + .right = RCTCreateCGColorRefFromSharedColor(borderColors.right)}; +} + +static void RCTReleaseRCTBorderColors(RCTBorderColors borderColors) +{ + CGColorRelease(borderColors.top); + CGColorRelease(borderColors.left); + CGColorRelease(borderColors.bottom); + CGColorRelease(borderColors.right); } static RCTBorderStyle RCTBorderStyleFromBorderStyle(BorderStyle borderStyle) @@ -412,7 +422,7 @@ static RCTBorderStyle RCTBorderStyleFromBorderStyle(BorderStyle borderStyle) } layer.borderWidth = (CGFloat)borderMetrics.borderWidths.left; - CGColorRef borderColor = RCTCGColorRefFromSharedColor(borderMetrics.borderColors.left); + CGColorRef borderColor = RCTCreateCGColorRefFromSharedColor(borderMetrics.borderColors.left); layer.borderColor = borderColor; CGColorRelease(borderColor); layer.cornerRadius = (CGFloat)borderMetrics.borderRadii.topLeft; @@ -431,15 +441,19 @@ static RCTBorderStyle RCTBorderStyleFromBorderStyle(BorderStyle borderStyle) layer.borderColor = nil; layer.cornerRadius = 0; + RCTBorderColors borderColors = RCTCreateRCTBorderColorsFromBorderColors(borderMetrics.borderColors); + UIImage *image = RCTGetBorderImage( RCTBorderStyleFromBorderStyle(borderMetrics.borderStyles.left), layer.bounds.size, RCTCornerRadiiFromBorderRadii(borderMetrics.borderRadii), RCTUIEdgeInsetsFromEdgeInsets(borderMetrics.borderWidths), - RCTBorderColorsFromBorderColors(borderMetrics.borderColors), + borderColors, _backgroundColor.CGColor, self.clipsToBounds); + RCTReleaseRCTBorderColors(borderColors); + if (image == nil) { _borderLayer.contents = nil; } else { diff --git a/React/Fabric/RCTConversions.h b/React/Fabric/RCTConversions.h index f1dc7ee2910..5caafef9567 100644 --- a/React/Fabric/RCTConversions.h +++ b/React/Fabric/RCTConversions.h @@ -40,13 +40,8 @@ inline UIColor *_Nullable RCTUIColorFromSharedColor(const facebook::react::Share return sharedColor ? [UIColor colorWithCGColor:sharedColor.get()] : nil; } -inline CF_RETURNS_NOT_RETAINED CGColorRef -RCTCGColorRefUnretainedFromSharedColor(const facebook::react::SharedColor &sharedColor) -{ - return sharedColor ? sharedColor.get() : nil; -} - -inline CF_RETURNS_RETAINED CGColorRef RCTCGColorRefFromSharedColor(const facebook::react::SharedColor &sharedColor) +inline CF_RETURNS_RETAINED CGColorRef +RCTCreateCGColorRefFromSharedColor(const facebook::react::SharedColor &sharedColor) { return sharedColor ? CGColorCreateCopy(sharedColor.get()) : nil; }