146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL - Simple DirectMedia Layer 346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Copyright (C) 1997-2006 Sam Lantinga 446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is free software; you can redistribute it and/or 646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner modify it under the terms of the GNU Lesser General Public 746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License as published by the Free Software Foundation; either 846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner version 2.1 of the License, or (at your option) any later version. 946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is distributed in the hope that it will be useful, 1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner but WITHOUT ANY WARRANTY; without even the implied warranty of 1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Lesser General Public License for more details. 1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner You should have received a copy of the GNU Lesser General Public 1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License along with this library; if not, write to the Free Software 1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Sam Lantinga 2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner slouken@libsdl.org 2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h" 2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <Ph.h> 2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <photon/PpProto.h> 2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <photon/PhWm.h> 2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <photon/wmapi.h> 2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_version.h" 3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_timer.h" 3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_video.h" 3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_syswm.h" 3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../SDL_pixels_c.h" 3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../../events/SDL_events_c.h" 3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_ph_modes_c.h" 3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_ph_wm_c.h" 3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ph_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask) 3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return; 4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Set window caption */ 4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ph_SetCaption(_THIS, const char *title, const char *icon) 4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Lock_EventThread(); 4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* sanity check for set caption call before window init */ 4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (window!=NULL) 5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner PtSetResource(window, Pt_ARG_WINDOW_TITLE, title, 0); 5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Unlock_EventThread(); 5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Iconify current window */ 5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerint ph_IconifyWindow(_THIS) 5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner PhWindowEvent_t windowevent; 6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Lock_EventThread(); 6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_memset(&windowevent, 0, sizeof(windowevent)); 6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner windowevent.event_f = Ph_WM_HIDE; 6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner windowevent.event_state = Ph_WM_EVSTATE_HIDE; 6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner windowevent.rid = PtWidgetRid(window); 6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner PtForwardWindowEvent(&windowevent); 6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Unlock_EventThread(); 7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return 0; 7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7546be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_GrabMode ph_GrabInputNoLock(_THIS, SDL_GrabMode mode) 7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner short abs_x, abs_y; 7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if( mode == SDL_GRAB_OFF ) 8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner PtSetResource(window, Pt_ARG_WINDOW_STATE, Pt_FALSE, Ph_WM_STATE_ISALTKEY); 8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner else 8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner PtSetResource(window, Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISALTKEY); 8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner PtGetAbsPosition(window, &abs_x, &abs_y); 8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner PhMoveCursorAbs(PhInputGroup(NULL), abs_x + SDL_VideoSurface->w/2, abs_y + SDL_VideoSurface->h/2); 8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Unlock_EventThread(); 9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return(mode); 9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 9646be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_GrabMode ph_GrabInput(_THIS, SDL_GrabMode mode) 9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Lock_EventThread(); 9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mode = ph_GrabInputNoLock(this, mode); 10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Unlock_EventThread(); 10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return(mode); 10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerint ph_GetWMInfo(_THIS, SDL_SysWMinfo *info) 10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if (info->version.major <= SDL_MAJOR_VERSION) 10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return 1; 11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 11246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner else 11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_SetError("Application not compiled with SDL %d.%d\n", 11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_MAJOR_VERSION, SDL_MINOR_VERSION); 11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return -1; 11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 119