[vlc-commits] macosx: allow a smaller min-height when video is playing and currently visible in order to get more exact zoom behaviour

David Fuhrmann git at videolan.org
Fri Apr 20 13:40:19 CEST 2012


vlc/vlc-2.0 | branch: master | David Fuhrmann <david.fuhrmann at googlemail.com> | Wed Apr 18 14:17:49 2012 +0200| [de233f9968c78c74bdb300c77b952eb550f75e38] | committer: Felix Paul Kühne

macosx: allow a smaller min-height when video is playing and currently visible in order to get more exact zoom behaviour
(cherry picked from commit 884199d83044b4ce5b0a4c4ebb8896ae23cf4d96)

Signed-off-by: Felix Paul Kühne <fkuehne at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=de233f9968c78c74bdb300c77b952eb550f75e38
---

 modules/gui/macosx/MainWindow.m |   77 ++++++++++++++++++++++++++++++---------
 modules/video_output/macosx.m   |    4 +-
 2 files changed, 61 insertions(+), 20 deletions(-)

diff --git a/modules/gui/macosx/MainWindow.m b/modules/gui/macosx/MainWindow.m
index 6160264..f243b2c 100644
--- a/modules/gui/macosx/MainWindow.m
+++ b/modules/gui/macosx/MainWindow.m
@@ -42,6 +42,8 @@
 #import <vlc_aout_intf.h>
 
 @implementation VLCMainWindow
+static const float f_min_video_height = 70.0;
+
 static VLCMainWindow *_o_sharedInstance = nil;
 
 + (VLCMainWindow *)sharedInstance
@@ -272,16 +274,27 @@ static VLCMainWindow *_o_sharedInstance = nil;
     [o_volume_up_btn setEnabled: b_mute];
 
     /* interface builder action */
-    if ([self frame].size.height < 100)
+    float f_threshold_height = f_min_video_height + [o_bottombar_view frame].size.height;
+    if( b_dark_interface )
+        f_threshold_height += [o_titlebar_view frame].size.height;
+    if( [[self contentView] frame].size.height < f_threshold_height )
         b_splitviewShouldBeHidden = YES;
+
     [self setDelegate: self];
     [self setExcludedFromWindowsMenu: YES];
     [self setAcceptsMouseMovedEvents: YES];
     // Set that here as IB seems to be buggy
     if (b_dark_interface)
-        [self setContentMinSize:NSMakeSize(604., (288. + [o_titlebar_view frame].size.height))];
+    {
+        [self setContentMinSize:NSMakeSize(604., 288. + [o_titlebar_view frame].size.height)];
+        [o_detached_video_window setContentMinSize: NSMakeSize( 363., f_min_video_height + [o_detached_bottombar_view frame].size.height + [o_detached_titlebar_view frame].size.height )];
+    }
     else
+    {
         [self setContentMinSize:NSMakeSize(604., 288.)];
+        [o_detached_video_window setContentMinSize: NSMakeSize( 363., f_min_video_height + [o_detached_bottombar_view frame].size.height )];
+    }
+
     [self setTitle: _NS("VLC media player")];
     [o_time_fld setAlignment: NSCenterTextAlignment];
     [o_time_fld setNeedsDisplay:YES];
@@ -549,8 +562,8 @@ static VLCMainWindow *_o_sharedInstance = nil;
     [o_split_view setAutosaveName:@"10thanniversary-splitview"];
     if (b_splitviewShouldBeHidden)
     {
-        i_lastSplitViewHeight = [o_split_view frame].size.height;
         [self hideSplitView];
+        i_lastSplitViewHeight = 300;
     }
 }
 
@@ -660,6 +673,42 @@ static VLCMainWindow *_o_sharedInstance = nil;
     [[o_dropzone_box animator] setFrame: plrect];
 }
 
+- (void)makeSplitViewVisible
+{
+    if( b_dark_interface )
+        [self setContentMinSize: NSMakeSize( 604., 288. + [o_titlebar_view frame].size.height )];
+    else
+        [self setContentMinSize: NSMakeSize( 604., 288. )];
+
+    NSRect old_frame = [self frame];
+    float newHeight = [self minSize].height;
+    if( old_frame.size.height < newHeight )
+    {
+        NSRect new_frame = old_frame;
+        new_frame.origin.y = old_frame.origin.y + old_frame.size.height - newHeight;
+        new_frame.size.height = newHeight;
+
+        [[self animator] setFrame: new_frame display: YES animate: YES];
+    }
+
+    [o_video_view setHidden: YES];
+    [o_split_view setHidden: NO];
+    [self makeFirstResponder: nil];
+
+}
+
+- (void)makeSplitViewHidden
+{
+    if( b_dark_interface )
+        [self setContentMinSize: NSMakeSize( 604., f_min_video_height + [o_titlebar_view frame].size.height )];
+    else
+        [self setContentMinSize: NSMakeSize( 604., f_min_video_height )];
+
+    [o_split_view setHidden: YES];
+    [o_video_view setHidden: NO];
+    [self makeFirstResponder: o_video_view];
+}
+
 - (IBAction)togglePlaylist:(id)sender
 {
     if (![self isVisible] && sender != nil)
@@ -703,17 +752,10 @@ static VLCMainWindow *_o_sharedInstance = nil;
 
         if (!b_nonembedded)
         {
-            if (([o_video_view isHidden] && b_activeVideo) || b_restored ) {
-                [o_split_view setHidden: YES];
-                [o_video_view setHidden: NO];
-                [self makeFirstResponder: o_video_view];
-            }
+            if (([o_video_view isHidden] && b_activeVideo) || b_restored )
+                [self makeSplitViewHidden];
             else
-            {
-                [o_video_view setHidden: YES];
-                [o_split_view setHidden: NO];
-                [self makeFirstResponder: nil];
-            }
+                [self makeSplitViewVisible];
         }
         else
         {
@@ -1128,8 +1170,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
         [self setContentMinSize: NSMakeSize( 604., [o_bottombar_view frame].size.height )];
         [self setContentMaxSize: NSMakeSize( FLT_MAX, [o_bottombar_view frame].size.height )];
     }
-    if (i_lastSplitViewHeight < 100)
-        i_lastSplitViewHeight = 300; // random reasonable size
+
     b_splitview_removed = YES;
 }
 
@@ -1476,7 +1517,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
         // restore alpha value to 1 for the case that macosx-opaqueness is set to < 1
         [self setAlphaValue:1.0];
     }
-    
+
     if( b_nativeFullscreenMode )
     {
         if( [NSApp presentationOptions] & NSApplicationPresentationFullScreen )
@@ -1514,8 +1555,8 @@ static VLCMainWindow *_o_sharedInstance = nil;
     unsigned int i_height = nativeVideoSize.height;
     if (i_width < windowMinSize.width)
         i_width = windowMinSize.width;
-    if (i_height < windowMinSize.height)
-        i_height = windowMinSize.height;
+    if (i_height < f_min_video_height)
+        i_height = f_min_video_height;
 
     /* Calculate the window's new size */
     NSRect new_frame;
diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m
index 13cbc9b..7b7c93a 100644
--- a/modules/video_output/macosx.m
+++ b/modules/video_output/macosx.m
@@ -392,8 +392,8 @@ static int Control (vout_display_t *vd, int query, va_list ap)
             vout_display_cfg_t cfg_tmp = *cfg;
             if (cfg_tmp.display.width < windowMinSize.width)
                 cfg_tmp.display.width = windowMinSize.width;
-            if (cfg_tmp.display.height < windowMinSize.height)
-                cfg_tmp.display.height = windowMinSize.height;
+            if (cfg_tmp.display.height < 70)
+                cfg_tmp.display.height = 70;
 
             NSRect bounds = [sys->glView bounds];
             if (!config_GetInt(vd, "macosx-video-autoresize"))



More information about the vlc-commits mailing list