forked from facebook/react-native
-
Notifications
You must be signed in to change notification settings - Fork 147
Fix macOS ActivityIndicator to color properly in different themes #13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
markavitale
suggested changes
Mar 13, 2019
It is in fact eslint that decided to make the ternary expression be a one liner in one case and a multi line in the other case – I assume because of length.
From: Mark A Vitale <[email protected]>
Sent: Wednesday, March 13, 2019 11:45 AM
To: Microsoft/react-native <[email protected]>
Cc: Tom Underhill <[email protected]>; Assign <[email protected]>
Subject: Re: [Microsoft/react-native] Fix macOS ActivityIndicator to color properly in different themes (#13)
@markavitale requested changes on this pull request.
________________________________
In RNTester/js/ActivityIndicatorExample.js<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FMicrosoft%2Freact-native%2Fpull%2F13%23discussion_r265256646&data=02%7C01%7CTom.Underhill%40microsoft.com%7Cf9a6e0b188644692705208d6a7e3edfe%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636880994733366232&sdata=drEXT%2Bgit%2FFLhwtdWIf6WU39D2P0xQJuCzXGiTTYcTs%3D&reserved=0>:
@@ -99,8 +100,18 @@ exports.examples = [
render() {
return (
<View style={styles.horizontal}>
- <ActivityIndicator color="#0000ff" />
- <ActivityIndicator color="#aa00aa" />
+ <ActivityIndicator
+ color={
+ Platform.OS === 'macos'
+ ? {dynamic: {light: 'black', dark: 'white'}}
+ : '#0000ff'
+ }
+ />
+ <ActivityIndicator
+ color={
+ Platform.OS === 'macos' ? {semantic: 'textColor'} : '#aa00aa'
I'm guessing it's some JS linter that is causing this to be one line while the ternary operator is broken on the ?. If it's not a linter, I'd recommend matching style.
________________________________
In React/Views/RCTActivityIndicatorView.m<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FMicrosoft%2Freact-native%2Fpull%2F13%23discussion_r265278748&data=02%7C01%7CTom.Underhill%40microsoft.com%7Cf9a6e0b188644692705208d6a7e3edfe%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636880994733376244&sdata=eHjYF1DfgqE6%2BLy6VFG%2FtAIYzuzisaq5j%2FiyrEFyyaQ%3D&reserved=0>:
@@ -66,18 +66,23 @@ - (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndi
}
}
Don't we still need a setting of the color property to result in kicking off a layer update? I think this is right, but we should double check that setNeedsDisplay: results in updateLayer being called on both iOS and macOS.
⬇️ Suggested change
-
+- (void)setColor: (UIColor*)color
+{
+ if (_color != color) {
+ _color = color;
+ [self setNeedsDisplay:YES];
+ }
+}
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FMicrosoft%2Freact-native%2Fpull%2F13%23pullrequestreview-214117726&data=02%7C01%7CTom.Underhill%40microsoft.com%7Cf9a6e0b188644692705208d6a7e3edfe%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636880994733376244&sdata=zM%2Bqt3%2F5WyoG%2FLPgKSAYajG82NrwPuvWQch6n6MccXQ%3D&reserved=0>, or mute the thread<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAcqVBhNrCR-vDGCj_suKi3FPALdhvEd8ks5vWUcOgaJpZM4btyYg&data=02%7C01%7CTom.Underhill%40microsoft.com%7Cf9a6e0b188644692705208d6a7e3edfe%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636880994733386249&sdata=kXbiZSk%2BIkYiC5a3HcN%2FEn3nAxAd57PwocTBwxdAP3M%3D&reserved=0>.
|
HeyImChris
approved these changes
Mar 13, 2019
markavitale
approved these changes
Mar 13, 2019
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good so long as we've verified updateLayer
is getting called correctly on both iOS and macOS.
It is on mac. The code change does not effect ios |
t-nanava
pushed a commit
that referenced
this pull request
Jun 17, 2019
* Fix macOS ActivityIndicator to color properly in different themes * Removed prop setter override * Add color setter to cause redisplay
This was referenced Aug 25, 2022
NickGerleman
pushed a commit
to NickGerleman/react-native
that referenced
this pull request
May 13, 2025
…tion for existing view (facebook#51294) Summary: Pull Request resolved: facebook#51294 changelog: [internal] Fix a crash where a node that is supposed to be culled doesn't get visited because culling context is not updated. The differentiator would generate a create instruction for a view that already exists. Stack trace for the crash: ``` * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT * frame #0: 0x0000000111740874 libsystem_kernel.dylib`__pthread_kill + 8 frame #1: 0x00000001117aa2ec libsystem_pthread.dylib`pthread_kill + 264 frame #2: 0x0000000180171ea8 libsystem_c.dylib`abort + 100 frame microsoft#3: 0x00000001802b0144 libc++abi.dylib`abort_message + 128 frame microsoft#4: 0x000000018029fe4c libc++abi.dylib`demangling_terminate_handler() + 296 frame microsoft#5: 0x000000018006f220 libobjc.A.dylib`_objc_terminate() + 124 frame microsoft#6: 0x00000001375d1964 INFRAFramework`meta_terminate() + 5468 frame microsoft#7: 0x00000001802af570 libc++abi.dylib`std::__terminate(void (*)()) + 12 frame microsoft#8: 0x00000001802b2498 libc++abi.dylib`__cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception*) + 32 frame microsoft#9: 0x00000001802b2478 libc++abi.dylib`__cxa_throw + 88 frame microsoft#10: 0x0000000180093904 libobjc.A.dylib`objc_exception_throw + 384 frame microsoft#11: 0x0000000180e6999c Foundation`-[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 268 frame microsoft#12: 0x000000031a3bcfc8 XPLAT_6_Framework`-[RCTComponentViewRegistry dequeueComponentViewWithComponentHandle:tag:] + 528 frame microsoft#13: 0x000000031a3ccdec XPLAT_6_Framework`RCTPerformMountInstructions(std::__1::vector<facebook::react::ShadowViewMutation, std::__1::allocator<facebook::react::ShadowViewMutation>> const&, RCTComponentViewRegistry*, RCTMountingTransactionObserverCoordinator&, int) + 356 frame microsoft#14: 0x000000031a3ccc7c XPLAT_6_Framework`-[RCTMountingManager performTransaction:]::$_1::operator()(facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&) const + 80 frame microsoft#15: 0x000000031a3ccc20 XPLAT_6_Framework`decltype(std::declval<-[RCTMountingManager performTransaction:]::$_1&>()(std::declval<facebook::react::MountingTransaction const&>(), std::declval<facebook::react::SurfaceTelemetry const&>())) std::__1::__invoke[abi:ne190102]<-[RCTMountingManager performTransaction:]::$_1&, facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&>(-[RCTMountingManager performTransaction:]::$_1&, facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&) + 40 frame microsoft#16: 0x000000031a3ccbc8 XPLAT_6_Framework`void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:ne190102]<-[RCTMountingManager performTransaction:]::$_1&, facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&>(-[RCTMountingManager performTransaction:]::$_1&, facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&) + 40 frame microsoft#17: 0x000000031a3ccb94 XPLAT_6_Framework`std::__1::__function::__alloc_func<-[RCTMountingManager performTransaction:]::$_1, std::__1::allocator<-[RCTMountingManager performTransaction:]::$_1>, void (facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&)>::operator()[abi:ne190102](facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&) + 44 frame microsoft#18: 0x000000031a3cba1c XPLAT_6_Framework`std::__1::__function::__func<-[RCTMountingManager performTransaction:]::$_1, std::__1::allocator<-[RCTMountingManager performTransaction:]::$_1>, void (facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&)>::operator()(facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&) + 44 frame microsoft#20: 0x000000032f219804 XPLAT_1_Framework`std::__1::function<void (facebook::react::MountingTransaction const&, facebook::react::SurfaceTelemetry const&)>::operator()(this=0x000000016d4f0c78, __arg=0x000000016d4f0a10, __arg=0x000000016d4f0978) const at function.h:989:10 frame microsoft#21: 0x000000032f219668 XPLAT_1_Framework`facebook::react::TelemetryController::pullTransaction(this=0x00000003f4680f00, willMount=0x000000016d4f0c98, doMount=0x000000016d4f0c78, didMount=0x000000016d4f0c58) const at TelemetryController.cpp:39:3 frame microsoft#22: 0x000000031a3c5b28 XPLAT_6_Framework`-[RCTMountingManager performTransaction:] + 544 frame microsoft#23: 0x000000031a3c5864 XPLAT_6_Framework`-[RCTMountingManager initiateTransaction:] + 456 frame microsoft#24: 0x000000031a3c5240 XPLAT_6_Framework`__42-[RCTMountingManager scheduleTransaction:]_block_invoke + 308 frame microsoft#25: 0x0000000131f81b84 BOTTOMFramework`__RCTExecuteOnMainQueue_block_invoke + 40 frame microsoft#26: 0x000000018017c788 libdispatch.dylib`_dispatch_call_block_and_release + 24 frame microsoft#27: 0x0000000180197278 libdispatch.dylib`_dispatch_client_callout + 12 frame microsoft#28: 0x00000001801b2fcc libdispatch.dylib`_dispatch_main_queue_drain.cold.7 + 24 frame microsoft#29: 0x000000018018c1c4 libdispatch.dylib`_dispatch_main_queue_drain + 1184 frame microsoft#30: 0x000000018018bd14 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 40 frame microsoft#31: 0x0000000180427fec CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 frame microsoft#32: 0x00000001804229f8 CoreFoundation`__CFRunLoopRun + 1920 frame microsoft#33: 0x0000000180421e3c CoreFoundation`CFRunLoopRunSpecific + 536 frame microsoft#34: 0x0000000190f62d00 GraphicsServices`GSEventRunModal + 164 frame microsoft#35: 0x0000000185bcec98 UIKitCore`-[UIApplication _run] + 796 frame microsoft#36: 0x0000000185bd3064 UIKitCore`UIApplicationMain + 124 frame microsoft#37: 0x0000000115fbf0bc PRODUCTFramework`main + 200 frame microsoft#38: 0x00000001114293d8 dyld_sim`start_sim + 20 frame microsoft#39: 0x0000000111506b4c dyld`start + 6000 ``` Reviewed By: rubennorte Differential Revision: D74654157 fbshipit-source-id: 9181bcd28524c71d0ca4620bd630dc0baa172386
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Please select one of the following
Description of changes
PROBLEM
ISS#3218502: LPC in Dark Mode: progress spinner doesn't spin/animate
The RCTActivityIndicatorView.m was flattening an NSColor and using its components to create layer contentFilter at the time that the
color
prop was being set. In Mojave, NSColors should only ever be converted to colorspaces in one of four methods: updateLayer, drawRect:, layout, updateConstraints. Since it was not performing the operation in any of these methods, the contentFilter was not responding to theme changes.FIX
Override the updateLayer method and there flatten the _color prop to its components only if it exists, and then set the contentFilter.
PRODUCT IMPACT
Impacts any macOS SDX that uses the ActivityIndicator (LPC) and makes it render properly in all themes.
VERIFICATION
Added semantic and dynamic colors in the ActivityIndicatorExample in RNTester to validate.
@markavitale ; @HeyImChris
/azp run