Fix `testColorInterpolation` on macOS

This commit is contained in:
Saad Najmi 2023-03-29 04:41:20 -07:00
Родитель bee4806d5e
Коммит 2bf55b6109
4 изменённых файлов: 14 добавлений и 13 удалений

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

@ -105,8 +105,8 @@ NSString *RCTInterpolateString(
for (id value in outputRangeConfig) {
switch (_outputType) {
case RCTInterpolationOutputColor: {
UIColor *color = [RCTConvert UIColor:value];
[outputRange addObject:color ? color : [UIColor whiteColor]];
RCTUIColor *color = [RCTConvert UIColor:value]; // [macOS]
[outputRange addObject:color ? color : [RCTUIColor whiteColor]]; // [macOS]
break;
}
case RCTInterpolationOutputString:

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

@ -9,6 +9,7 @@
#import <Foundation/Foundation.h>
#import <React/RCTDefines.h>
#import <React/RCTUIKit.h> // [macOS]
RCT_EXTERN NSString *const EXTRAPOLATE_TYPE_IDENTITY;
RCT_EXTERN NSString *const EXTRAPOLATE_TYPE_CLAMP;
@ -32,11 +33,11 @@ RCT_EXTERN CGFloat RCTInterpolateValueInRange(
NSString *extrapolateLeft,
NSString *extrapolateRight);
RCT_EXTERN int32_t
RCTInterpolateColorInRange(CGFloat value, NSArray<NSNumber *> *inputRange, NSArray<UIColor *> *outputRange);
RCT_EXTERN uint32_t
RCTInterpolateColorInRange(CGFloat value, NSArray<NSNumber *> *inputRange, NSArray<RCTUIColor *> *outputRange); // [macOS]
// Represents a color as a int32_t. RGB components are assumed to be in [0-255] range and alpha in [0-1] range
RCT_EXTERN int32_t RCTColorFromComponents(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha);
RCT_EXTERN uint32_t RCTColorFromComponents(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha);
/**
* Coefficient to slow down animations, respects the ios

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

@ -84,7 +84,7 @@ CGFloat RCTInterpolateValueInRange(
return RCTInterpolateValue(value, inputMin, inputMax, outputMin, outputMax, extrapolateLeft, extrapolateRight);
}
int32_t RCTInterpolateColorInRange(CGFloat value, NSArray<NSNumber *> *inputRange, NSArray<UIColor *> *outputRange)
uint32_t RCTInterpolateColorInRange(CGFloat value, NSArray<NSNumber *> *inputRange, NSArray<RCTUIColor *> *outputRange) // [macOS]
{
NSUInteger rangeIndex = RCTFindIndexOfNearestValue(value, inputRange);
CGFloat inputMin = inputRange[rangeIndex].doubleValue;
@ -102,10 +102,10 @@ int32_t RCTInterpolateColorInRange(CGFloat value, NSArray<NSNumber *> *inputRang
alphaMin + (value - inputMin) * (alphaMax - alphaMin) / (inputMax - inputMin));
}
int32_t RCTColorFromComponents(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha)
uint32_t RCTColorFromComponents(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha)
{
return ((int)round(alpha * 255) & 0xFF) << 24 | ((int)round(red) & 0xFF) << 16 | ((int)round(green) & 0xFF) << 8 |
((int)round(blue) & 0xFF);
return ((uint32_t)round(alpha * 255) & 0xFF) << 24 | ((uint32_t)round(red) & 0xFF) << 16 | ((uint32_t)round(green) & 0xFF) << 8 |
((uint32_t)round(blue) & 0xFF);
}
#if TARGET_IPHONE_SIMULATOR

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

@ -98,15 +98,15 @@ static CGFloat RCTSimpleInterpolation(CGFloat value, NSArray<NSNumber *> *inputR
- (void)testColorInterpolation
{
NSArray<NSNumber *> *input = @[ @0, @1 ];
NSArray<UIColor *> *output = @[ [UIColor redColor], [UIColor blueColor] ];
NSArray<RCTUIColor *> *output = @[ [RCTUIColor redColor], [RCTUIColor blueColor] ]; // [macOS]
uint32_t value;
value = RCTInterpolateColorInRange(0, input, output);
XCTAssertEqualObjects([RCTConvert UIColor:@(value)], [UIColor redColor]);
XCTAssertEqualObjects([RCTConvert UIColor:@(value)], [RCTUIColor redColor]); // [macOS]
value = RCTInterpolateColorInRange(0.5, input, output);
XCTAssertEqualObjects(
[RCTConvert UIColor:@(value)], [UIColor colorWithRed:128. / 255 green:0 blue:128. / 255 alpha:1]);
[RCTConvert UIColor:@(value)], [RCTUIColor colorWithRed:128. / 255 green:0 blue:128. / 255 alpha:1]); // [macOS]
value = RCTInterpolateColorInRange(1, input, output);
XCTAssertEqualObjects([RCTConvert UIColor:@(value)], [UIColor blueColor]);
XCTAssertEqualObjects([RCTConvert UIColor:@(value)], [RCTUIColor blueColor]); // [macOS]
}
- (void)testStringInterpolation