changeset 12519:12a87d539f6d

choose fullscreen device with suboption device_id=#
author nplourde
date Wed, 02 Jun 2004 00:58:05 +0000
parents 996757299a82
children 94e66acdb706
files libvo/vo_quartz.c
diffstat 1 files changed, 52 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_quartz.c	Mon May 31 16:12:13 2004 +0000
+++ b/libvo/vo_quartz.c	Wed Jun 02 00:58:05 2004 +0000
@@ -79,6 +79,7 @@
 
 static int device_width;
 static int device_height;
+static int device_id;
 
 static WindowRef theWindow = NULL;
 
@@ -86,8 +87,9 @@
 static Rect dstRect; // size of the displayed image (after scaling)
 static Rect winRect; // size of the window containg the displayed image (include padding)
 static Rect oldWinRect; // size of the window containg the displayed image (include padding) when NOT in FS mode
+static Rect deviceRect; // size of the display device
 
-static CGContextRef context;
+CGrafPtr gDisplayPortPtr;
 
 #include "../osdep/keycodes.h"
 extern void mplayer_put_key(int code);
@@ -139,7 +141,7 @@
 	
 		if(window)
 		{
-			GetWindowPortBounds (window, &rectPort);
+			GetPortBounds(GetWindowPort(window), &rectPort);
 		}   
 	
 		switch (kind)
@@ -316,22 +318,35 @@
 										{ kEventClassWindow, kEventWindowClosed }, 
 										{ kEventClassWindow, kEventWindowBoundsChanged } };
   
-	InstallApplicationEventHandler (NewEventHandlerUPP (MainEventHandler), GetEventTypeCount(winEvents), winEvents, 0, NULL);
+	InstallApplicationEventHandler (NewEventHandlerUPP (MainEventHandler), GetEventTypeCount(winEvents), winEvents, NULL, NULL);
 }
 
 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
 {
 	WindowAttributes	windowAttrs;
 	GDHandle			deviceHdl;
-	Rect				deviceRect;
 	OSErr				qterr;
 	
 	//Get Main device info///////////////////////////////////////////////////
+	int i;
+	
 	deviceHdl = GetMainDevice();
-	deviceRect = (*deviceHdl)->gdRect;
 	
-	device_width = deviceRect.right;
-	device_height = deviceRect.bottom;
+	for(i=0; i<device_id; i++)
+	{
+		deviceHdl = GetNextDevice(deviceHdl);
+		
+		if(deviceHdl == NULL)
+		{
+			mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: Device ID %d do not exist, falling back to main device.\n", device_id);
+			deviceHdl = GetMainDevice();
+			break;
+		}
+	}
+	
+	deviceRect = (*deviceHdl)->gdRect;
+	device_width = deviceRect.right-deviceRect.left;
+	device_height = deviceRect.bottom-deviceRect.top;
 	
 	//misc mplayer setup/////////////////////////////////////////////////////
 	SetRect(&imgRect, 0, 0, width, height);
@@ -384,7 +399,9 @@
 		SetRect(&oldWinRect, 0, 0, d_width, d_height);
 		SizeWindow (theWindow, d_width, d_height, 1);
  	}
- 	
+	
+	gDisplayPortPtr = GetWindowPort(theWindow);
+	
  	get_image_done = 0;
 
 	if (!EnterMoviesDone)
@@ -401,7 +418,7 @@
 		return -1;
 	}
 	
-	SetPort(GetWindowPort(theWindow));
+	SetPort(gDisplayPortPtr);
 	SetIdentityMatrix(&matrix);
 	
 	if ((d_width != width) || (d_height != height))
@@ -541,7 +558,7 @@
 					   yuv_qt_stuff.desc,
 					   (char *)P,
 					   image_buffer_size,
-					   GetWindowPort(theWindow),
+					   gDisplayPortPtr,//GetWindowPort(theWindow),
 					   NULL,
 					   NULL,
 					   ((d_width != width) || (d_height != height)) ? 
@@ -751,6 +768,22 @@
 
 static uint32_t preinit(const char *arg)
 {
+	int parse_err = 0;
+	
+    if(arg) 
+    {
+        char *parse_pos = &arg[0];
+        while (parse_pos[0] && !parse_err) 
+		{
+			if (strncmp (parse_pos, "device_id=", 10) == 0)
+			{
+				parse_pos = &parse_pos[10];
+                device_id = strtol(parse_pos, &parse_pos, 0);
+            }
+            if (parse_pos[0] == ':') parse_pos = &parse_pos[1];
+            else if (parse_pos[0]) parse_err = 1;
+        }
+    }
     return 0;
 }
 
@@ -869,7 +902,8 @@
 	uint32_t d_width;
 	uint32_t d_height;
 	
-	GetWindowPortBounds(theWindow, &winRect);
+	//GetWindowPortBounds(theWindow, &winRect);
+	GetPortBounds( gDisplayPortPtr, &winRect );
 
 	aspect( &d_width, &d_height, A_NOZOOM);
 	
@@ -887,15 +921,11 @@
 		SetRect(&dstRect, 0, padding, (d_width*aspectX), d_height*aspectX+padding);
 	}
 
-	//create a graphic context for the window
-	SetPortBounds(GetWindowPort(theWindow), &winRect);
-	CreateCGContextForPort(GetWindowPort(theWindow),&context);
-
-	//fill background with black
-	CGRect winBounds = CGRectMake( winRect.top, winRect.left, winRect.right, winRect.bottom);
-	CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
-	CGContextFillRect(context, winBounds);
-	CGContextFlush(context);
+	//Clear Background
+	SetGWorld( gDisplayPortPtr, NULL );
+	RGBColor blackC = { 0x0000, 0x0000, 0x0000 };
+    RGBForeColor( &blackC );
+    PaintRect( &winRect );
 
 	long scale_X = FixDiv(Long2Fix(dstRect.right - dstRect.left),Long2Fix(imgRect.right));
 	long scale_Y = FixDiv(Long2Fix(dstRect.bottom - dstRect.top),Long2Fix(imgRect.bottom));
@@ -925,7 +955,7 @@
 void window_fullscreen()
 {
 	GDHandle deviceHdl;
-	Rect deviceRect;
+	//Rect deviceRect;
 
 	//go fullscreen
 	if(vo_fs)
@@ -942,7 +972,7 @@
 		//go fullscreen
 		//ChangeWindowAttributes(theWindow, 0, kWindowResizableAttribute);
 			
-		MoveWindow (theWindow, 0, 0, 1);		
+		MoveWindow (theWindow, deviceRect.left, deviceRect.top, 1);		
 		SizeWindow(theWindow, device_width, device_height,1);
 
 		vo_quartz_fs = 1;