src/video/photon/SDL_ph_wm.c
author Sam Lantinga <slouken@libsdl.org>
Wed, 10 Dec 2003 12:35:56 +0000
changeset 753 b14fdadd8311
parent 663 8bedd6d61642
child 769 b8d311d90021
permissions -rw-r--r--
Date: Thu, 4 Dec 2003 07:48:40 +0200
From: "Mike Gorchak"
Subject: SDL/QNX6 new patch

Here in attachment my patch for the SDL/QNX6 again :) It contain non-crtitical/cosmetic fixes:

1. Fixed window centering at other than the first consoles.
2. Fixed window centering algorithm in case when window height or width are greater than the desktop resolution.
3. Fixed window positioning on other than the first consoles.
4. Fixed occasional input focus lost when switching to fullscreen.
5. Removed the Photon's default chroma color for the overlays, added RGB(12, 6, 12) color instead (very dark pink).
6. Added more checks to the YUV overlay code (fixed crashes during resolution mode switches).
7. Added support for Enter/Backspace keys in unicode mode (used by Maelstrom and by other games).
8. Fixed window restore/maximize function. It works, finally.
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Library General Public
     7     License as published by the Free Software Foundation; either
     8     version 2 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Library General Public License for more details.
    14 
    15     You should have received a copy of the GNU Library General Public
    16     License along with this library; if not, write to the Free
    17     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 #ifdef SAVE_RCSID
    24 static char rcsid =
    25  "@(#) $Id$";
    26 #endif
    27 
    28 #define DISABLE_X11
    29 
    30 #include <stdlib.h>
    31 #include <string.h>
    32 #include <Ph.h>
    33 #include <photon/PpProto.h>
    34 #include <photon/PhWm.h>
    35 #include <photon/wmapi.h>
    36 #include "SDL_version.h"
    37 #include "SDL_error.h"
    38 #include "SDL_timer.h"
    39 #include "SDL_video.h"
    40 #include "SDL_syswm.h"
    41 #include "SDL_events_c.h"
    42 #include "SDL_pixels_c.h"
    43 #include "SDL_ph_modes_c.h"
    44 #include "SDL_ph_wm_c.h"
    45 
    46 void ph_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
    47 {
    48     return;
    49 }
    50 
    51 /* Set window caption */
    52 void ph_SetCaption(_THIS, const char *title, const char *icon)
    53 {
    54     SDL_Lock_EventThread();
    55 
    56     /* sanity check for set caption call before window init */
    57     if (window!=NULL)
    58     {
    59         PtSetResource(window, Pt_ARG_WINDOW_TITLE, title, 0);
    60     }
    61 
    62     SDL_Unlock_EventThread();
    63 }
    64 
    65 /* Iconify current window */
    66 int ph_IconifyWindow(_THIS)
    67 {
    68     PhWindowEvent_t windowevent;
    69 
    70     SDL_Lock_EventThread();
    71 
    72     memset( &windowevent, 0, sizeof (event) );
    73     windowevent.event_f = Ph_WM_HIDE;
    74     windowevent.event_state = Ph_WM_EVSTATE_HIDE;
    75     windowevent.rid = PtWidgetRid(window);
    76     PtForwardWindowEvent(&windowevent);
    77 
    78     SDL_Unlock_EventThread();
    79 
    80     return 0;
    81 }
    82 
    83 SDL_GrabMode ph_GrabInputNoLock(_THIS, SDL_GrabMode mode)
    84 {
    85     short abs_x, abs_y;
    86 
    87     if( mode == SDL_GRAB_OFF )
    88     {
    89         PtSetResource(window, Pt_ARG_WINDOW_STATE, Pt_FALSE, Ph_WM_STATE_ISALTKEY);
    90     }
    91     else
    92     {
    93         PtSetResource(window, Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISALTKEY);
    94 
    95         PtGetAbsPosition(window, &abs_x, &abs_y);
    96         PhMoveCursorAbs(PhInputGroup(NULL), abs_x + SDL_VideoSurface->w/2, abs_y + SDL_VideoSurface->h/2);
    97     }
    98 
    99     SDL_Unlock_EventThread();
   100 
   101     return(mode);
   102 }
   103 
   104 SDL_GrabMode ph_GrabInput(_THIS, SDL_GrabMode mode)
   105 {
   106     SDL_Lock_EventThread();
   107     mode = ph_GrabInputNoLock(this, mode);
   108     SDL_Unlock_EventThread();
   109 
   110     return(mode);
   111 }
   112 
   113 
   114 int ph_GetWMInfo(_THIS, SDL_SysWMinfo *info)
   115 {
   116     if (info->version.major <= SDL_MAJOR_VERSION)
   117     {
   118         return 1;
   119     }
   120     else
   121     {
   122         SDL_SetError("Application not compiled with SDL %d.%d\n",
   123                       SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
   124         return -1;
   125     }
   126 }