Commit a1eee3c0 authored by Alexandre Lision's avatar Alexandre Lision

call: autohide controls ui

This commit adds a hide timeout on call controls when mouse is not moving.
This leaves a clean view to display the call.

Issue: #78354
Change-Id: I58e7cb14beec89fd9be68ce144057d8f476a8d98
parent 9ddfd8dc
......@@ -36,7 +36,7 @@
class Call;
@interface CurrentCallVC : NSViewController <NSSplitViewDelegate, FullScreenDelegate> {
@interface CurrentCallVC : NSViewController <NSSplitViewDelegate, CallDelegate> {
}
......
......@@ -71,6 +71,7 @@
@property (unsafe_unretained) IBOutlet NSButton *muteAudioButton;
@property (unsafe_unretained) IBOutlet NSButton *muteVideoButton;
@property (unsafe_unretained) IBOutlet NSButton *addContactButton;
@property (unsafe_unretained) IBOutlet NSView *headerContainer;
@property (unsafe_unretained) IBOutlet ITProgressIndicator *loadingIndicator;
......@@ -102,8 +103,7 @@
@implementation CurrentCallVC
@synthesize personLabel, actionHash, stateLabel, holdOnOffButton, hangUpButton,
recordOnOffButton, pickUpButton, chatButton, timeSpentLabel,
muteVideoButton, muteAudioButton, controlsPanel, videoView,
videoLayer, previewLayer, previewView, splitView, loadingIndicator;
muteVideoButton, muteAudioButton, controlsPanel, headerContainer, videoView, videoLayer, previewLayer, previewView, splitView, loadingIndicator;
@synthesize previewHolder;
@synthesize videoHolder;
......@@ -179,8 +179,8 @@
break;
case Call::State::OVER:
[videoView setShouldAcceptInteractions:NO];
if(videoView.isInFullScreenMode)
[videoView exitFullScreenModeWithOptions:nil];
if(self.splitView.isInFullScreenMode)
[self.splitView exitFullScreenModeWithOptions:nil];
break;
case Call::State::FAILURE:
[videoView setShouldAcceptInteractions:NO];
......@@ -235,7 +235,7 @@
[loadingIndicator setLengthOfLine:2];
[loadingIndicator setInnerMargin:30];
[self.videoView setFullScreenDelegate:self];
[self.videoView setCallDelegate:self];
[self connect];
}
......@@ -430,6 +430,10 @@
[animation setDuration:0.2f];
[animation setTimingFunction:[CAMediaTimingFunction functionWithControlPoints:.7 :0.9 :1 :1]];
[CATransaction setCompletionBlock:^{
// when call comes in we want to show the controls/header
[self mouseIsMoving:YES];
[self connectVideoSignals];
/* check if text media is already present */
if (CallModel::instance()->selectedCall()->hasMedia(Media::Media::Type::TEXT, Media::Media::Direction::IN)) {
......@@ -642,7 +646,7 @@
}
# pragma mark - FullScreenDelegate
# pragma mark - CallnDelegate
- (void) callShouldToggleFullScreen
{
......@@ -658,4 +662,10 @@
}
}
-(void) mouseIsMoving:(BOOL) move
{
[[controlsPanel animator] setAlphaValue:move]; // fade out
[[headerContainer animator] setAlphaValue:move];
}
@end
......@@ -29,12 +29,13 @@
*/
#import <Cocoa/Cocoa.h>
@protocol FullScreenDelegate;
@protocol FullScreenDelegate
@protocol CallDelegate;
@protocol CallDelegate
@optional
-(void) callShouldToggleFullScreen;
-(void) mouseIsMoving:(BOOL) move;
@end
......@@ -54,6 +55,6 @@
/**
* Delegate to inform about desire to move
*/
@property (nonatomic) id <FullScreenDelegate> fullScreenDelegate;
@property (nonatomic) id <CallDelegate> callDelegate;
@end
......@@ -59,6 +59,17 @@
{
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
}
[self.window setAcceptsMouseMovedEvents:YES];
NSTrackingAreaOptions options = (NSTrackingActiveAlways | NSTrackingInVisibleRect | NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved);
NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:frame
options:options
owner:self
userInfo:nil];
[self addTrackingArea:area];
return self;
}
......@@ -178,6 +189,21 @@
[NSMenu popUpContextMenu:contextualMenu withEvent:theEvent forView:self];
}
- (void)mouseMoved:(NSEvent *)theEvent
{
[NSObject cancelPreviousPerformRequestsWithTarget:self]; // cancel showContextualMenu
[self performSelector:@selector(mouseIdle:) withObject:theEvent afterDelay:3];
if (self.callDelegate)
[self.callDelegate mouseIsMoving:YES];
}
- (void) mouseIdle:(NSEvent *)theEvent
{
if (self.callDelegate && shouldAcceptInteractions)
[self.callDelegate mouseIsMoving:NO];
}
- (void)mouseUp:(NSEvent *)theEvent
{
if([theEvent clickCount] == 1 && shouldAcceptInteractions) {
......@@ -189,8 +215,8 @@
else if([theEvent clickCount] == 2)
{
[NSObject cancelPreviousPerformRequestsWithTarget:self]; // cancel showContextualMenu
if(self.fullScreenDelegate)
[self.fullScreenDelegate callShouldToggleFullScreen];
if(self.callDelegate)
[self.callDelegate callShouldToggleFullScreen];
}
}
......
......@@ -11,6 +11,7 @@
<outlet property="chatVC" destination="LWe-df-dS6" id="SMR-T0-fYe"/>
<outlet property="controlsPanel" destination="Eoi-B8-iL6" id="4xn-3b-SNn"/>
<outlet property="hangUpButton" destination="Kjq-iM-NBL" id="Puz-4L-Okl"/>
<outlet property="headerContainer" destination="d0X-cW-Xgz" id="7RM-kh-vCm"/>
<outlet property="holdOnOffButton" destination="anb-Y8-JQi" id="HSl-pE-Kwg"/>
<outlet property="loadingIndicator" destination="JwW-2h-DyZ" id="EEb-50-oSJ"/>
<outlet property="muteAudioButton" destination="tQl-cT-0Lb" id="qV4-Ef-UTx"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment