Mercurial > sdl-ios-xcode
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)