Fabric: Removing `RCTCGColorRefUnretainedFromSharedColor()`

Summary:
This diff removes `RCTCGColorRefUnretainedFromSharedColor` function because it's not compatible with future changes we plan to make.
Converting SharedColor to unretained CGColorRef is actually quite dangerous because... it's an unowned pointer.

Reviewed By: JoshuaGross

Differential Revision: D23753509

fbshipit-source-id: df030ade69b63cbb872d6bdbde51575eedc6a4a6
This commit is contained in:
Valentin Shergin 2020-09-17 11:09:42 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 18ffe12203
Коммит f2ca6f568e
2 изменённых файлов: 25 добавлений и 16 удалений

Просмотреть файл

@ -7,10 +7,12 @@
#import "RCTViewComponentView.h"
#import <CoreGraphics/CoreGraphics.h>
#import <objc/runtime.h>
#import <React/RCTAssert.h>
#import <React/RCTBorderDrawing.h>
#import <React/RCTConversions.h>
#import <objc/runtime.h>
#import <react/renderer/components/view/ViewComponentDescriptor.h>
#import <react/renderer/components/view/ViewEventEmitter.h>
#import <react/renderer/components/view/ViewProps.h>
@ -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 {

Просмотреть файл

@ -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;
}