UI preview of selected element

Summary:
This is a prototype for view preview within Flipper for iOS (Android next).

If enabled, a preview of the selected element is rendered in the attribute inspector.

Changelog: Add view preview/snapshot for the Layout plugin on iOS.

Reviewed By: antonk52

Differential Revision: D34990372

fbshipit-source-id: 1984514fbf59041ad236008a8db10569c5fc5f94
This commit is contained in:
Lorenzo Blasa
2022-03-28 05:17:23 -07:00
committed by Facebook GitHub Bot
parent c662f3679d
commit aed7e7e6f2
10 changed files with 188 additions and 15 deletions

View File

@@ -155,6 +155,16 @@ NSObject* flattenLayoutEditorMessage(NSObject* field);
},
responder);
}];
[connection receive:@"getSnapshot"
withBlock:^(NSDictionary* params, id<FlipperResponder> responder) {
FlipperPerformBlockOnMainThread(
^{
[weakSelf onCallGetSnapshot:params[@"id"]
withResponder:responder];
},
responder);
}];
}
- (void)didDisconnect {
@@ -320,6 +330,46 @@ NSObject* flattenLayoutEditorMessage(NSObject* field) {
return;
}
- (void)onCallGetSnapshot:(NSString*)objectId
withResponder:(id<FlipperResponder>)responder {
if (objectId == nil || [objectId isKindOfClass:[NSNull class]]) {
[responder error:@{@"error" : @"unable to get snapshot for object"}];
return;
}
id object = [_trackedObjects objectForKey:objectId];
if (object == nil) {
[responder error:@{@"error" : @"unable to get snapshot for object"}];
return;
}
id lastHighlightedObject = nil;
id lastHighlightedDescriptor = nil;
if (_lastHighlightedNode != nil) {
lastHighlightedObject = [_trackedObjects objectForKey:_lastHighlightedNode];
if (lastHighlightedObject != nil) {
lastHighlightedDescriptor = [self->_descriptorMapper
descriptorForClass:[lastHighlightedObject class]];
[lastHighlightedDescriptor setHighlighted:NO
forNode:lastHighlightedObject];
}
}
SKNodeDescriptor* descriptor =
[self->_descriptorMapper descriptorForClass:[object class]];
UIImage* snapshot = [descriptor getSnapshot:YES forNode:object];
NSData* snapshotData = UIImagePNGRepresentation(snapshot);
NSString* snapshotBase64 = [snapshotData
base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
if (lastHighlightedDescriptor != nil) {
[lastHighlightedDescriptor setHighlighted:YES
forNode:lastHighlightedObject];
}
[responder success:@{@"snapshot" : snapshotBase64, @"id" : objectId}];
}
- (void)onCallSetHighlighted:(NSString*)objectId
withResponder:(id<FlipperResponder>)responder {
if (_lastHighlightedNode != nil) {