Revert D27332601: add macOS descriptors for layout plugin
Differential Revision:
D27332601 (ed69c4f16a)
Original commit changeset: 35c93cf715f0
fbshipit-source-id: 5dd601f1ec88d890886272d829f3ce6da3e72259
This commit is contained in:
committed by
Facebook GitHub Bot
parent
ed69c4f16a
commit
2bae11e132
@@ -71,11 +71,7 @@ NSObject* flattenLayoutEditorMessage(NSObject* field);
|
|||||||
|
|
||||||
if (!_rootNode) {
|
if (!_rootNode) {
|
||||||
// TODO: T61384369 get rid off this if condition.
|
// TODO: T61384369 get rid off this if condition.
|
||||||
#if TARGET_OS_IPHONE
|
|
||||||
_rootNode = [UIApplication sharedApplication];
|
_rootNode = [UIApplication sharedApplication];
|
||||||
#elif TARGET_OS_OSX
|
|
||||||
_rootNode = [NSApplication sharedApplication];
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[SKInvalidation enableInvalidations];
|
[SKInvalidation enableInvalidations];
|
||||||
@@ -370,11 +366,7 @@ NSObject* flattenLayoutEditorMessage(NSObject* field) {
|
|||||||
- (void)onCallSetSearchActive:(BOOL)active
|
- (void)onCallSetSearchActive:(BOOL)active
|
||||||
withConnection:(id<FlipperConnection>)connection {
|
withConnection:(id<FlipperConnection>)connection {
|
||||||
if (active) {
|
if (active) {
|
||||||
#if TARGET_OS_IPHONE
|
|
||||||
[_tapListener mountWithFrame:[[UIScreen mainScreen] bounds]];
|
[_tapListener mountWithFrame:[[UIScreen mainScreen] bounds]];
|
||||||
#elif TARGET_OS_OSX
|
|
||||||
[_tapListener mountWithFrame:NSRectToCGRect([NSScreen mainScreen].frame)];
|
|
||||||
#endif
|
|
||||||
__block id<NSObject> rootNode = _rootNode;
|
__block id<NSObject> rootNode = _rootNode;
|
||||||
|
|
||||||
[_tapListener listenForTapWithBlock:^(CGPoint touchPoint) {
|
[_tapListener listenForTapWithBlock:^(CGPoint touchPoint) {
|
||||||
|
|||||||
@@ -9,25 +9,12 @@
|
|||||||
|
|
||||||
#import "SKDescriptorMapper.h"
|
#import "SKDescriptorMapper.h"
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutIOSDescriptors/SKApplicationDescriptor.h>
|
#import <FlipperKitLayoutIOSDescriptors/SKApplicationDescriptor.h>
|
||||||
#import <FlipperKitLayoutIOSDescriptors/SKButtonDescriptor.h>
|
#import <FlipperKitLayoutIOSDescriptors/SKButtonDescriptor.h>
|
||||||
#import <FlipperKitLayoutIOSDescriptors/SKScrollViewDescriptor.h>
|
#import <FlipperKitLayoutIOSDescriptors/SKScrollViewDescriptor.h>
|
||||||
#import <FlipperKitLayoutIOSDescriptors/SKViewControllerDescriptor.h>
|
#import <FlipperKitLayoutIOSDescriptors/SKViewControllerDescriptor.h>
|
||||||
#import <FlipperKitLayoutIOSDescriptors/SKViewDescriptor.h>
|
#import <FlipperKitLayoutIOSDescriptors/SKViewDescriptor.h>
|
||||||
|
|
||||||
#elif TARGET_OS_OSX
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutMacOSDescriptors/SKNSApplicationDescriptor.h>
|
|
||||||
#import <FlipperKitLayoutMacOSDescriptors/SKNSButtonDescriptor.h>
|
|
||||||
#import <FlipperKitLayoutMacOSDescriptors/SKNSScrollViewDescriptor.h>
|
|
||||||
#import <FlipperKitLayoutMacOSDescriptors/SKNSViewControllerDescriptor.h>
|
|
||||||
#import <FlipperKitLayoutMacOSDescriptors/SKNSViewDescriptor.h>
|
|
||||||
#import <FlipperKitLayoutMacOSDescriptors/SKNSWindowDescriptor.h>
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@implementation SKDescriptorMapper {
|
@implementation SKDescriptorMapper {
|
||||||
NSMutableDictionary<NSString*, SKNodeDescriptor*>* _descriptors;
|
NSMutableDictionary<NSString*, SKNodeDescriptor*>* _descriptors;
|
||||||
}
|
}
|
||||||
@@ -36,7 +23,6 @@
|
|||||||
if (self = [super init]) {
|
if (self = [super init]) {
|
||||||
_descriptors = [NSMutableDictionary new];
|
_descriptors = [NSMutableDictionary new];
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE
|
|
||||||
[self registerDescriptor:[[SKApplicationDescriptor alloc]
|
[self registerDescriptor:[[SKApplicationDescriptor alloc]
|
||||||
initWithDescriptorMapper:self]
|
initWithDescriptorMapper:self]
|
||||||
forClass:[UIApplication class]];
|
forClass:[UIApplication class]];
|
||||||
@@ -52,27 +38,6 @@
|
|||||||
[self registerDescriptor:[[SKViewDescriptor alloc]
|
[self registerDescriptor:[[SKViewDescriptor alloc]
|
||||||
initWithDescriptorMapper:self]
|
initWithDescriptorMapper:self]
|
||||||
forClass:[UIView class]];
|
forClass:[UIView class]];
|
||||||
|
|
||||||
#elif TARGET_OS_OSX
|
|
||||||
[self registerDescriptor:[[SKNSApplicationDescriptor alloc]
|
|
||||||
initWithDescriptorMapper:self]
|
|
||||||
forClass:[NSApplication class]];
|
|
||||||
[self registerDescriptor:[[SKNSViewControllerDescriptor alloc]
|
|
||||||
initWithDescriptorMapper:self]
|
|
||||||
forClass:[NSViewController class]];
|
|
||||||
[self registerDescriptor:[[SKNSScrollViewDescriptor alloc]
|
|
||||||
initWithDescriptorMapper:self]
|
|
||||||
forClass:[NSScrollView class]];
|
|
||||||
[self registerDescriptor:[[SKNSButtonDescriptor alloc]
|
|
||||||
initWithDescriptorMapper:self]
|
|
||||||
forClass:[NSButton class]];
|
|
||||||
[self registerDescriptor:[[SKNSViewDescriptor alloc]
|
|
||||||
initWithDescriptorMapper:self]
|
|
||||||
forClass:[NSView class]];
|
|
||||||
[self registerDescriptor:[[SKNSWindowDescriptor alloc]
|
|
||||||
initWithDescriptorMapper:self]
|
|
||||||
forClass:[NSWindow class]];
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/SKNodeDescriptor.h>
|
|
||||||
|
|
||||||
@class SKDescriptorMapper;
|
|
||||||
|
|
||||||
@interface SKNSApplicationDescriptor : SKNodeDescriptor<NSApplication*>
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FB_SONARKIT_ENABLED
|
|
||||||
|
|
||||||
#import "SKNSApplicationDescriptor.h"
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/SKHiddenWindow.h>
|
|
||||||
#import <objc/runtime.h>
|
|
||||||
|
|
||||||
@implementation SKNSApplicationDescriptor
|
|
||||||
|
|
||||||
- (NSString*)identifierForNode:(NSApplication*)node {
|
|
||||||
return [NSString stringWithFormat:@"%p", node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)childCountForNode:(NSApplication*)node {
|
|
||||||
return [[self visibleChildrenForNode:node] count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)childForNode:(NSApplication*)node atIndex:(NSUInteger)index {
|
|
||||||
return [self visibleChildrenForNode:node][index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setHighlighted:(BOOL)highlighted forNode:(NSApplication*)node {
|
|
||||||
SKNodeDescriptor* windowDescriptor =
|
|
||||||
[self descriptorForClass:[NSWindow class]];
|
|
||||||
[windowDescriptor setHighlighted:highlighted forNode:[node keyWindow]];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)hitTest:(SKTouch*)touch forNode:(NSApplication*)node {
|
|
||||||
bool finish = true;
|
|
||||||
for (NSInteger index = [self childCountForNode:node] - 1; index >= 0;
|
|
||||||
index--) {
|
|
||||||
NSWindow* child = [self childForNode:node atIndex:index];
|
|
||||||
|
|
||||||
if ([touch containedIn:child.frame]) {
|
|
||||||
[touch continueWithChildIndex:index withOffset:child.frame.origin];
|
|
||||||
finish = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (finish) {
|
|
||||||
[touch finish];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<NSWindow*>*)visibleChildrenForNode:(NSApplication*)node {
|
|
||||||
NSMutableArray<NSWindow*>* children = [NSMutableArray new];
|
|
||||||
for (NSWindow* window in node.windows) {
|
|
||||||
[children addObject:window];
|
|
||||||
}
|
|
||||||
return children;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/SKNodeDescriptor.h>
|
|
||||||
|
|
||||||
@class NSButton;
|
|
||||||
@class SKDescriptorMapper;
|
|
||||||
|
|
||||||
@interface SKNSButtonDescriptor : SKNodeDescriptor<NSButton*>
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FB_SONARKIT_ENABLED
|
|
||||||
|
|
||||||
#import "SKNSButtonDescriptor.h"
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.h>
|
|
||||||
#import <FlipperKitLayoutHelpers/SKObject.h>
|
|
||||||
|
|
||||||
@implementation SKNSButtonDescriptor
|
|
||||||
|
|
||||||
- (NSString*)identifierForNode:(NSButton*)node {
|
|
||||||
return [NSString stringWithFormat:@"%p", node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)childCountForNode:(NSButton*)node {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)childForNode:(NSButton*)node atIndex:(NSUInteger)index {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<SKNamed<NSDictionary*>*>*)dataForNode:(NSButton*)node {
|
|
||||||
SKNodeDescriptor* viewDescriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
auto* viewData = [viewDescriptor dataForNode:node];
|
|
||||||
|
|
||||||
NSMutableArray* data = [NSMutableArray new];
|
|
||||||
[data addObjectsFromArray:viewData];
|
|
||||||
[data addObject:[SKNamed
|
|
||||||
newWithName:@"NSButton"
|
|
||||||
withValue:@{
|
|
||||||
@"enabled" : SKMutableObject(@(node.enabled)),
|
|
||||||
@"highlighted" : SKMutableObject(@(node.highlighted)),
|
|
||||||
@"title" : SKMutableObject(node.title),
|
|
||||||
}]];
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSDictionary<NSString*, SKNodeUpdateData>*)dataMutationsForNode:
|
|
||||||
(NSButton*)node {
|
|
||||||
NSDictionary* buttonMutations = @{};
|
|
||||||
|
|
||||||
SKNodeDescriptor* viewDescriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
NSDictionary* viewMutations = [viewDescriptor dataMutationsForNode:node];
|
|
||||||
|
|
||||||
NSMutableDictionary* mutations = [NSMutableDictionary new];
|
|
||||||
[mutations addEntriesFromDictionary:buttonMutations];
|
|
||||||
[mutations addEntriesFromDictionary:viewMutations];
|
|
||||||
|
|
||||||
return mutations;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<SKNamed<NSString*>*>*)attributesForNode:(NSScrollView*)node {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
return [descriptor attributesForNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setHighlighted:(BOOL)highlighted forNode:(NSButton*)node {
|
|
||||||
SKNodeDescriptor* viewDescriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
[viewDescriptor setHighlighted:highlighted forNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)hitTest:(SKTouch*)touch forNode:(NSButton*)node {
|
|
||||||
[touch finish];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/SKNodeDescriptor.h>
|
|
||||||
|
|
||||||
@class SKDescriptorMapper;
|
|
||||||
|
|
||||||
@interface SKNSScrollViewDescriptor : SKNodeDescriptor<NSScrollView*>
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FB_SONARKIT_ENABLED
|
|
||||||
|
|
||||||
#import "SKNSScrollViewDescriptor.h"
|
|
||||||
|
|
||||||
@implementation SKNSScrollViewDescriptor
|
|
||||||
|
|
||||||
- (NSString*)identifierForNode:(NSScrollView*)node {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
return [descriptor identifierForNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)childCountForNode:(NSScrollView*)node {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
return [descriptor childCountForNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)childForNode:(NSScrollView*)node atIndex:(NSUInteger)index {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
return [descriptor childForNode:node atIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)dataForNode:(NSScrollView*)node {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
return [descriptor dataForNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)dataMutationsForNode:(NSScrollView*)node {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
return [descriptor dataMutationsForNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<SKNamed<NSString*>*>*)attributesForNode:(NSScrollView*)node {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
return [descriptor attributesForNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setHighlighted:(BOOL)highlighted forNode:(NSScrollView*)node {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
[descriptor setHighlighted:highlighted forNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)hitTest:(SKTouch*)touch forNode:(NSScrollView*)node {
|
|
||||||
bool finish = true;
|
|
||||||
for (NSInteger index = [self childCountForNode:node] - 1; index >= 0;
|
|
||||||
index--) {
|
|
||||||
id<NSObject> childNode = [self childForNode:node atIndex:index];
|
|
||||||
CGRect frame;
|
|
||||||
|
|
||||||
if ([childNode isKindOfClass:[NSViewController class]]) {
|
|
||||||
NSViewController* child = (NSViewController*)childNode;
|
|
||||||
if (child.view.isHidden) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
frame = child.view.frame;
|
|
||||||
} else {
|
|
||||||
NSView* child = (NSView*)childNode;
|
|
||||||
if (child.isHidden) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
frame = child.frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
frame.origin.x -= node.documentVisibleRect.origin.x;
|
|
||||||
frame.origin.y -= node.documentVisibleRect.origin.y;
|
|
||||||
|
|
||||||
if ([touch containedIn:frame]) {
|
|
||||||
[touch continueWithChildIndex:index withOffset:frame.origin];
|
|
||||||
finish = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (finish) {
|
|
||||||
[touch finish];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FB_SONARKIT_ENABLED
|
|
||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/SKNodeDescriptor.h>
|
|
||||||
|
|
||||||
@class SKDescriptorMapper;
|
|
||||||
|
|
||||||
@interface SKNSViewControllerDescriptor : SKNodeDescriptor<NSViewController*>
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FB_SONARKIT_ENABLED
|
|
||||||
|
|
||||||
#import "SKNSViewControllerDescriptor.h"
|
|
||||||
|
|
||||||
@implementation SKNSViewControllerDescriptor
|
|
||||||
|
|
||||||
- (NSString*)identifierForNode:(NSViewController*)node {
|
|
||||||
return [NSString stringWithFormat:@"%p", node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)childCountForNode:(NSViewController*)node {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)childForNode:(NSViewController*)node atIndex:(NSUInteger)index {
|
|
||||||
return node.view;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setHighlightedForNode:(NSViewController*)node {
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<SKNamed<NSString*>*>*)attributesForNode:(NSViewController*)node {
|
|
||||||
return @[ [SKNamed newWithName:@"addr"
|
|
||||||
withValue:[NSString stringWithFormat:@"%p", node]] ];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setHighlighted:(BOOL)highlighted forNode:(NSViewController*)node {
|
|
||||||
SKNodeDescriptor* descriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
[descriptor setHighlighted:highlighted forNode:node.view];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)hitTest:(SKTouch*)touch forNode:(NSViewController*)node {
|
|
||||||
[touch continueWithChildIndex:0 withOffset:(CGPoint){0, 0}];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FB_SONARKIT_ENABLED
|
|
||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/SKNodeDescriptor.h>
|
|
||||||
|
|
||||||
@class SKDescriptorMapper;
|
|
||||||
|
|
||||||
@interface SKNSViewDescriptor : SKNodeDescriptor<NSView*>
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,221 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FB_SONARKIT_ENABLED
|
|
||||||
|
|
||||||
#import "SKNSViewDescriptor.h"
|
|
||||||
|
|
||||||
#import <FlipperKitHighlightOverlay/SKHighlightOverlay.h>
|
|
||||||
#import <FlipperKitLayoutHelpers/FlipperKitLayoutDescriptorMapperProtocol.h>
|
|
||||||
#import <FlipperKitLayoutHelpers/NSColor+SKSonarValueCoder.h>
|
|
||||||
#import <FlipperKitLayoutHelpers/SKHiddenWindow.h>
|
|
||||||
#import <FlipperKitLayoutHelpers/SKNamed.h>
|
|
||||||
#import <FlipperKitLayoutHelpers/SKObject.h>
|
|
||||||
|
|
||||||
@implementation SKNSViewDescriptor
|
|
||||||
|
|
||||||
- (instancetype)initWithDescriptorMapper:
|
|
||||||
(id<SKDescriptorMapperProtocol>)mapper {
|
|
||||||
if (self = [super initWithDescriptorMapper:mapper]) {
|
|
||||||
initEnumDictionaries();
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString*)identifierForNode:(NSView*)node {
|
|
||||||
return [NSString stringWithFormat:@"%p", node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)childCountForNode:(NSView*)node {
|
|
||||||
return [[self validChildrenForNode:node] count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)childForNode:(NSView*)node atIndex:(NSUInteger)index {
|
|
||||||
return [[self validChildrenForNode:node] objectAtIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray*)validChildrenForNode:(NSView*)node {
|
|
||||||
NSMutableArray* validChildren = [NSMutableArray new];
|
|
||||||
|
|
||||||
// Use NSViewControllers for children which responds to a different
|
|
||||||
// viewController than their parent
|
|
||||||
for (NSView* child in node.subviews) {
|
|
||||||
BOOL responderIsNSViewController =
|
|
||||||
[child.nextResponder isKindOfClass:[NSViewController class]];
|
|
||||||
|
|
||||||
if (!child.isHidden) {
|
|
||||||
if (responderIsNSViewController &&
|
|
||||||
child.nextResponder != node.nextResponder) {
|
|
||||||
[validChildren addObject:child.nextResponder];
|
|
||||||
} else {
|
|
||||||
[validChildren addObject:child];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return validChildren;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<SKNamed<NSDictionary*>*>*)dataForNode:(NSView*)node {
|
|
||||||
return [NSArray
|
|
||||||
arrayWithObjects:
|
|
||||||
[SKNamed newWithName:@"NSView"
|
|
||||||
withValue:@{
|
|
||||||
@"frame" : SKMutableObject(node.frame),
|
|
||||||
@"bounds" : SKObject(node.bounds),
|
|
||||||
@"alphaValue" : SKMutableObject(@(node.alphaValue)),
|
|
||||||
@"tag" : @(node.tag),
|
|
||||||
}],
|
|
||||||
[SKNamed
|
|
||||||
newWithName:@"CALayer"
|
|
||||||
withValue:@{
|
|
||||||
@"shadowColor" : SKMutableObject(
|
|
||||||
node.layer.shadowColor
|
|
||||||
? [NSColor colorWithCGColor:node.layer.shadowColor]
|
|
||||||
: nil),
|
|
||||||
@"shadowOpacity" :
|
|
||||||
SKMutableObject(@(node.layer.shadowOpacity)),
|
|
||||||
@"shadowRadius" : SKMutableObject(@(node.layer.shadowRadius)),
|
|
||||||
@"shadowOffset" : SKMutableObject(node.layer.shadowOffset),
|
|
||||||
@"backgroundColor" : SKMutableObject(
|
|
||||||
node.layer.backgroundColor
|
|
||||||
? [NSColor
|
|
||||||
colorWithCGColor:node.layer.backgroundColor]
|
|
||||||
: nil),
|
|
||||||
@"borderColor" : SKMutableObject(
|
|
||||||
node.layer.borderColor
|
|
||||||
? [NSColor colorWithCGColor:node.layer.borderColor]
|
|
||||||
: nil),
|
|
||||||
@"borderWidth" : SKMutableObject(@(node.layer.borderWidth)),
|
|
||||||
@"cornerRadius" : SKMutableObject(@(node.layer.cornerRadius)),
|
|
||||||
@"masksToBounds" :
|
|
||||||
SKMutableObject(@(node.layer.masksToBounds)),
|
|
||||||
}],
|
|
||||||
nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSDictionary<NSString*, SKNodeUpdateData>*)dataMutationsForNode:
|
|
||||||
(NSView*)node {
|
|
||||||
NSDictionary<NSString*, SKNodeUpdateData>* dataMutations = @{
|
|
||||||
// NSView
|
|
||||||
@"NSView.alphaValue" : ^(NSNumber* value){
|
|
||||||
node.alphaValue = [value floatValue];
|
|
||||||
}
|
|
||||||
,
|
|
||||||
@"NSView.frame.origin.y": ^(NSNumber *value) {
|
|
||||||
CGRect frame = node.frame;
|
|
||||||
frame.origin.y = [value floatValue];
|
|
||||||
node.frame = frame;
|
|
||||||
},
|
|
||||||
@"NSView.frame.origin.x": ^(NSNumber *value) {
|
|
||||||
CGRect frame = node.frame;
|
|
||||||
frame.origin.x = [value floatValue];
|
|
||||||
node.frame = frame;
|
|
||||||
},
|
|
||||||
@"NSView.frame.size.width": ^(NSNumber *value) {
|
|
||||||
CGRect frame = node.frame;
|
|
||||||
frame.size.width = [value floatValue];
|
|
||||||
node.frame = frame;
|
|
||||||
},
|
|
||||||
@"NSView.frame.size.height": ^(NSNumber *value) {
|
|
||||||
CGRect frame = node.frame;
|
|
||||||
frame.size.width = [value floatValue];
|
|
||||||
node.frame = frame;
|
|
||||||
},
|
|
||||||
// CALayer
|
|
||||||
@"CALayer.shadowColor": ^(NSNumber *value) {
|
|
||||||
node.layer.shadowColor = [NSColor fromSonarValue:value].CGColor;
|
|
||||||
},
|
|
||||||
@"CALayer.shadowOpacity": ^(NSNumber *value) {
|
|
||||||
node.layer.shadowOpacity = [value floatValue];
|
|
||||||
},
|
|
||||||
@"CALayer.shadowRadius": ^(NSNumber *value) {
|
|
||||||
node.layer.shadowRadius = [value floatValue];
|
|
||||||
},
|
|
||||||
@"CALayer.shadowOffset.width": ^(NSNumber *value) {
|
|
||||||
CGSize offset = node.layer.shadowOffset;
|
|
||||||
offset.width = [value floatValue];
|
|
||||||
node.layer.shadowOffset = offset;
|
|
||||||
},
|
|
||||||
@"CALayer.shadowOffset.height": ^(NSNumber *value) {
|
|
||||||
CGSize offset = node.layer.shadowOffset;
|
|
||||||
offset.height = [value floatValue];
|
|
||||||
node.layer.shadowOffset = offset;
|
|
||||||
},
|
|
||||||
@"CALayer.backgroundColor": ^(NSNumber *value) {
|
|
||||||
node.layer.backgroundColor = [NSColor fromSonarValue:value].CGColor;
|
|
||||||
},
|
|
||||||
@"CALayer.borderColor": ^(NSNumber *value) {
|
|
||||||
node.layer.borderColor = [NSColor fromSonarValue:value].CGColor;
|
|
||||||
},
|
|
||||||
@"CALayer.borderWidth": ^(NSNumber *value) {
|
|
||||||
node.layer.borderWidth = [value floatValue];
|
|
||||||
},
|
|
||||||
@"CALayer.cornerRadius": ^(NSNumber *value) {
|
|
||||||
node.layer.cornerRadius = [value floatValue];
|
|
||||||
},
|
|
||||||
@"CALayer.masksToBounds": ^(NSNumber *value) {
|
|
||||||
node.layer.masksToBounds = [value boolValue];
|
|
||||||
},
|
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
return dataMutations;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<SKNamed<NSString*>*>*)attributesForNode:(NSView*)node {
|
|
||||||
return @[ [SKNamed newWithName:@"addr"
|
|
||||||
withValue:[NSString stringWithFormat:@"%p", node]] ];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setHighlighted:(BOOL)highlighted forNode:(NSView*)node {
|
|
||||||
SKHighlightOverlay* overlay = [SKHighlightOverlay sharedInstance];
|
|
||||||
if (highlighted == YES) {
|
|
||||||
[overlay mountInView:node withFrame:node.bounds];
|
|
||||||
} else {
|
|
||||||
[overlay unmount];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)hitTest:(SKTouch*)touch forNode:(NSView*)node {
|
|
||||||
bool finish = true;
|
|
||||||
for (NSInteger index = [self childCountForNode:node] - 1; index >= 0;
|
|
||||||
index--) {
|
|
||||||
id<NSObject> childNode = [self childForNode:node atIndex:index];
|
|
||||||
NSView* viewForNode = nil;
|
|
||||||
|
|
||||||
if ([childNode isKindOfClass:[NSViewController class]]) {
|
|
||||||
NSViewController* child = (NSViewController*)childNode;
|
|
||||||
viewForNode = child.view;
|
|
||||||
} else {
|
|
||||||
viewForNode = (NSView*)childNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (viewForNode.isHidden || viewForNode.alphaValue <= 0 ||
|
|
||||||
[[viewForNode class] isEqual:[SKHiddenWindow class]]) {
|
|
||||||
/*SKHiddenWindow is the pink overlay which is added in window to capture
|
|
||||||
the gestures.*/
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ([touch containedIn:viewForNode.frame]) {
|
|
||||||
[touch continueWithChildIndex:index withOffset:viewForNode.frame.origin];
|
|
||||||
finish = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (finish) {
|
|
||||||
[touch finish];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void initEnumDictionaries() {}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/SKNodeDescriptor.h>
|
|
||||||
|
|
||||||
@class SKDescriptorMapper;
|
|
||||||
|
|
||||||
@interface SKNSWindowDescriptor : SKNodeDescriptor<NSWindow*>
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 FB_SONARKIT_ENABLED
|
|
||||||
|
|
||||||
#import "SKNSWindowDescriptor.h"
|
|
||||||
|
|
||||||
#import <FlipperKitLayoutHelpers/SKHiddenWindow.h>
|
|
||||||
#import <objc/runtime.h>
|
|
||||||
|
|
||||||
@implementation SKNSWindowDescriptor
|
|
||||||
|
|
||||||
- (NSString*)identifierForNode:(NSWindow*)node {
|
|
||||||
return [NSString stringWithFormat:@"%p", node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)childCountForNode:(NSWindow*)node {
|
|
||||||
return [[self visibleChildrenForNode:node] count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)childForNode:(NSWindow*)node atIndex:(NSUInteger)index {
|
|
||||||
return [self visibleChildrenForNode:node][index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setHighlighted:(BOOL)highlighted forNode:(NSWindow*)node {
|
|
||||||
SKNodeDescriptor* viewDescriptor = [self descriptorForClass:[NSView class]];
|
|
||||||
[viewDescriptor setHighlighted:highlighted forNode:node.contentView];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)hitTest:(SKTouch*)touch forNode:(NSWindow*)node {
|
|
||||||
bool finish = true;
|
|
||||||
for (NSInteger index = [self childCountForNode:node] - 1; index >= 0;
|
|
||||||
index--) {
|
|
||||||
NSView* child = [self childForNode:node atIndex:index];
|
|
||||||
|
|
||||||
if ([touch containedIn:child.frame]) {
|
|
||||||
[touch continueWithChildIndex:index withOffset:child.frame.origin];
|
|
||||||
finish = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (finish) {
|
|
||||||
[touch finish];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray<NSView*>*)visibleChildrenForNode:(NSWindow*)node {
|
|
||||||
NSMutableArray<NSView*>* children = [NSMutableArray new];
|
|
||||||
[children addObject:node.contentView];
|
|
||||||
return children;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
Reference in New Issue
Block a user