view data/model/SDLWidget.cpp @ 152:46688275b5d4

correct a stupid bug in SDLWidget
author benoitrigolleau
date Thu, 15 Nov 2007 09:19:15 +0000
parents f2d2c1084e7c
children 2ac52ea3c1c4
line wrap: on
line source
#include <vector>
#include <cstdlib>
#include <ctime>
#include "SDLWidget.h"
float zoomFivan=1;



SDLWidget::SDLWidget()
	:windowInitialized(false), screen(0),m_width(0), m_height(0)
	{
		setAttribute(Qt::WA_PaintOnScreen);
		setAttribute(Qt::WA_NoSystemBackground);
		m_zoomFactor = 1;
		connect(this,SIGNAL(initSizeChanged()),this,SLOT(updateMinSize()));

	}

SDLWidget::~SDLWidget()
	{
		SDL_Quit();
	}

void SDLWidget::setZoomFactor( float f )
{
	int w, h;
	
	if( f == m_zoomFactor )
		return;

	m_zoomFactor = f;

	w = m_width*m_zoomFactor;
	h = m_height*m_zoomFactor;
	setMinimumSize( w, h );
	emit(sizeChanged(w,h));
	emit(zoomfactorChanged(f));
	
	/*QWidget *p = dynamic_cast<QWidget*>( parent() );
	if( p ){
		resize( p->width(), p->height() );
	}*/
}

void SDLWidget::wheelEvent( QWheelEvent *event )
{
	float f;

	f = m_zoomFactor + 0.001*event->delta();

	if( f < 32.0/m_width ){
		f = 32.0/m_height;
	}
	if((int)(m_width*f)%4){
		f = (m_width*f - (int)(m_width*f)%4)/m_width;
	}
zoomFivan=f;
	setZoomFactor( f );
}

void SDLWidget::setInitSize(int w, int h){
	if(m_width<=0 && m_height<=0){
		m_width = w;
		m_height =h;
		emit(initSizeChanged());
	}
}

void SDLWidget::updateMinSize()
{
	setMinimumSize( m_width*m_zoomFactor,m_height*m_zoomFactor );
}



void SDLWidget::showEvent(QShowEvent *e)
	{
		(void)e;
		
		if(!windowInitialized)
		{
			// it's here the link between SDL and QT
			char windowid[64];
#ifdef Q_WS_WIN
			sprintf(windowid, "SDL_WINDOWID=0x%lx", reinterpret_cast<qlonglong>(winId()));
#elif defined Q_WS_X11
			sprintf(windowid, "SDL_WINDOWID=0x%lx", winId());
#else
			qFatal("uncorrect window ID");
#endif
			SDL_putenv(windowid);

			//SDL_Init(SDL_INIT_VIDEO);
			//screen = SDL_SetVideoMode(width(), height(), 32, SDL_SWSURFACE);
			windowInitialized = true;
		}
	}