diff --git a/src/CurrentCallVC.h b/src/CurrentCallVC.h index d59c77f2f1f3e3f0b9f1ea48ad3b575f56424bf0..e1b4108e98065281bc679695fb259f75ea26df89 100644 --- a/src/CurrentCallVC.h +++ b/src/CurrentCallVC.h @@ -31,7 +31,6 @@ class Call; @interface CurrentCallVC : NSViewController <NSSplitViewDelegate, CallDelegate> { } - -(void) initFrame; -(void) showWithAnimation:(BOOL)animate; -(void) hideWithAnimation:(BOOL)animate; diff --git a/src/CurrentCallVC.mm b/src/CurrentCallVC.mm index 27b447786c75d166795cab4409d40206861a7a6e..279d65c766a8f5b4de0042a5a5081b1ff94994aa 100644 --- a/src/CurrentCallVC.mm +++ b/src/CurrentCallVC.mm @@ -387,6 +387,7 @@ &lrc::api::NewCallModel::remotePreviewStarted, [self](const std::string& callId, Video::Renderer* renderer) { NSLog(@"Video started!"); + [videoView setLayer:[[CallLayer alloc] init]]; [videoView setShouldAcceptInteractions:YES]; [self mouseIsMoving: NO]; [self connectVideoRenderer:renderer]; @@ -395,6 +396,7 @@ if (callModel->hasCall(callUid_)) { if (auto renderer = callModel->getRenderer(callUid_)) { QObject::disconnect(self.videoStarted); + [videoView setLayer:[[CallLayer alloc] init]]; [self connectVideoRenderer: renderer]; } } @@ -465,6 +467,8 @@ videoHolder.stopped = QObject::connect(renderer, &Video::Renderer::stopped, [=]() { + [videoView setLayer:[CALayer layer]]; + [videoView.layer setBackgroundColor:[[NSColor blackColor] CGColor]]; [self mouseIsMoving: YES]; [videoView setShouldAcceptInteractions:NO]; QObject::disconnect(videoHolder.frameUpdated); @@ -559,7 +563,8 @@ QObject::disconnect(previewHolder.started); QObject::disconnect(self.messageConnection); [previewView.layer setContents:nil]; - [(CallLayer*)videoView.layer setVideoRunning:NO]; + [videoView setLayer:[CALayer layer]]; + [videoView.layer setBackgroundColor:[[NSColor blackColor] CGColor]]; [_brokerPopoverVC performClose:self]; [self.addToContactPopover performClose:self]; diff --git a/src/RingWindowController.mm b/src/RingWindowController.mm index 260c9335b176dadb1007b915292e79ee02133c43..ffd3f32168955402bbec3fdaba82ca95b85350b9 100644 --- a/src/RingWindowController.mm +++ b/src/RingWindowController.mm @@ -56,6 +56,14 @@ #import "utils.h" #import "RingWizardWC.h" #import "AccountSettingsVC.h" +#import "views/CallLayer.h" + +typedef NS_ENUM(NSInteger, ViewState) { + SHOW_WELCOME_SCREEN = 0, + SHOW_CONVERSATION_SCREEN, + SHOW_CALL_SCREEN, + SHOW_SETTINGS_SCREEN, +}; @interface RingWindowController () <MigrateRingAccountsDelegate, NSToolbarDelegate> @@ -104,6 +112,58 @@ NSString* const kOpenAccountToolBarItemIdentifier = @"OpenAccountToolBarItemI return self; } +-(void)changeViewTo:(ViewState) state { + switch (state) { + case SHOW_WELCOME_SCREEN: + [self accountSettingsShouldOpen: NO]; + [conversationVC hideWithAnimation:false]; + [currentCallVC hideWithAnimation:false]; + [currentCallVC.view removeFromSuperview]; + [welcomeContainer setHidden: NO]; + [smartViewVC.view setHidden: NO]; + [settingsVC hide]; + break; + case SHOW_CONVERSATION_SCREEN: + [self accountSettingsShouldOpen: NO]; + [conversationVC showWithAnimation:false]; + [currentCallVC hideWithAnimation:false]; + [currentCallVC.view removeFromSuperview]; + [welcomeContainer setHidden: YES]; + [smartViewVC.view setHidden: NO]; + [settingsVC hide]; + break; + case SHOW_CALL_SCREEN: + [self accountSettingsShouldOpen: NO]; + if (![currentCallVC.view superview]) { + [callView addSubview:[currentCallVC view] positioned:NSWindowAbove relativeTo:nil]; + [currentCallVC initFrame]; + [currentCallVC showWithAnimation:false]; + [conversationVC hideWithAnimation:false]; + [welcomeContainer setHidden: YES]; + [smartViewVC.view setHidden: NO]; + [settingsVC hide]; + } + [currentCallVC showWithAnimation:false]; + break; + case SHOW_SETTINGS_SCREEN: + @try { + [self accountSettingsShouldOpen: YES]; + } + @catch (NSException *ex) { + return; + } + [welcomeContainer setHidden: YES]; + [currentCallVC hideWithAnimation:false]; + [currentCallVC.view removeFromSuperview]; + [conversationVC hideWithAnimation:false]; + [smartViewVC.view setHidden: YES]; + [settingsVC show]; + break; + default: + break; + } +} + - (void)windowDidLoad { [super windowDidLoad]; [self.window setMovableByWindowBackground:YES]; @@ -120,11 +180,9 @@ NSString* const kOpenAccountToolBarItemIdentifier = @"OpenAccountToolBarItemI [[conversationVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; [[settingsVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; - [callView addSubview:[currentCallVC view] positioned:NSWindowAbove relativeTo:nil]; [callView addSubview:[conversationVC view] positioned:NSWindowAbove relativeTo:nil]; [self.window.contentView addSubview:[settingsVC view] positioned:NSWindowAbove relativeTo:nil]; - [currentCallVC initFrame]; [conversationVC initFrame]; [settingsVC initFrame]; @try { @@ -173,10 +231,8 @@ NSString* const kOpenAccountToolBarItemIdentifier = @"OpenAccountToolBarItemI conversation:convInfo.uid account:accInfo]; [smartViewVC selectConversation: convInfo model:accInfo->conversationModel.get()]; - [currentCallVC showWithAnimation:false]; - [conversationVC hideWithAnimation:false]; - [self accountSettingsShouldOpen: NO]; - [welcomeContainer setHidden: YES]; + [self changeViewTo:SHOW_CALL_SCREEN]; + }); QObject::connect(self.behaviorController, @@ -193,10 +249,7 @@ NSString* const kOpenAccountToolBarItemIdentifier = @"OpenAccountToolBarItemI conversation:convInfo.uid account:accInfo]; [smartViewVC selectConversation: convInfo model:accInfo->conversationModel.get()]; - [currentCallVC showWithAnimation:false]; - [conversationVC hideWithAnimation:false]; - [self accountSettingsShouldOpen: NO]; - [welcomeContainer setHidden: YES]; + [self changeViewTo:SHOW_CALL_SCREEN]; }); QObject::connect(self.behaviorController, @@ -206,10 +259,7 @@ NSString* const kOpenAccountToolBarItemIdentifier = @"OpenAccountToolBarItemI auto& accInfo = self.accountModel->getAccountInfo(accountId); [conversationVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()]; [smartViewVC selectConversation: convInfo model:accInfo.conversationModel.get()]; - [conversationVC showWithAnimation:false]; - [currentCallVC hideWithAnimation:false]; - [self accountSettingsShouldOpen: NO]; - [welcomeContainer setHidden: YES]; + [self changeViewTo:SHOW_CONVERSATION_SCREEN]; }); } @@ -420,25 +470,17 @@ NSString* const kOpenAccountToolBarItemIdentifier = @"OpenAccountToolBarItemI - (void) selectAccount:(const lrc::api::account::Info&)accInfo currentRemoved:(BOOL) removed { // If the selected account has been changed, we close any open panel - if ([smartViewVC setConversationModel:accInfo.conversationModel.get()]) { - [currentCallVC hideWithAnimation:false]; - [conversationVC hideWithAnimation:false]; - } - + [smartViewVC setConversationModel:accInfo.conversationModel.get()]; // Welcome view informations are also updated [self updateRingID]; [settingsVC setSelectedAccount:accInfo.id]; - if (removed) { - [self accountSettingsShouldOpen: NO]; - } + [self changeViewTo: ([settingsVC.view isHidden] || removed) ? SHOW_WELCOME_SCREEN : SHOW_SETTINGS_SCREEN]; } -(void)allAccountsDeleted { [smartViewVC clearConversationModel]; - [currentCallVC hideWithAnimation:false]; - [conversationVC hideWithAnimation:false]; - [self accountSettingsShouldOpen: NO]; + [self changeViewTo:SHOW_WELCOME_SCREEN]; [self updateRingID]; } @@ -454,10 +496,7 @@ NSString* const kOpenAccountToolBarItemIdentifier = @"OpenAccountToolBarItemI } -(void) listTypeChanged { - [conversationVC hideWithAnimation:false]; - [currentCallVC hideWithAnimation:false]; - [self accountSettingsShouldOpen: NO]; - [welcomeContainer setHidden: NO]; + [self changeViewTo:SHOW_WELCOME_SCREEN]; } #pragma mark - NSToolbarDelegate @@ -493,38 +532,20 @@ NSString* const kOpenAccountToolBarItemIdentifier = @"OpenAccountToolBarItemI - (IBAction)openAccountSettings:(NSButton *)sender { - if(![settingsVC.view isHidden]) { - [self accountSettingsShouldOpen: NO]; - return; - } - [self accountSettingsShouldOpen: YES]; + [self changeViewTo: [settingsVC.view isHidden] ? SHOW_SETTINGS_SCREEN : SHOW_WELCOME_SCREEN]; } - (void) createNewAccount { - [self accountSettingsShouldOpen: NO]; - [currentCallVC hideWithAnimation:false]; - [conversationVC hideWithAnimation:false]; + [self changeViewTo:SHOW_WELCOME_SCREEN]; wizard = [[RingWizardWC alloc] initWithNibName:@"RingWizard" bundle: nil accountmodel: self.accountModel]; [wizard showChooseWithCancelButton: YES andAdvanced: YES]; [self.window beginSheet:wizard.window completionHandler:nil]; } -(void) accountSettingsShouldOpen: (BOOL) open { - [smartViewVC.view setHidden:open]; - [welcomeContainer setHidden: open]; + if (open) { - @try { - [settingsVC setSelectedAccount: [chooseAccountVC selectedAccount].id]; - } - @catch (NSException *ex) { - NSLog(@"Caught exception %@: %@", [ex name], [ex reason]); - return; - } - [currentCallVC hideWithAnimation:false]; - [conversationVC hideWithAnimation:false]; - [settingsVC show]; - } else { - [settingsVC hide]; + [settingsVC setSelectedAccount: [chooseAccountVC selectedAccount].id]; } NSToolbar *toolbar = self.window.toolbar; NSArray *settings = [toolbar items]; diff --git a/src/views/CallView.mm b/src/views/CallView.mm index e120a010ccd6c54468949b2bca102819297bc019..b9a3ffd6043ddc115dd7a2adcbca76bbedc021a5 100644 --- a/src/views/CallView.mm +++ b/src/views/CallView.mm @@ -51,6 +51,8 @@ { [self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; [self setWantsLayer:YES]; + [self setLayer:[CALayer layer]]; + [self.layer setBackgroundColor:[[NSColor blackColor] CGColor]]; } [self.window setAcceptsMouseMovedEvents:YES]; @@ -66,12 +68,6 @@ return self; } -- (CALayer *)makeBackingLayer -{ - return (CALayer*) [[CallLayer alloc] init]; -} - - #pragma mark - Destination Operations - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender