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