From c5610ad1e8bf2aca0fee7bb732dbeaddbb50bb62 Mon Sep 17 00:00:00 2001 From: Zakk Date: Thu, 22 Mar 2018 09:23:01 -0400 Subject: [PATCH] Properly setup single-view mode when it is restored on startup --- .../CSLayoutCapturePlugin/CSLayoutCapture.h | 1 + .../CSLayoutCapturePlugin/CSLayoutCapture.m | 18 ++++++++++--- CocoaSplit/CSAnimationRunner/cocoasplit.js | 16 ++++++++++++ CocoaSplit/CaptureController.m | 26 +++++++++++-------- CocoaSplit/SourceLayout.m | 10 ++++++- CocoaSplit/Transitions/CSTransitionLayout.h | 3 +++ CocoaSplit/Transitions/CSTransitionLayout.m | 14 ++++++++-- 7 files changed, 71 insertions(+), 17 deletions(-) diff --git a/CapturePlugins/CSLayoutCapturePlugin/CSLayoutCapturePlugin/CSLayoutCapture.h b/CapturePlugins/CSLayoutCapturePlugin/CSLayoutCapturePlugin/CSLayoutCapture.h index 9421a7ad..e1e80be5 100644 --- a/CapturePlugins/CSLayoutCapturePlugin/CSLayoutCapturePlugin/CSLayoutCapture.h +++ b/CapturePlugins/CSLayoutCapturePlugin/CSLayoutCapturePlugin/CSLayoutCapture.h @@ -17,6 +17,7 @@ @property (assign) int canvas_height; @property (assign) bool isActive; @property (strong) NSArray *sourceList; +@property (strong) NSString *uuid; @end diff --git a/CapturePlugins/CSLayoutCapturePlugin/CSLayoutCapturePlugin/CSLayoutCapture.m b/CapturePlugins/CSLayoutCapturePlugin/CSLayoutCapturePlugin/CSLayoutCapture.m index c2be27cb..8410fecc 100644 --- a/CapturePlugins/CSLayoutCapturePlugin/CSLayoutCapturePlugin/CSLayoutCapture.m +++ b/CapturePlugins/CSLayoutCapturePlugin/CSLayoutCapturePlugin/CSLayoutCapture.m @@ -75,18 +75,30 @@ +(NSObject *)createSourceFromPasteboardItem:(NSPasteboardItem *)item { NSData *indexData = [item dataForType:@"cocoasplit.layout"]; - NSIndexSet *indexes = [NSKeyedUnarchiver unarchiveObjectWithData:indexData]; - + NSString *draggedUUID = [NSKeyedUnarchiver unarchiveObjectWithData:indexData]; + // NSIndexSet *indexes = [NSKeyedUnarchiver unarchiveObjectWithData:indexData]; + /* if (!indexes) { return nil; } NSInteger draggedItemIdx = [indexes firstIndex]; + */ NSObject *controller = [[CSPluginServices sharedPluginServices] captureController]; NSArray *layouts = [controller valueForKey:@"sourceLayouts"]; - NSObject *useLayout = [layouts objectAtIndex:draggedItemIdx]; + SourceLayoutHack *useLayout = nil; + for (SourceLayoutHack *tmp in layouts) + { + if ([tmp.uuid isEqualToString:draggedUUID]) + { + useLayout = tmp; + } + } + + //SourceLayoutHack *useLayout = [layouts objectAtIndex:draggedItemIdx]; + if (useLayout) { NSString *layoutName = [useLayout valueForKey:@"name"]; diff --git a/CocoaSplit/CSAnimationRunner/cocoasplit.js b/CocoaSplit/CSAnimationRunner/cocoasplit.js index 4d485ee0..6431a49f 100644 --- a/CocoaSplit/CSAnimationRunner/cocoasplit.js +++ b/CocoaSplit/CSAnimationRunner/cocoasplit.js @@ -187,6 +187,22 @@ var advanceBeginTime = function(duration) { } +var removeInputFromLayout = function(input, layout) { + var useLayout = layout; + if (!useLayout) + { + useLayout = getCurrentLayout(); + } + + var animInput = new CSAnimationInput(input); + animInput.hidden(false, 0.0).completion_handler = function(anim) { useLayout.deleteSource(input);}; +} +var addInputToLayout = function(input, layout) { + layout.addSourceForAnimation(input); + var animInput = new CSAnimationInput(input); + animInput.hidden(false, 0.0).completion_handler = function(anim) { layout.addSource(input);}; +} + var addDummyAnimation = function(duration, kwargs) { var keyname = "__DUMMY_ANIMATION__" + generateUUID(); diff --git a/CocoaSplit/CaptureController.m b/CocoaSplit/CaptureController.m index 4b8f53ce..54649ef5 100644 --- a/CocoaSplit/CaptureController.m +++ b/CocoaSplit/CaptureController.m @@ -2316,15 +2316,6 @@ */ } - if ([saveRoot objectForKey:@"stagingHidden"]) - { - BOOL stagingHidden = [[saveRoot valueForKeyPath:@"stagingHidden"] boolValue]; - self.stagingHidden = stagingHidden; - } - if (self.stagingHidden) - { - [self hideStagingView]; - } @@ -2364,6 +2355,15 @@ // [self.stagingLayout mergeSourceLayout:tmpLayout withLayer:nil]; } + if ([saveRoot objectForKey:@"stagingHidden"]) + { + BOOL stagingHidden = [[saveRoot valueForKeyPath:@"stagingHidden"] boolValue]; + self.stagingHidden = stagingHidden; + } + if (self.stagingHidden) + { + [self hideStagingView]; + } self.inputLibrary = [saveRoot valueForKey:@"inputLibrary"]; @@ -3631,6 +3631,8 @@ -(NSDragOperation)collectionView:(NSCollectionView *)collectionView validateDrop:(id)draggingInfo proposedIndex:(NSInteger *)proposedDropIndex dropOperation:(NSCollectionViewDropOperation *)proposedDropOperation { + return NSDragOperationMove; + NSPasteboard *pBoard = [draggingInfo draggingPasteboard]; NSData *indexSave = [pBoard dataForType:@"cocoasplit.layout"]; NSIndexSet *indexes = [NSKeyedUnarchiver unarchiveObjectWithData:indexSave]; @@ -3662,9 +3664,11 @@ -(BOOL)collectionView:(NSCollectionView *)collectionView writeItemsAtIndexes:(NSIndexSet *)indexes toPasteboard:(NSPasteboard *)pasteboard { - NSData *indexSave = [NSKeyedArchiver archivedDataWithRootObject:indexes]; + NSArray *layouts = [self.sourceLayouts objectsAtIndexes:indexes]; + SourceLayout *useLayout = layouts.firstObject; + NSData *uuidSave = [NSKeyedArchiver archivedDataWithRootObject:useLayout.uuid]; [pasteboard declareTypes:@[@"cocoasplit.layout"] owner:nil]; - [pasteboard setData:indexSave forType:@"cocoasplit.layout"]; + [pasteboard setData:uuidSave forType:@"cocoasplit.layout"]; return YES; } diff --git a/CocoaSplit/SourceLayout.m b/CocoaSplit/SourceLayout.m index 930ce8a7..0c4b9ddb 100644 --- a/CocoaSplit/SourceLayout.m +++ b/CocoaSplit/SourceLayout.m @@ -1489,7 +1489,14 @@ JS_EXPORT void JSSynchronousGarbageCollectForDebugging(JSContextRef ctx); [self addSourceToPresentation:toAdd]; toAdd.layer.hidden = YES; + toAdd.autoPlaceOnFrameUpdate = YES; + [CATransaction begin]; + [CATransaction setCompletionBlock:^{ + [toAdd buildLayerConstraints]; + }]; + [self.rootLayer addSublayer:toAdd.layer]; + [CATransaction commit]; } @@ -2286,7 +2293,8 @@ JS_EXPORT void JSSynchronousGarbageCollectForDebugging(JSContextRef ctx); { return; } - + NSLog(@"ADD SRC %@ %@", addSource, addSource.uuid); + _uuidMapPresentation[addSource.uuid] = addSource; @synchronized(self) { diff --git a/CocoaSplit/Transitions/CSTransitionLayout.h b/CocoaSplit/Transitions/CSTransitionLayout.h index 9eed9ea2..6a2a5af7 100644 --- a/CocoaSplit/Transitions/CSTransitionLayout.h +++ b/CocoaSplit/Transitions/CSTransitionLayout.h @@ -13,6 +13,8 @@ @property (strong) SourceLayout *layout; @property (assign) float holdDuration; @property (assign) bool doMerge; +@property (strong) InputSource *layoutSource; + @end @@ -25,6 +27,7 @@ @property (strong) SourceLayout *layout; @property (assign) float holdDuration; @property (assign) bool doMerge; +@property (strong) InputSource *layoutSource; @end diff --git a/CocoaSplit/Transitions/CSTransitionLayout.m b/CocoaSplit/Transitions/CSTransitionLayout.m index 412ba15b..e285084f 100644 --- a/CocoaSplit/Transitions/CSTransitionLayout.m +++ b/CocoaSplit/Transitions/CSTransitionLayout.m @@ -63,16 +63,26 @@ _savedTransition = CaptureController.sharedCaptureController.activeTransition; CaptureController.sharedCaptureController.activeTransition = nil; + NSPasteboardItem *layoutItem = [[NSPasteboardItem alloc] init]; + NSData *uuidData = [NSKeyedArchiver archivedDataWithRootObject:self.layout.uuid]; + [layoutItem setData:uuidData forType:@"cocoasplit.layout"]; + + self.layoutSource = [CaptureController.sharedCaptureController inputSourceForPasteboardItem:layoutItem]; + self.layoutSource.persistent = YES; + //-(NSObject*)inputSourceForPasteboardItem:(NSPasteboardItem *)item; + + NSLog(@"LAYOUT SRC %@", self.layoutSource.uuid); //[[CaptureController sharedCaptureController] switchToLayout:targetLayout]; - return @"switchToLayout(self.layout);waitAnimation(5);"; + return @"addInputToLayout(self.layoutSource, getCurrentLayout());waitAnimation(5);"; //return @"console.log('blah');beginAnimation();target_layout.replaceWithSourceLayoutUsingScripts(captureController.activeTransition.layout, useScripts);;waitAnimation(5);commitAnimation();console.log('done')"; } -(NSString *)postChangeAction:(SourceLayout *)targetLayout { + NSString *ret = @"waitAnimation(5);removeInputFromLayout(self.layoutSource)"; CaptureController.sharedCaptureController.activeTransition = _savedTransition; - return nil; + return ret; }