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/* Resize event handling code for SDL */
2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_events.h"
2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_events_c.h"
2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../video/SDL_sysvideo.h"
2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Keep the last resize event so we don't post duplicates */
3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstatic struct {
3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int w;
3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int h;
3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} last_resize;
3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* This is global for SDL_eventloop.c */
3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerint SDL_PrivateResize(int w, int h)
3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{
4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int posted;
4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_Event events[32];
4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	/* See if this event would change the video surface */
4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	if ( !w || !h
4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef __OS2__
4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner            || ((last_resize.w == w) && (last_resize.h == h))
4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    ) {
4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		return(0);
5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	}
5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner        last_resize.w = w;
5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner        last_resize.h = h;
5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	if ( ! SDL_VideoSurface ||
5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	     ((w == SDL_VideoSurface->w) && (h == SDL_VideoSurface->h)) ) {
5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		return(0);
5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	}
5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	/* Pull out all old resize events */
5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_PeepEvents(events, sizeof(events)/sizeof(events[0]),
6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	                    SDL_GETEVENT, SDL_VIDEORESIZEMASK);
6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	/* Post the event, if desired */
6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	posted = 0;
6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	if ( SDL_ProcessEvents[SDL_VIDEORESIZE] == SDL_ENABLE ) {
6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		SDL_Event event;
6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		event.type = SDL_VIDEORESIZE;
6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		event.resize.w = w;
6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		event.resize.h = h;
6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		if ( (SDL_EventOK == NULL) || (*SDL_EventOK)(&event) ) {
7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner			posted = 1;
7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner			SDL_PushEvent(&event);
7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		}
7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	}
7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	return(posted);
7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner}
76