diff src/video/photon/SDL_ph_mouse.c @ 571:8e3ce997621c

Date: Thu, 16 Jan 2003 13:48:31 +0200 From: "Mike Gorchak" Subject: All QNX patches whole patches concerning QNX. Almost all code has been rewritten by Julian and me. Added initial support for hw overlays in QNX and many many others fixes. P.S. This patches has been reviewed by Dave Rempel from QSSL and included in SDL 1.2.5 distribution, which coming on 3rd party CD for newest 6.2.1 version of QNX, which will be available soon.
author Sam Lantinga <slouken@libsdl.org>
date Mon, 20 Jan 2003 01:38:37 +0000
parents bce7171e7a85
children 8bedd6d61642
line wrap: on
line diff
--- a/src/video/photon/SDL_ph_mouse.c	Mon Jan 20 01:37:07 2003 +0000
+++ b/src/video/photon/SDL_ph_mouse.c	Mon Jan 20 01:38:37 2003 +0000
@@ -35,18 +35,18 @@
 #include "SDL_cursor_c.h"
 #include "SDL_ph_mouse_c.h"
 
-struct  WMcursor {
+struct WMcursor
+{
     PhCursorDef_t *ph_cursor ;
 };
 
-
 void ph_FreeWMCursor(_THIS, WMcursor *cursor)
 {
     if (window != NULL)
     {
         SDL_Lock_EventThread();
 
-        if (PtSetResource( window, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_INHERIT, 0 ) < 0)
+        if (PtSetResource( window, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_INHERIT, 0) < 0)
         {
             /* TODO: output error msg */
         }
@@ -60,64 +60,61 @@
 WMcursor *ph_CreateWMCursor(_THIS,
 		Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y)
 {
-	WMcursor* cursor;
-	int clen, i;
-	unsigned char bit, databit, maskbit;
+    WMcursor* cursor;
+    int clen, i;
+    unsigned char bit, databit, maskbit;
 
-	/* Allocate and initialize the cursor memory */
-	if ((cursor = (WMcursor*)malloc(sizeof(WMcursor))) == NULL)
-	{
-            SDL_OutOfMemory();
-            return(NULL);
-	}
-	memset(cursor,0,sizeof(WMcursor));
+    /* Allocate and initialize the cursor memory */
+    if ((cursor = (WMcursor*)malloc(sizeof(WMcursor))) == NULL)
+    {
+        SDL_OutOfMemory();
+        return(NULL);
+    }
+    memset(cursor,0,sizeof(WMcursor));
 
-	cursor->ph_cursor = (PhCursorDef_t *) malloc(sizeof(PhCursorDef_t) + 32*4*2);
-	if(cursor->ph_cursor == NULL)
-	   printf("cursor malloc failed\n");
+    cursor->ph_cursor = (PhCursorDef_t *) malloc(sizeof(PhCursorDef_t) + 32*4*2);
+    if (cursor->ph_cursor == NULL)
+        printf("cursor malloc failed\n");
 
-	memset(cursor->ph_cursor,0,(sizeof(PhCursorDef_t) + 32*4*2));
+    memset(cursor->ph_cursor,0,(sizeof(PhCursorDef_t) + 32*4*2));
 
-	cursor->ph_cursor->hdr.type =Ph_RDATA_CURSOR;   
-	cursor->ph_cursor->size1.x = (short)w;
-	cursor->ph_cursor->size1.y = (short)h;
-	cursor->ph_cursor->offset1.x = (short)hot_x;
-	cursor->ph_cursor->offset1.y = (short)hot_y;
-	cursor->ph_cursor->bytesperline1 = (char)w/8;
-	cursor->ph_cursor->color1 = Pg_WHITE;
-	cursor->ph_cursor->size2.x = (short)w;
-        cursor->ph_cursor->size2.y = (short)h;
-        cursor->ph_cursor->offset2.x = (short)hot_x;
-        cursor->ph_cursor->offset2.y = (short)hot_y;
-        cursor->ph_cursor->bytesperline2 = (char)w/8;
-        cursor->ph_cursor->color2 = Pg_BLACK;
+    cursor->ph_cursor->hdr.type =Ph_RDATA_CURSOR;   
+    cursor->ph_cursor->size1.x = (short)w;
+    cursor->ph_cursor->size1.y = (short)h;
+    cursor->ph_cursor->offset1.x = (short)hot_x;
+    cursor->ph_cursor->offset1.y = (short)hot_y;
+    cursor->ph_cursor->bytesperline1 = (char)w/8;
+    cursor->ph_cursor->color1 = Pg_WHITE;
+    cursor->ph_cursor->size2.x = (short)w;
+    cursor->ph_cursor->size2.y = (short)h;
+    cursor->ph_cursor->offset2.x = (short)hot_x;
+    cursor->ph_cursor->offset2.y = (short)hot_y;
+    cursor->ph_cursor->bytesperline2 = (char)w/8;
+    cursor->ph_cursor->color2 = Pg_BLACK;
 
-	clen = (w/8)*h;
+    clen = (w/8)*h;
 
-	/* Copy the mask and the data to different 
-	   bitmap planes */
-	for ( i=0; i<clen; ++i )
-	{
-		for ( bit = 0; bit < 8; bit++ )
-		{
-			databit = data[i] & (1 << bit);
-			maskbit = mask[i] & (1 << bit);
+    /* Copy the mask and the data to different bitmap planes */
+    for (i=0; i<clen; ++i)
+    {
+        for (bit = 0; bit < 8; bit++)
+        {
+            databit = data[i] & (1 << bit);
+            maskbit = mask[i] & (1 << bit);
 
-			cursor->ph_cursor->images[i] |= 
-				(databit == 0) ? maskbit : 0;
-			/* If the databit != 0, treat it as a black pixel and
-			 * ignore the maskbit (can't do an inverted color) */
-			cursor->ph_cursor->images[i+clen] |= databit;
-		}
-	}
+            cursor->ph_cursor->images[i] |= (databit == 0) ? maskbit : 0;
+            /* If the databit != 0, treat it as a black pixel and
+             * ignore the maskbit (can't do an inverted color) */
+            cursor->ph_cursor->images[i+clen] |= databit;
+        }
+    }
 
-        /* #bytes following the hdr struct */
-	cursor->ph_cursor->hdr.len =sizeof(PhCursorDef_t) + clen*2 - sizeof(PhRegionDataHdr_t); 
+    /* #bytes following the hdr struct */
+    cursor->ph_cursor->hdr.len =sizeof(PhCursorDef_t) + clen*2 - sizeof(PhRegionDataHdr_t); 
 
-	return (cursor);
+    return (cursor);
 }
 
-
 PhCursorDef_t ph_GetWMPhCursor(WMcursor *cursor)
 {
     return(*cursor->ph_cursor);
@@ -125,47 +122,46 @@
 
 int ph_ShowWMCursor(_THIS, WMcursor *cursor)
 {
-	PtArg_t args[3];
-	int nargs = 0;
-	short cursor_is_defined = 0;
+    PtArg_t args[3];
+    int nargs = 0;
 
-	/* Don't do anything if the display is gone */
- 	if ( window == NULL ) {
-    	 return(0);
- 	}
+    /* Don't do anything if the display is gone */
+    if (window == NULL)
+    {
+        return (0);
+    }
+
+    /* looks like photon can't draw mouse cursor in direct mode */
+    if ((this->screen->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN)
+    {
+        return (0);
+    }
 
-	/* Set the photon cursor cursor, or blank if cursor is NULL */
-	if ( window ) {
-		
-		if ( cursor != NULL ) {
-			PtSetArg( &args[0], Pt_ARG_CURSOR_TYPE, Ph_CURSOR_BITMAP, 0 );
-			/* Could set next to any PgColor_t value */
-			PtSetArg( &args[1], Pt_ARG_CURSOR_COLOR,Ph_CURSOR_DEFAULT_COLOR , 0 );
-			PtSetArg( &args[2], Pt_ARG_BITMAP_CURSOR, cursor->ph_cursor, (cursor->ph_cursor->hdr.len + sizeof(PhRegionDataHdr_t)) );
-			nargs = 3;
-			cursor_is_defined = 1;
-		}
-		else /* Ph_CURSOR_NONE */
-		{
-			PtSetArg( &args[0], Pt_ARG_CURSOR_TYPE,Ph_CURSOR_NONE, 0);
-			nargs = 1;
-			cursor_is_defined = 1;
-		}
-		if (cursor_is_defined)
-		{
-    	                SDL_Lock_EventThread();
-			
-			if (PtSetResources( window, nargs, args ) < 0 )
-			{
-			    return(0);
-			}	
-						
-			SDL_Unlock_EventThread();
-		}
-		else
-			return(0);
-	}
-	return(1);
+    /* Set the photon cursor cursor, or blank if cursor is NULL */
+    if (cursor!=NULL)
+    {
+        PtSetArg(&args[0], Pt_ARG_CURSOR_TYPE, Ph_CURSOR_BITMAP, 0);
+        /* Could set next to any PgColor_t value */
+        PtSetArg(&args[1], Pt_ARG_CURSOR_COLOR, Ph_CURSOR_DEFAULT_COLOR , 0);
+        PtSetArg(&args[2], Pt_ARG_BITMAP_CURSOR, cursor->ph_cursor, (cursor->ph_cursor->hdr.len + sizeof(PhRegionDataHdr_t)));
+        nargs = 3;
+    }
+    else /* Ph_CURSOR_NONE */
+    {
+        PtSetArg( &args[0], Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE, 0);
+        nargs = 1;
+    }
+
+    SDL_Lock_EventThread();
+
+    if (PtSetResources(window, nargs, args) < 0 )
+    {
+        return (0);
+    }	
+
+    SDL_Unlock_EventThread();
+
+    return (1);
 }
 
 void ph_WarpWMCursor(_THIS, Uint16 x, Uint16 y)