From 7c44d4d4f0edf73abd7bdce7697ace1636bf6700 Mon Sep 17 00:00:00 2001 From: Kyle Cui Date: Mon, 29 Mar 2021 16:11:32 -0700 Subject: [PATCH] add macOS deps to shared libraries Summary: Add macOS dependencies and alternative classes to the libraries that FlipperKitLayoutPlugin needs to function. Reviewed By: priteshrnandgaonkar Differential Revision: D27328277 fbshipit-source-id: f22d1e9f6a5415cee0bae8eaada653be5f5467b3 --- .../FKTextSearchable.h | 7 ++ .../SKHighlightOverlay.h | 20 +++++- .../SKHighlightOverlay.mm | 28 ++++++++ .../NSCollectionView+SKInvalidation.h | 21 ++++++ .../NSCollectionView+SKInvalidation.mm | 25 +++++++ .../NSColor+SKSonarValueCoder.h | 21 ++++++ .../NSColor+SKSonarValueCoder.mm | 67 +++++++++++++++++++ .../NSView+SKInvalidation.h | 19 ++++++ .../NSView+SKInvalidation.mm | 63 +++++++++++++++++ .../FlipperKitLayoutHelpers/SKInvalidation.m | 22 +++++- .../SKNodeDescriptor.h | 7 ++ .../FlipperKitLayoutHelpers/SKObject.h | 15 +++++ .../FlipperKitLayoutHelpers/SKObject.mm | 15 +++++ .../FlipperKitLayoutHelpers/SKTapListener.h | 7 ++ .../SKTapListenerImpl.h | 9 +++ .../SKTapListenerImpl.m | 61 ++++++++++++++++- .../FlipperKitLayoutHelpers/SKTouch.h | 8 ++- .../UICollectionView+SKInvalidation.h | 4 ++ .../UICollectionView+SKInvalidation.mm | 2 + .../UIColor+SKSonarValueCoder.h | 4 ++ .../UIColor+SKSonarValueCoder.mm | 2 + .../UIView+SKInvalidation.h | 4 ++ .../UIView+SKInvalidation.mm | 2 + .../utils/SKHiddenWindow.h | 16 +++++ 24 files changed, 444 insertions(+), 5 deletions(-) create mode 100644 iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSCollectionView+SKInvalidation.h create mode 100644 iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSCollectionView+SKInvalidation.mm create mode 100644 iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.h create mode 100644 iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.mm create mode 100644 iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSView+SKInvalidation.h create mode 100644 iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSView+SKInvalidation.mm diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutTextSearchable/FKTextSearchable.h b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutTextSearchable/FKTextSearchable.h index 817cb709b..7ad1503e9 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutTextSearchable/FKTextSearchable.h +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutTextSearchable/FKTextSearchable.h @@ -5,7 +5,14 @@ * LICENSE file in the root directory of this source tree. */ +#import + +#if TARGET_OS_IPHONE #import +#elif TARGET_OS_OSX +#import +#import +#endif @protocol FKTextSearchable diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitHighlightOverlay/SKHighlightOverlay.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitHighlightOverlay/SKHighlightOverlay.h index aa0c1f8c0..1bf52fd10 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitHighlightOverlay/SKHighlightOverlay.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitHighlightOverlay/SKHighlightOverlay.h @@ -5,14 +5,32 @@ * LICENSE file in the root directory of this source tree. */ +#import + +#if TARGET_OS_IPHONE #import +#elif TARGET_OS_OSX +#import +#import +#import +#endif @interface SKHighlightOverlay : NSObject + (instancetype)sharedInstance; -+ (UIColor*)overlayColor; +#if TARGET_OS_IPHONE + ++ (UIColor*)overlayColor; - (void)mountInView:(UIView*)view withFrame:(CGRect)frame; + +#elif TARGET_OS_OSX + ++ (NSColor*)overlayColor; +- (void)mountInView:(NSView*)view withFrame:(CGRect)frame; + +#endif + - (void)unmount; @end diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitHighlightOverlay/SKHighlightOverlay.mm b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitHighlightOverlay/SKHighlightOverlay.mm index e9e7d77fe..65b9b0c33 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitHighlightOverlay/SKHighlightOverlay.mm +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitHighlightOverlay/SKHighlightOverlay.mm @@ -31,6 +31,8 @@ return self; } +#if TARGET_OS_IPHONE + - (void)mountInView:(UIView*)view withFrame:(CGRect)frame { [CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue @@ -40,10 +42,25 @@ [CATransaction commit]; } +#elif TARGET_OS_OSX + +- (void)mountInView:(NSView*)view withFrame:(CGRect)frame { + [CATransaction begin]; + [CATransaction setValue:(id)kCFBooleanTrue + forKey:kCATransactionDisableActions]; + _overlayLayer.frame = frame; + [view.layer addSublayer:_overlayLayer]; + [CATransaction commit]; +} + +#endif + - (void)unmount { [_overlayLayer removeFromSuperlayer]; } +#if TARGET_OS_IPHONE + + (UIColor*)overlayColor { return [UIColor colorWithRed:136.0 / 255.0 green:117.0 / 255.0 @@ -51,6 +68,17 @@ alpha:0.6]; } +#elif TARGET_OS_OSX + ++ (NSColor*)overlayColor { + return [NSColor colorWithRed:136.0 / 255.0 + green:117.0 / 255.0 + blue:197.0 / 255.0 + alpha:0.6]; +} + +#endif + @end #endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSCollectionView+SKInvalidation.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSCollectionView+SKInvalidation.h new file mode 100644 index 000000000..44e9441e5 --- /dev/null +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSCollectionView+SKInvalidation.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#if TARGET_OS_OSX + +#import + +#import + +FB_LINK_REQUIRE_CATEGORY(NSCollectionView_SKInvalidation) +@interface NSCollectionView (SKInvalidation) + ++ (void)enableInvalidations; + +@end + +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSCollectionView+SKInvalidation.mm b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSCollectionView+SKInvalidation.mm new file mode 100644 index 000000000..a2ef94268 --- /dev/null +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSCollectionView+SKInvalidation.mm @@ -0,0 +1,25 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#if TARGET_OS_OSX +#if FB_SONARKIT_ENABLED + +#import "NSCollectionView+SKInvalidation.h" + +#import "SKInvalidation.h" +#import "SKSwizzle.h" + +FB_LINKABLE(NSCollectionView_SKInvalidation) +@implementation NSCollectionView (SKInvalidation) + ++ (void)enableInvalidations { +} + +@end + +#endif // FB_SONARKIT_ENABLED +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.h new file mode 100644 index 000000000..3e6811e78 --- /dev/null +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#if TARGET_OS_OSX + +#import + +#import + +#import "SKObject.h" + +FB_LINK_REQUIRE_CATEGORY(NSColor_SonarValueCoder) +@interface NSColor (SonarValueCoder) + +@end + +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.mm b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.mm new file mode 100644 index 000000000..39cdfa58d --- /dev/null +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.mm @@ -0,0 +1,67 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#if TARGET_OS_OSX +#if FB_SONARKIT_ENABLED + +#import "NSColor+SKSonarValueCoder.h" + +FB_LINKABLE(NSColor_SonarValueCoder) +@implementation NSColor (SonarValueCoder) + ++ (instancetype)fromSonarValue:(NSNumber*)sonarValue { + NSUInteger intColor = [sonarValue integerValue]; + + CGFloat r, g, b, a; + + b = CGFloat(intColor & 0xFF) / 255; + g = CGFloat((intColor >> 8) & 0xFF) / 255; + r = CGFloat((intColor >> 16) & 0xFF) / 255; + a = CGFloat((intColor >> 24) & 0xFF) / 255; + + return [NSColor colorWithRed:r green:g blue:b alpha:a]; +} + +- (NSDictionary>*)sonarValue { + CGColorSpaceRef colorSpace = CGColorGetColorSpace([self CGColor]); + CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); + + NSUInteger red, green, blue, alpha; + + switch (colorSpaceModel) { + case kCGColorSpaceModelUnknown: + case kCGColorSpaceModelRGB: { + CGFloat r, g, b, a; + [self getRed:&r green:&g blue:&b alpha:&a]; + + red = (NSUInteger)(r * 255) & 0xFF; + green = (NSUInteger)(g * 255) & 0xFF; + blue = (NSUInteger)(b * 255) & 0xFF; + alpha = (NSUInteger)(a * 255) & 0xFF; + } break; + + case kCGColorSpaceModelMonochrome: { + CGFloat a, w; + [self getWhite:&w alpha:&a]; + + red = green = blue = (NSUInteger)(w * 255) & 0xFF; + alpha = (NSUInteger)(a * 255) & 0xFF; + } break; + + default: + red = green = blue = alpha = 0; + } + + NSUInteger intColor = (alpha << 24) | (red << 16) | (green << 8) | blue; + return + @{@"__type__" : @"color", @"__mutable__" : @NO, @"value" : @(intColor)}; +} + +@end + +#endif // FB_SONARKIT_ENABLED +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSView+SKInvalidation.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSView+SKInvalidation.h new file mode 100644 index 000000000..21b0261f2 --- /dev/null +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSView+SKInvalidation.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#if TARGET_OS_OSX + +#import + +FB_LINK_REQUIRE_CATEGORY(NSView_SKInvalidation) +@interface NSView (SKInvalidation) + ++ (void)enableInvalidation; + +@end + +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSView+SKInvalidation.mm b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSView+SKInvalidation.mm new file mode 100644 index 000000000..4fd499b89 --- /dev/null +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/NSView+SKInvalidation.mm @@ -0,0 +1,63 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#if TARGET_OS_OSX +#if FB_SONARKIT_ENABLED + +#import +#import +#import "NSView+SKInvalidation.h" +#import "SKInvalidation.h" +#import "SKSwizzle.h" + +FB_LINKABLE(NSView_SKInvalidation) +@implementation NSView (SKInvalidation) + ++ (void)enableInvalidation { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + swizzleMethods( + [self class], @selector(setHidden:), @selector(swizzle_setHidden:)); + swizzleMethods( + [self class], @selector(addSubview:), @selector(swizzle_addSubview:)); + swizzleMethods( + [self class], + @selector(removeFromSuperview), + @selector(swizzle_removeFromSuperview)); + }); +} + +- (void)swizzle_setHidden:(BOOL)hidden { + [self swizzle_setHidden:hidden]; + + id delegate = + [SKInvalidation sharedInstance].delegate; + if (delegate != nil) { + [delegate invalidateNode:self.superview]; + } +} + +- (void)swizzle_addSubview:(NSView*)view { + [self swizzle_addSubview:view]; + [[SKInvalidation sharedInstance].delegate invalidateNode:self]; +} + +- (void)swizzle_removeFromSuperview { + NSView* oldSuperview = self.superview; + // Be careful that we always call the swizzled implementation + // before any early returns or mischief below! + [self swizzle_removeFromSuperview]; + + if (oldSuperview) { + [[SKInvalidation sharedInstance].delegate invalidateNode:oldSuperview]; + } +} + +@end + +#endif // FB_SONARKIT_ENABLED +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKInvalidation.m b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKInvalidation.m index 05966f35c..a25897392 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKInvalidation.m +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKInvalidation.m @@ -7,12 +7,22 @@ #if FB_SONARKIT_ENABLED -#import - #import "SKInvalidation.h" + +#if TARGET_OS_IPHONE + +#import #import "UICollectionView+SKInvalidation.h" #import "UIView+SKInvalidation.h" +#elif TARGET_OS_OSX + +#import +#import "NSCollectionView+SKInvalidation.h" +#import "NSView+SKInvalidation.h" + +#endif + @implementation SKInvalidation + (instancetype)sharedInstance { @@ -29,6 +39,7 @@ + (void)enableInvalidations { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ +#if TARGET_OS_IPHONE [UIView enableInvalidation]; [UICollectionView enableInvalidations]; @@ -43,6 +54,13 @@ selector:@selector(windowDidBecomeHidden:) name:UIWindowDidBecomeHiddenNotification object:nil]; + +#elif TARGET_OS_OSX + + [NSView enableInvalidation]; + [NSCollectionView enableInvalidations]; + +#endif }); } diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKNodeDescriptor.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKNodeDescriptor.h index c32095c8b..f365ebe45 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKNodeDescriptor.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKNodeDescriptor.h @@ -5,7 +5,14 @@ * LICENSE file in the root directory of this source tree. */ +#import + +#if TARGET_OS_IPHONE #import +#elif TARGET_OS_OSX +#import +#import +#endif #import #import "SKNamed.h" diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKObject.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKObject.h index 78f7fef44..79703dc78 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKObject.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKObject.h @@ -5,7 +5,14 @@ * LICENSE file in the root directory of this source tree. */ +#import + +#if TARGET_OS_IPHONE #import +#elif TARGET_OS_OSX +#import +#import +#endif @protocol SKSonarValueCoder @@ -20,7 +27,11 @@ class SKObject { SKObject(CGRect rect); SKObject(CGSize size); SKObject(CGPoint point); +#if TARGET_OS_IPHONE SKObject(UIEdgeInsets insets); +#elif TARGET_OS_OSX + SKObject(NSEdgeInsets insets); +#endif SKObject(CGAffineTransform transform); SKObject(id value); SKObject(id value); @@ -38,7 +49,11 @@ class SKMutableObject : public SKObject { SKMutableObject(CGRect rect) : SKObject(rect) {} SKMutableObject(CGSize size) : SKObject(size){}; SKMutableObject(CGPoint point) : SKObject(point){}; +#if TARGET_OS_IPHONE SKMutableObject(UIEdgeInsets insets) : SKObject(insets){}; +#elif TARGET_OS_OSX + SKMutableObject(NSEdgeInsets insets) : SKObject(insets){}; +#endif SKMutableObject(CGAffineTransform transform) : SKObject(transform){}; SKMutableObject(id value) : SKObject(value){}; SKMutableObject(id value) : SKObject(value){}; diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKObject.mm b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKObject.mm index 710137a41..6fc17176d 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKObject.mm +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKObject.mm @@ -21,6 +21,8 @@ SKObject::SKObject(CGPoint point) { _actual = @{@"x" : @(point.x), @"y" : @(point.y)}; } +#if TARGET_OS_IPHONE + SKObject::SKObject(UIEdgeInsets insets) { _actual = @{ @"top" : @(insets.top), @@ -30,6 +32,19 @@ SKObject::SKObject(UIEdgeInsets insets) { }; } +#elif TARGET_OS_OSX + +SKObject::SKObject(NSEdgeInsets insets) { + _actual = @{ + @"top" : @(insets.top), + @"bottom" : @(insets.bottom), + @"left" : @(insets.left), + @"right" : @(insets.right), + }; +} + +#endif + SKObject::SKObject(CGAffineTransform transform) { _actual = @{ @"a" : @(transform.a), diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListener.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListener.h index a136a5029..f53f9a987 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListener.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListener.h @@ -5,7 +5,14 @@ * LICENSE file in the root directory of this source tree. */ +#import + +#if TARGET_OS_IPHONE #import +#elif TARGET_OS_OSX +#import +#import +#endif typedef void (^SKTapReceiver)(CGPoint touchPoint); diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListenerImpl.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListenerImpl.h index 0dd285efa..7f91648e5 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListenerImpl.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListenerImpl.h @@ -7,7 +7,16 @@ #import "SKTapListener.h" +#if TARGET_OS_IPHONE + @interface SKTapListenerImpl : NSObject +#elif TARGET_OS_OSX + +@interface SKTapListenerImpl + : NSObject + +#endif + @end diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListenerImpl.m b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListenerImpl.m index 18e92e36d..473c12738 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListenerImpl.m +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTapListenerImpl.m @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +#include #if FB_SONARKIT_ENABLED #import "SKTapListenerImpl.h" @@ -15,9 +16,14 @@ @implementation SKTapListenerImpl { NSMutableArray* _receiversWaitingForInput; - UITapGestureRecognizer* _gestureRecognizer; +#if TARGET_OS_IPHONE + UITapGestureRecognizer* _gestureRecognizer; SKHiddenWindow* _overlayWindow; +#elif TARGET_OS_OSX + NSClickGestureRecognizer* _gestureRecognizer; + SKHiddenWindow* _overlayView; +#endif } @synthesize isMounted = _isMounted; @@ -26,6 +32,7 @@ if (self = [super init]) { _receiversWaitingForInput = [NSMutableArray new]; +#if TARGET_OS_IPHONE _gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil]; _gestureRecognizer.delegate = self; @@ -38,6 +45,21 @@ _overlayWindow.backgroundColor = [SKHighlightOverlay overlayColor]; [_overlayWindow addGestureRecognizer:_gestureRecognizer]; + +#elif TARGET_OS_OSX + _gestureRecognizer = [[NSClickGestureRecognizer alloc] initWithTarget:self + action:nil]; + _gestureRecognizer.delegate = self; + + _isMounted = NO; + + _overlayView = [SKHiddenWindow new]; + + _overlayView.hidden = YES; + _overlayView.window.level = NSStatusWindowLevel; + _overlayView.window.backgroundColor = [SKHighlightOverlay overlayColor]; + [_overlayView addGestureRecognizer:_gestureRecognizer]; +#endif } return self; @@ -48,10 +70,20 @@ return; } +#if TARGET_OS_IPHONE [_overlayWindow setFrame:frame]; [_overlayWindow makeKeyAndVisible]; _overlayWindow.hidden = NO; [[UIApplication sharedApplication].delegate.window addSubview:_overlayWindow]; + +#elif TARGET_OS_OSX + _overlayView.hidden = NO; + [[NSApplication sharedApplication].mainWindow.contentView + addSubview:_overlayView]; + _overlayView.frame = frame; + _overlayView.needsDisplay = YES; +#endif + _isMounted = YES; } @@ -61,8 +93,15 @@ } [_receiversWaitingForInput removeAllObjects]; + +#if TARGET_OS_IPHONE [_overlayWindow removeFromSuperview]; _overlayWindow.hidden = YES; +#elif TARGET_OS_OSX + [_overlayView removeFromSuperview]; + _overlayView.hidden = YES; +#endif + _isMounted = NO; } @@ -70,6 +109,7 @@ [_receiversWaitingForInput addObject:receiver]; } +#if TARGET_OS_IPHONE - (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch { if ([_receiversWaitingForInput count] == 0) { @@ -87,6 +127,25 @@ return NO; } +#elif TARGET_OS_OSX +- (BOOL)gestureRecognizer:(NSGestureRecognizer*)gestureRecognizer + shouldReceiveTouch:(NSTouch*)touch { + if ([_receiversWaitingForInput count] == 0) { + return YES; + } + if (@available(macOS 10.12.2, *)) { + CGPoint touchPoint = [touch locationInView:_overlayView]; + for (SKTapReceiver recv in _receiversWaitingForInput) { + recv(touchPoint); + } + } + + [_receiversWaitingForInput removeAllObjects]; + + return NO; +} +#endif + @end #endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTouch.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTouch.h index 21f677b70..e7ac0b18f 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTouch.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKTouch.h @@ -5,8 +5,14 @@ * LICENSE file in the root directory of this source tree. */ -#import +#import +#if TARGET_OS_IPHONE #import +#elif TARGET_OS_OSX +#import +#endif + +#import typedef void (^SKTouchFinishDelegate)(id currentNode); typedef void (^SKProcessFinishDelegate)(NSDictionary* tree); diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UICollectionView+SKInvalidation.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UICollectionView+SKInvalidation.h index c000864ff..6beb5209e 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UICollectionView+SKInvalidation.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UICollectionView+SKInvalidation.h @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +#if TARGET_OS_IPHONE + #import #import @@ -15,3 +17,5 @@ FB_LINK_REQUIRE_CATEGORY(UICollectionView_SKInvalidation) + (void)enableInvalidations; @end + +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UICollectionView+SKInvalidation.mm b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UICollectionView+SKInvalidation.mm index 4c39ccb62..afe09fe1b 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UICollectionView+SKInvalidation.mm +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UICollectionView+SKInvalidation.mm @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +#if TARGET_OS_IPHONE #if FB_SONARKIT_ENABLED #import "UICollectionView+SKInvalidation.h" @@ -36,4 +37,5 @@ FB_LINKABLE(UICollectionView_SKInvalidation) @end +#endif // FB_SONARKIT_ENABLED #endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIColor+SKSonarValueCoder.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIColor+SKSonarValueCoder.h index ce237354c..3e56fac4c 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIColor+SKSonarValueCoder.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIColor+SKSonarValueCoder.h @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +#if TARGET_OS_IPHONE + #import #import @@ -15,3 +17,5 @@ FB_LINK_REQUIRE_CATEGORY(UIColor_SonarValueCoder) @interface UIColor (SonarValueCoder) @end + +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIColor+SKSonarValueCoder.mm b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIColor+SKSonarValueCoder.mm index de5fffaf2..177787b53 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIColor+SKSonarValueCoder.mm +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIColor+SKSonarValueCoder.mm @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +#if TARGET_OS_IPHONE #if FB_SONARKIT_ENABLED #import "UIColor+SKSonarValueCoder.h" @@ -62,4 +63,5 @@ FB_LINKABLE(UIColor_SonarValueCoder) @end +#endif // FB_SONARKIT_ENABLED #endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIView+SKInvalidation.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIView+SKInvalidation.h index 4697183ae..84343adea 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIView+SKInvalidation.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIView+SKInvalidation.h @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +#if TARGET_OS_IPHONE + #import FB_LINK_REQUIRE_CATEGORY(UIView_SKInvalidation) @@ -13,3 +15,5 @@ FB_LINK_REQUIRE_CATEGORY(UIView_SKInvalidation) + (void)enableInvalidation; @end + +#endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIView+SKInvalidation.mm b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIView+SKInvalidation.mm index d9e0f9989..34e759c15 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIView+SKInvalidation.mm +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/UIView+SKInvalidation.mm @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +#if TARGET_OS_IPHONE #if FB_SONARKIT_ENABLED #import @@ -115,4 +116,5 @@ FB_LINKABLE(UIView_SKInvalidation) @end +#endif // FB_SONARKIT_ENABLED #endif diff --git a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/utils/SKHiddenWindow.h b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/utils/SKHiddenWindow.h index 877275dc1..1a6851d07 100644 --- a/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/utils/SKHiddenWindow.h +++ b/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/utils/SKHiddenWindow.h @@ -5,7 +5,23 @@ * LICENSE file in the root directory of this source tree. */ +#import + +#if TARGET_OS_IPHONE #import +#elif TARGET_OS_OSX +#import +#import +#endif + +#if TARGET_OS_IPHONE @interface SKHiddenWindow : UIWindow @end + +#elif TARGET_OS_OSX + +@interface SKHiddenWindow : NSView +@end + +#endif