Commit 1c8685fb authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

macosx: Fix controller playlist toggling to use the contentRect and not the window Frame rect.

parent bbd3cba0
...@@ -455,7 +455,11 @@ static VLCMain *_o_sharedMainInstance = nil; ...@@ -455,7 +455,11 @@ static VLCMain *_o_sharedMainInstance = nil;
[o_window setDelegate: self]; [o_window setDelegate: self];
b_restore_size = false; b_restore_size = false;
if( [o_window frame].size.height <= 200 )
// Set that here as IB seems to be buggy
[o_window setContentMinSize:NSMakeSize(338., 30.)];
if( [o_window contentRectForFrameRect:[o_window frame]].size.height <= 169. )
{ {
b_small_window = YES; b_small_window = YES;
[o_window setFrame: NSMakeRect( [o_window frame].origin.x, [o_window setFrame: NSMakeRect( [o_window frame].origin.x,
...@@ -466,14 +470,16 @@ static VLCMain *_o_sharedMainInstance = nil; ...@@ -466,14 +470,16 @@ static VLCMain *_o_sharedMainInstance = nil;
else else
{ {
b_small_window = NO; b_small_window = NO;
[o_playlist_view setFrame: NSMakeRect( 0, 0, [o_window frame].size.width, [o_window frame].size.height - 95 )]; NSRect contentRect = [o_window contentRectForFrameRect:[o_window frame]];
[o_playlist_view setFrame: NSMakeRect( 0, 0, contentRect.size.width, contentRect.size.height - [o_window contentMinSize].height )];
[o_playlist_view setNeedsDisplay:YES]; [o_playlist_view setNeedsDisplay:YES];
[o_playlist_view setAutoresizesSubviews: YES]; [o_playlist_view setAutoresizesSubviews: YES];
[[o_window contentView] addSubview: o_playlist_view]; [[o_window contentView] addSubview: o_playlist_view];
} }
[self updateTogglePlaylistState]; [self updateTogglePlaylistState];
o_size_with_playlist = [o_window frame].size; o_size_with_playlist = [o_window contentRectForFrameRect:[o_window frame]].size;
p_playlist = pl_Yield( p_intf ); p_playlist = pl_Yield( p_intf );
...@@ -2242,35 +2248,35 @@ end: ...@@ -2242,35 +2248,35 @@ end:
} }
} }
#pragma mark Playlist toggling
- (IBAction)togglePlaylist:(id)sender - (IBAction)togglePlaylist:(id)sender
{ {
NSRect o_rect = [o_window frame]; NSRect contentRect = [o_window contentRectForFrameRect:[o_window frame]];
NSRect o_rect = [o_window contentRectForFrameRect:[o_window frame]];
/*First, check if the playlist is visible*/ /*First, check if the playlist is visible*/
if( o_rect.size.height <= 200 ) if( contentRect.size.height <= 169. )
{ {
o_restore_rect = o_rect; o_restore_rect = contentRect;
b_restore_size = true; b_restore_size = true;
b_small_window = YES; /* we know we are small, make sure this is actually set (see case below) */ b_small_window = YES; /* we know we are small, make sure this is actually set (see case below) */
/* make large */ /* make large */
if( o_size_with_playlist.height > 200 ) if( o_size_with_playlist.height > 169. )
{
o_rect.size.height = o_size_with_playlist.height; o_rect.size.height = o_size_with_playlist.height;
} else { else
o_rect.size.height = 500; o_rect.size.height = 500.;
}
if( o_size_with_playlist.width > [o_window minSize].width ) if( o_size_with_playlist.width >= [o_window contentMinSize].width )
{
o_rect.size.width = o_size_with_playlist.width; o_rect.size.width = o_size_with_playlist.width;
} else { else
o_rect.size.width = 500; o_rect.size.width = [o_window contentMinSize].width;
}
o_rect.origin.x = contentRect.origin.x;
o_rect.size.height = (o_size_with_playlist.height > 200) ? o_rect.origin.y = contentRect.origin.y - o_rect.size.height +
o_size_with_playlist.height : 500; [o_window contentMinSize].height;
o_rect.origin.x = [o_window frame].origin.x;
o_rect.origin.y = [o_window frame].origin.y - o_rect.size.height + o_rect = [o_window frameRectForContentRect:o_rect];
[o_window minSize].height;
NSRect screenRect = [[o_window screen] visibleFrame]; NSRect screenRect = [[o_window screen] visibleFrame];
if( !NSContainsRect( screenRect, o_rect ) ) { if( !NSContainsRect( screenRect, o_rect ) ) {
...@@ -2285,21 +2291,31 @@ end: ...@@ -2285,21 +2291,31 @@ end:
else else
{ {
NSSize curSize = o_rect.size; NSSize curSize = o_rect.size;
/* make small */
o_rect.size.height = [o_window minSize].height;
o_rect.size.width = [o_window minSize].width;
o_rect.origin.x = [o_window frame].origin.x;
/* Calculate the position of the lower right corner after resize */
o_rect.origin.y = [o_window frame].origin.y +
[o_window frame].size.height - [o_window minSize].height;
if( b_restore_size ) if( b_restore_size )
{
o_rect = o_restore_rect; o_rect = o_restore_rect;
if( o_rect.size.height < [o_window contentMinSize].height )
o_rect.size.height = [o_window contentMinSize].height;
if( o_rect.size.width < [o_window contentMinSize].width )
o_rect.size.width = [o_window contentMinSize].width;
}
else
{
NSRect contentRect = [o_window contentRectForFrameRect:[o_window frame]];
/* make small */
o_rect.size.height = [o_window contentMinSize].height;
o_rect.size.width = [o_window contentMinSize].width;
o_rect.origin.x = contentRect.origin.x;
/* Calculate the position of the lower right corner after resize */
o_rect.origin.y = contentRect.origin.y +
contentRect.size.height - [o_window contentMinSize].height;
}
[o_playlist_view setAutoresizesSubviews: NO]; [o_playlist_view setAutoresizesSubviews: NO];
[o_playlist_view removeFromSuperview]; [o_playlist_view removeFromSuperview];
[o_btn_playlist setState: NO]; [o_btn_playlist setState: NO];
b_small_window = NO; /* we aren't small here just yet. we are doing an animated resize after this */ b_small_window = NO; /* we aren't small here just yet. we are doing an animated resize after this */
o_rect = [o_window frameRectForContentRect:o_rect];
} }
[o_window setFrame: o_rect display:YES animate: YES]; [o_window setFrame: o_rect display:YES animate: YES];
...@@ -2307,7 +2323,7 @@ end: ...@@ -2307,7 +2323,7 @@ end:
- (void)updateTogglePlaylistState - (void)updateTogglePlaylistState
{ {
if( [o_window frame].size.height <= 200 ) if( [o_window contentRectForFrameRect:[o_window frame]].size.height <= 169. )
{ {
[o_btn_playlist setState: NO]; [o_btn_playlist setState: NO];
} }
...@@ -2319,13 +2335,16 @@ end: ...@@ -2319,13 +2335,16 @@ end:
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)proposedFrameSize - (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)proposedFrameSize
{ {
/* Not triggered on a window resize or maxification of the window. only by window mouse dragging resize */ /* Not triggered on a window resize or maxification of the window. only by window mouse dragging resize */
/*Stores the size the controller one resize, to be able to restore it when /*Stores the size the controller one resize, to be able to restore it when
toggling the playlist*/ toggling the playlist*/
o_size_with_playlist = proposedFrameSize; o_size_with_playlist = proposedFrameSize;
if( proposedFrameSize.height <= 200 ) NSRect rect;
rect.size = proposedFrameSize;
if( [o_window contentRectForFrameRect:rect].size.height <= 169. )
{ {
if( b_small_window == NO ) if( b_small_window == NO )
{ {
...@@ -2350,7 +2369,8 @@ end: ...@@ -2350,7 +2369,8 @@ end:
{ {
/* If large and coming from small then show */ /* If large and coming from small then show */
[o_playlist_view setAutoresizesSubviews: YES]; [o_playlist_view setAutoresizesSubviews: YES];
[o_playlist_view setFrame: NSMakeRect( 0, 0, [o_window frame].size.width, [o_window frame].size.height - [o_window minSize].height )]; NSRect contentRect = [o_window contentRectForFrameRect:[o_window frame]];
[o_playlist_view setFrame: NSMakeRect( 0, 0, contentRect.size.width, contentRect.size.height - [o_window contentMinSize].height )];
[o_playlist_view setNeedsDisplay:YES]; [o_playlist_view setNeedsDisplay:YES];
[[o_window contentView] addSubview: o_playlist_view]; [[o_window contentView] addSubview: o_playlist_view];
b_small_window = NO; b_small_window = NO;
...@@ -2358,6 +2378,8 @@ end: ...@@ -2358,6 +2378,8 @@ end:
[self updateTogglePlaylistState]; [self updateTogglePlaylistState];
} }
#pragma mark -
@end @end
@implementation VLCMain (NSMenuValidation) @implementation VLCMain (NSMenuValidation)
......
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