]> git.sesse.net Git - vlc/commitdiff
* forwardport: [18319], [18320]
authorDerk-Jan Hartman <hartman@videolan.org>
Thu, 7 Dec 2006 22:38:20 +0000 (22:38 +0000)
committerDerk-Jan Hartman <hartman@videolan.org>
Thu, 7 Dec 2006 22:38:20 +0000 (22:38 +0000)
  - fspanel centering on right screen
  - fspanel don't hide if mousepointer is over fspanel

modules/gui/macosx/fspanel.h
modules/gui/macosx/fspanel.m
modules/gui/macosx/vout.m

index 31bfe25ff4a6c62e76a0b31bf89a5ddb50db55bd..338aea2e633e02b133d07ca87ff1696c05f2f2c8 100644 (file)
@@ -33,6 +33,7 @@
 \r
     BOOL b_displayed;\r
     BOOL b_voutWasUpdated;\r
+    int i_device;\r
 }\r
 - (id)initWithContentRect: (NSRect)contentRect \r
                 styleMask: (unsigned int)aStyle \r
@@ -65,7 +66,7 @@
 - (void)mouseDragged:(NSEvent *)theEvent;\r
 \r
 - (BOOL)isDisplayed;\r
-- (void)setVoutWasUpdated;\r
+- (void)setVoutWasUpdated: (int) i_screen;\r
 @end\r
 \r
 @interface VLCFSPanelView : NSView\r
index 92208d0bdec65f63823226e3fea3861c44964eb9..6f90428bbbd5a465ce7e0b0164626fbcd7c390f8 100644 (file)
@@ -42,7 +42,7 @@
                   backing:(NSBackingStoreType)bufferingType \r
                     defer:(BOOL)flag\r
 {\r
-    id win=[super initWithContentRect:contentRect styleMask:NSTexturedBackgroundWindowMask backing:bufferingType defer:flag];\r
+    id win = [super initWithContentRect:contentRect styleMask:NSTexturedBackgroundWindowMask backing:bufferingType defer:flag];\r
     [win setOpaque:NO];\r
     [win setHasShadow: NO];\r
     [win setBackgroundColor:[NSColor clearColor]];\r
     /* let the window sit on top of everything else and start out completely transparent */\r
     [win setLevel:NSFloatingWindowLevel];\r
     [win setAlphaValue:0.0];\r
-    \r
-    /* centre the panel in the lower third of the screen */\r
-    NSPoint theCoordinate;\r
-    NSRect theScreensFrame;\r
-    NSRect theWindowsFrame;\r
-    int i_outputScreen;\r
-    \r
-    i_outputScreen = var_GetInteger( VLCIntf, "video-device" );\r
-    if( i_outputScreen <=0 || i_outputScreen > (signed int)[[NSScreen screens] count] )\r
-        /* invalid preferences or none specified, using main screen */\r
-        theScreensFrame = [[NSScreen mainScreen] frame];\r
-    else\r
-        /* user-defined screen */\r
-        theScreensFrame = [[[NSScreen screens] objectAtIndex: i_outputScreen] frame];\r
-    \r
-    theWindowsFrame = [win frame];\r
-    theCoordinate.x = (theScreensFrame.size.width - theWindowsFrame.size.width) / 2;\r
-    theCoordinate.y = (theScreensFrame.size.height / 3) - theWindowsFrame.size.height;\r
-    [win setFrameTopLeftPoint: theCoordinate];\r
+    i_device = 0;\r
+\r
+    [win center];\r
     return win;\r
 }\r
 \r
 - (void)awakeFromNib\r
 {\r
     [self setContentView:[[VLCFSPanelView alloc] initWithFrame: [self frame]]];\r
-    BOOL isInside=(NSPointInRect([NSEvent mouseLocation],[self frame]));\r
+    BOOL isInside = (NSPointInRect([NSEvent mouseLocation],[self frame]));\r
     [[self contentView] addTrackingRect:[[self contentView] bounds] owner:self userData:nil assumeInside:isInside];\r
     if (isInside)\r
-    [self mouseEntered:NULL];\r
+        [self mouseEntered:NULL];\r
     if (!isInside)\r
-    [self mouseExited:NULL];\r
+        [self mouseExited:NULL];\r
 }\r
 \r
 /* Windows created with NSBorderlessWindowMask normally can't be key, but we want ours to be */\r
     [super dealloc];\r
 }\r
 \r
+-(void)center\r
+{\r
+    /* centre the panel in the lower third of the screen */\r
+    NSPoint theCoordinate;\r
+    NSRect theScreensFrame;\r
+    NSRect theWindowsFrame;\r
+\r
+    if( i_device < 0 || i_device >= (signed int)[[NSScreen screens] count] )\r
+        /* invalid preferences or none specified, using main screen */\r
+        theScreensFrame = [[NSScreen mainScreen] frame];\r
+    else\r
+        /* user-defined screen */\r
+        theScreensFrame = [[[NSScreen screens] objectAtIndex: i_device] frame];\r
+\r
+    theWindowsFrame = [self frame];\r
+    \r
+    theCoordinate.x = (theScreensFrame.size.width - theWindowsFrame.size.width) / 2 + theScreensFrame.origin.x;\r
+    theCoordinate.y = (theScreensFrame.size.height / 3) - theWindowsFrame.size.height + theScreensFrame.origin.y;\r
+    [self setFrameTopLeftPoint: theCoordinate];\r
+}\r
+\r
 - (void)setPlay\r
 {\r
     [[self contentView] setPlay];\r
 \r
 - (void)fadeOut\r
 {\r
+    if( NSPointInRect([NSEvent mouseLocation],[self frame]))\r
+        return;\r
+\r
     if( ( [self alphaValue] > 0.0 ) )\r
     {\r
         if (![self fadeTimer])\r
     return b_displayed;\r
 }\r
 \r
-- (void)setVoutWasUpdated\r
+- (void)setVoutWasUpdated: (int)i_newdevice;\r
 {\r
     b_voutWasUpdated = YES;\r
+    if( i_newdevice != i_device )\r
+    {\r
+        i_device = i_newdevice;\r
+        [self center];\r
+    }\r
 }\r
 @end\r
 \r
 \r
 - (void)setPlay\r
 {\r
-    NSImage *image;\r
-    image = [NSImage imageNamed:@"fs_play"];\r
-    [o_play setImage:image];\r
-    image = [NSImage imageNamed:@"fs_play_highlight"];\r
-    [o_play setAlternateImage:image];\r
+    [o_play setImage:[NSImage imageNamed:@"fs_play"]];\r
+    [o_play setAlternateImage: [NSImage imageNamed:@"fs_play_highlight"]];\r
 }\r
 \r
 - (void)setPause\r
 {\r
-    NSImage *image;\r
-    image = [NSImage imageNamed:@"fs_pause"];\r
-    [o_play setImage:image];\r
-    image = [NSImage imageNamed:@"fs_pause_highlight"];\r
-    [o_play setAlternateImage:image];\r
+    [o_play setImage: [NSImage imageNamed:@"fs_pause"]];\r
+    [o_play setAlternateImage: [NSImage imageNamed:@"fs_pause_highlight"]];\r
 }\r
 \r
 - (void)setStreamTitle:(NSString *)o_title\r
     [self drawKnobInRect: knobRect];\r
 }\r
 \r
-@end
\ No newline at end of file
+@end\r
+\r
index bdf9d5ab26f79b38fd2bebb8f6c53ce65db3912c..318ea444265a2332fcf40f9c27222a4a75464e5c 100644 (file)
@@ -946,17 +946,17 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
 
     if( p_vout->b_fullscreen )
     {
+        CGDisplayFadeReservationToken token;
+        NSRect screen_rect = [o_screen frame];
+        screen_rect.origin.x = screen_rect.origin.y = 0;
+
         /* move the FSPanel to front in case that it is currently shown
          * this won't and is not supposed to work when it's fading right now */
         if( [[[[VLCMain sharedInstance] getControls] getFSPanel] isDisplayed] )
             [[[[VLCMain sharedInstance] getControls] getFSPanel] orderFront: self];
         
         /* tell the fspanel to move itself to front next time it's triggered */
-        [[[[VLCMain sharedInstance] getControls] getFSPanel] setVoutWasUpdated];
-
-        CGDisplayFadeReservationToken token;
-        NSRect screen_rect = [o_screen frame];
-        screen_rect.origin.x = screen_rect.origin.y = 0;
+        [[[[VLCMain sharedInstance] getControls] getFSPanel] setVoutWasUpdated: i_device];
 
         /* Creates a window with size: screen_rect on o_screen */
         [self initWithContentRect: screen_rect