Skip to content

Commit 1f70ceb

Browse files
Saadnajmiclaude
andcommitted
Address PR feedback: fix macOS tags and make all ifdef blocks iOS-first
- Fix #else/#endif comment tags to follow diffs-with-upstream guide - Flip all macOS-first (#if TARGET_OS_OSX) blocks with #else to iOS-first - Remove unnecessary TargetConditionals.h and AppKit.h imports - Add back missing [macOS] tags on modified lines Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent cb52a73 commit 1f70ceb

4 files changed

Lines changed: 66 additions & 42 deletions

File tree

packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,19 @@ struct DynamicColor {
2020
int32_t highContrastDarkColor = 0;
2121
};
2222

23+
#if TARGET_OS_OSX // [macOS
24+
struct ColorWithSystemEffect {
25+
int32_t color = 0;
26+
std::string effect;
27+
};
28+
#endif // macOS]
29+
2330
struct Color {
2431
Color(int32_t color);
2532
Color(const DynamicColor& dynamicColor);
33+
#if TARGET_OS_OSX // [macOS
34+
Color(const ColorWithSystemEffect& colorWithSystemEffect);
35+
#endif // macOS]
2636
Color(const ColorComponents& components);
2737
Color() : uiColor_(nullptr){};
2838
int32_t getColor() const;

packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.mm

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,9 @@ int32_t ColorFromColorComponents(const facebook::react::ColorComponents &compone
147147
int32_t ColorFromUIColor(RCTPlatformColor *color) // [macOS]
148148
{
149149
CGFloat rgba[4];
150-
#if TARGET_OS_OSX // [macOS
150+
#if !TARGET_OS_OSX // [macOS]
151+
[color getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
152+
#else // [macOS
151153
// Resolve dynamic/semantic colors against the current effective appearance
152154
// so that dark mode colors are correctly extracted.
153155
NSAppearance *previousAppearance = NSAppearance.currentAppearance;
@@ -159,8 +161,6 @@ int32_t ColorFromUIColor(RCTPlatformColor *color) // [macOS]
159161
[color getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
160162
}
161163
NSAppearance.currentAppearance = previousAppearance;
162-
#else // macOS]
163-
[color getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
164164
#endif // macOS]
165165
return ColorFromColorComponents({(float)rgba[0], (float)rgba[1], (float)rgba[2], (float)rgba[3]});
166166
}
@@ -211,33 +211,7 @@ int32_t ColorFromUIColor(const std::shared_ptr<void> &uiColor)
211211
return 0;
212212
}
213213

214-
#if TARGET_OS_OSX // [macOS
215-
// Hash both light and dark appearance colors to properly distinguish
216-
// dynamic colors that change with appearance.
217-
RCTPlatformColor *color = (RCTPlatformColor *)unwrapManagedObject(uiColor);
218-
int32_t darkColor = 0;
219-
int32_t lightColor = 0;
220-
NSAppearance *previousAppearance = NSAppearance.currentAppearance;
221-
222-
NSAppearance.currentAppearance = [NSAppearance appearanceNamed:NSAppearanceNameDarkAqua];
223-
NSColor *darkResolved = [color colorUsingColorSpace:[NSColorSpace sRGBColorSpace]];
224-
if (darkResolved) {
225-
CGFloat rgba[4];
226-
[darkResolved getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
227-
darkColor = ColorFromColorComponents({(float)rgba[0], (float)rgba[1], (float)rgba[2], (float)rgba[3]});
228-
}
229-
230-
NSAppearance.currentAppearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];
231-
NSColor *lightResolved = [color colorUsingColorSpace:[NSColorSpace sRGBColorSpace]];
232-
if (lightResolved) {
233-
CGFloat rgba[4];
234-
[lightResolved getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
235-
lightColor = ColorFromColorComponents({(float)rgba[0], (float)rgba[1], (float)rgba[2], (float)rgba[3]});
236-
}
237-
238-
NSAppearance.currentAppearance = previousAppearance;
239-
return facebook::react::hash_combine(darkColor, lightColor);
240-
#else // macOS]
214+
#if !TARGET_OS_OSX // [macOS]
241215
static UITraitCollection *darkModeTraitCollection =
242216
[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark];
243217
auto darkColor = ColorFromUIColorForSpecificTraitCollection(uiColor, darkModeTraitCollection);
@@ -267,6 +241,32 @@ int32_t ColorFromUIColor(const std::shared_ptr<void> &uiColor)
267241
darkAccessibilityContrastColor,
268242
lightAccessibilityContrastColor,
269243
UIColorIsP3ColorSpace(uiColor));
244+
#else // [macOS
245+
// Hash both light and dark appearance colors to properly distinguish
246+
// dynamic colors that change with appearance.
247+
RCTPlatformColor *color = (RCTPlatformColor *)unwrapManagedObject(uiColor);
248+
int32_t darkColor = 0;
249+
int32_t lightColor = 0;
250+
NSAppearance *previousAppearance = NSAppearance.currentAppearance;
251+
252+
NSAppearance.currentAppearance = [NSAppearance appearanceNamed:NSAppearanceNameDarkAqua];
253+
NSColor *darkResolved = [color colorUsingColorSpace:[NSColorSpace sRGBColorSpace]];
254+
if (darkResolved) {
255+
CGFloat rgba[4];
256+
[darkResolved getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
257+
darkColor = ColorFromColorComponents({(float)rgba[0], (float)rgba[1], (float)rgba[2], (float)rgba[3]});
258+
}
259+
260+
NSAppearance.currentAppearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];
261+
NSColor *lightResolved = [color colorUsingColorSpace:[NSColorSpace sRGBColorSpace]];
262+
if (lightResolved) {
263+
CGFloat rgba[4];
264+
[lightResolved getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
265+
lightColor = ColorFromColorComponents({(float)rgba[0], (float)rgba[1], (float)rgba[2], (float)rgba[3]});
266+
}
267+
268+
NSAppearance.currentAppearance = previousAppearance;
269+
return facebook::react::hash_combine(darkColor, lightColor);
270270
#endif // macOS]
271271
}
272272

@@ -302,7 +302,7 @@ int32_t ColorFromUIColor(const std::shared_ptr<void> &uiColor)
302302
colorWithSystemEffect.color,
303303
std::hash<std::string>{}(colorWithSystemEffect.effect));
304304
}
305-
#endif // macOS
305+
#endif // macOS]
306306

307307
Color::Color(const ColorComponents &components)
308308
{

packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/PlatformColorParser.mm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,24 @@ SharedColor parsePlatformColor(const ContextContainer &contextContainer, int32_t
6262
items.at("dynamic").hasType<std::unordered_map<std::string, RawValue>>()) {
6363
auto dynamicItems = (std::unordered_map<std::string, RawValue>)items.at("dynamic");
6464
return RCTPlatformColorComponentsFromDynamicItems(contextContainer, surfaceId, dynamicItems);
65+
#if TARGET_OS_OSX // [macOS
66+
} else if (
67+
items.find("colorWithSystemEffect") != items.end() &&
68+
items.at("colorWithSystemEffect").hasType<std::unordered_map<std::string, RawValue>>()) {
69+
auto colorWithSystemEffectItems =
70+
(std::unordered_map<std::string, RawValue>)items.at("colorWithSystemEffect");
71+
if (colorWithSystemEffectItems.find("baseColor") != colorWithSystemEffectItems.end() &&
72+
colorWithSystemEffectItems.find("systemEffect") != colorWithSystemEffectItems.end() &&
73+
colorWithSystemEffectItems.at("systemEffect").hasType<std::string>()) {
74+
SharedColor baseColorShared{};
75+
fromRawValue(contextContainer, surfaceId, colorWithSystemEffectItems.at("baseColor"), baseColorShared);
76+
if (baseColorShared) {
77+
std::string systemEffect = (std::string)colorWithSystemEffectItems.at("systemEffect");
78+
auto baseColor = (*baseColorShared).getColor();
79+
return SharedColor(Color(ColorWithSystemEffect{baseColor, systemEffect}));
80+
}
81+
}
82+
#endif // macOS]
6583
}
6684
}
6785

packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.mm

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,12 @@
88
#import "RCTPlatformColorUtils.h"
99

1010
#import <Foundation/Foundation.h>
11-
#import <TargetConditionals.h>
1211
#import <React/RCTUIKit.h> // [macOS]
13-
#if TARGET_OS_OSX // [macOS
14-
#import <AppKit/AppKit.h>
15-
#endif // macOS]
1612
#import <react/renderer/graphics/HostPlatformColor.h>
1713
#import <react/utils/ManagedObjectWrapper.h>
1814

1915
#include <string>
20-
#include <vector>
16+
#include <vector> // [macOS]
2117

2218
NS_ASSUME_NONNULL_BEGIN
2319

@@ -266,17 +262,17 @@
266262
if (colorInfo) {
267263
#if !TARGET_OS_OSX // [macOS]
268264
SEL objcColorSelector = NSSelectorFromString([platformColorString stringByAppendingString:kColorSuffix]);
269-
if (![RCTPlatformColor respondsToSelector:objcColorSelector]) {
265+
if (![RCTPlatformColor respondsToSelector:objcColorSelector]) { // [macOS]
270266
NSNumber *fallbackRGB = colorInfo[kFallbackARGBKey];
271267
if (fallbackRGB) {
272268
return _UIColorFromHexValue(fallbackRGB);
273269
}
274270
} else {
275-
Class uiColorClass = [RCTPlatformColor class];
271+
Class uiColorClass = [RCTPlatformColor class]; // [macOS]
276272
IMP imp = [uiColorClass methodForSelector:objcColorSelector];
277273
id (*getUIColor)(id, SEL) = ((id(*)(id, SEL))imp);
278274
id colorObject = getUIColor(uiColorClass, objcColorSelector);
279-
if ([colorObject isKindOfClass:[RCTPlatformColor class]]) {
275+
if ([colorObject isKindOfClass:[RCTPlatformColor class]]) { // [macOS]
280276
return colorObject;
281277
}
282278
}
@@ -331,7 +327,9 @@
331327
static inline facebook::react::ColorComponents _ColorComponentsFromUIColor(RCTPlatformColor *color) // [macOS]
332328
{
333329
CGFloat rgba[4];
334-
#if TARGET_OS_OSX // [macOS
330+
#if !TARGET_OS_OSX // [macOS]
331+
[color getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
332+
#else // [macOS
335333
// Resolve dynamic/semantic colors against the current effective appearance
336334
// so that dark mode colors are correctly extracted.
337335
NSAppearance *previousAppearance = NSAppearance.currentAppearance;
@@ -340,8 +338,6 @@
340338
NSAppearance.currentAppearance = previousAppearance;
341339
NSColor *finalColor = resolvedColor ?: [color colorUsingColorSpace:[NSColorSpace genericRGBColorSpace]];
342340
[finalColor getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
343-
#else // macOS]
344-
[color getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
345341
#endif // macOS]
346342
return {(float)rgba[0], (float)rgba[1], (float)rgba[2], (float)rgba[3]};
347343
}

0 commit comments

Comments
 (0)