(client_ios) Update Descriptors

Summary: Similar to D21040424 and D21040426.

Reviewed By: Andrey-Mishanin

Differential Revision: D21335955

fbshipit-source-id: 5e8326915e54647c77fb241ad2ed4eaa55d0cfe2
This commit is contained in:
Chaiwat Ekkaewnumchai
2020-05-07 06:16:12 -07:00
committed by Facebook GitHub Bot
parent 367dbeee8c
commit f4c209bc1c
5 changed files with 23 additions and 11 deletions

View File

@@ -184,16 +184,17 @@ static std::vector<std::pair<NSString*, SKSubDescriptor>>& subDescriptors() {
return YES; return YES;
}, },
[&](std::vector<SKComponentLayoutWrapper*> children) -> BOOL { [&](std::vector<SKComponentLayoutWrapper*> children) -> BOOL {
BOOL continueTouch = NO;
for (auto it = children.rbegin(); it != children.rend(); ++it) { for (auto it = children.rbegin(); it != children.rend(); ++it) {
SKComponentLayoutWrapper* wrapper = *it; SKComponentLayoutWrapper* wrapper = *it;
CGRect frame = {.origin = wrapper.position, .size = wrapper.size}; CGRect frame = {.origin = wrapper.position, .size = wrapper.size};
if ([touch containedIn:frame]) { if ([touch containedIn:frame]) {
NSUInteger index = std::distance(children.begin(), it.base()) - 1; NSUInteger index = std::distance(children.begin(), it.base()) - 1;
[touch continueWithChildIndex:index withOffset:wrapper.position]; [touch continueWithChildIndex:index withOffset:wrapper.position];
return YES; continueTouch = YES;
} }
} }
return NO; return continueTouch;
}); });
if (!didContinueTouch) { if (!didContinueTouch) {
[touch finish]; [touch finish];

View File

@@ -72,16 +72,19 @@
return; // -children will return garbage if invoked on nil return; // -children will return garbage if invoked on nil
} }
const auto& children = node.children; const auto& children = node.children;
bool finish = true;
for (auto it = children.rbegin(); it != children.rend(); ++it) { for (auto it = children.rbegin(); it != children.rend(); ++it) {
SKComponentLayoutWrapper* child = *it; SKComponentLayoutWrapper* child = *it;
CGRect frame = {.origin = child.position, .size = child.size}; CGRect frame = {.origin = child.position, .size = child.size};
if ([touch containedIn:frame]) { if ([touch containedIn:frame]) {
NSUInteger index = std::distance(children.begin(), it.base()) - 1; NSUInteger index = std::distance(children.begin(), it.base()) - 1;
[touch continueWithChildIndex:index withOffset:child.position]; [touch continueWithChildIndex:index withOffset:child.position];
return; finish = false;
} }
} }
if (finish) {
[touch finish]; [touch finish];
}
} }
- (BOOL)matchesQuery:(NSString*)query forNode:(SKComponentMountedView*)node { - (BOOL)matchesQuery:(NSString*)query forNode:(SKComponentMountedView*)node {

View File

@@ -34,6 +34,7 @@
} }
- (void)hitTest:(SKTouch*)touch forNode:(UIApplication*)node { - (void)hitTest:(SKTouch*)touch forNode:(UIApplication*)node {
bool finish = true;
for (NSInteger index = [self childCountForNode:node] - 1; index >= 0; for (NSInteger index = [self childCountForNode:node] - 1; index >= 0;
index--) { index--) {
UIWindow* child = [self childForNode:node atIndex:index]; UIWindow* child = [self childForNode:node atIndex:index];
@@ -43,11 +44,12 @@
if ([touch containedIn:child.frame]) { if ([touch containedIn:child.frame]) {
[touch continueWithChildIndex:index withOffset:child.frame.origin]; [touch continueWithChildIndex:index withOffset:child.frame.origin];
return; finish = false;
} }
} }
if (finish) {
[touch finish]; [touch finish];
}
} }
- (NSArray<UIWindow*>*)visibleChildrenForNode:(UIApplication*)node { - (NSArray<UIWindow*>*)visibleChildrenForNode:(UIApplication*)node {

View File

@@ -49,6 +49,7 @@
} }
- (void)hitTest:(SKTouch*)touch forNode:(UIScrollView*)node { - (void)hitTest:(SKTouch*)touch forNode:(UIScrollView*)node {
bool finish = true;
for (NSInteger index = [self childCountForNode:node] - 1; index >= 0; for (NSInteger index = [self childCountForNode:node] - 1; index >= 0;
index--) { index--) {
id<NSObject> childNode = [self childForNode:node atIndex:index]; id<NSObject> childNode = [self childForNode:node atIndex:index];
@@ -75,11 +76,13 @@
if ([touch containedIn:frame]) { if ([touch containedIn:frame]) {
[touch continueWithChildIndex:index withOffset:frame.origin]; [touch continueWithChildIndex:index withOffset:frame.origin];
return; finish = false;
} }
} }
if (finish) {
[touch finish]; [touch finish];
}
} }
@end @end

View File

@@ -497,6 +497,7 @@ return dataMutations;
} }
- (void)hitTest:(SKTouch*)touch forNode:(UIView*)node { - (void)hitTest:(SKTouch*)touch forNode:(UIView*)node {
bool finish = true;
for (NSInteger index = [self childCountForNode:node] - 1; index >= 0; for (NSInteger index = [self childCountForNode:node] - 1; index >= 0;
index--) { index--) {
id<NSObject> childNode = [self childForNode:node atIndex:index]; id<NSObject> childNode = [self childForNode:node atIndex:index];
@@ -518,11 +519,13 @@ return dataMutations;
if ([touch containedIn:viewForNode.frame]) { if ([touch containedIn:viewForNode.frame]) {
[touch continueWithChildIndex:index withOffset:viewForNode.frame.origin]; [touch continueWithChildIndex:index withOffset:viewForNode.frame.origin];
return; finish = false;
} }
} }
if (finish) {
[touch finish]; [touch finish];
}
} }
static void initEnumDictionaries() { static void initEnumDictionaries() {