benoitrigolleau@132: #include benoitrigolleau@132: #include benoitrigolleau@132: #include benoitrigolleau@132: #include "SDLWidget.h" ivand_qmul@138: extern int Videow; ivand_qmul@138: extern int Videoh; benoitrigolleau@132: benoitrigolleau@132: SDLWidget::SDLWidget() benoitrigolleau@145: :windowInitialized(false), screen(0),m_width(0), m_height(0) benoitrigolleau@132: { benoitrigolleau@132: setAttribute(Qt::WA_PaintOnScreen); benoitrigolleau@132: setAttribute(Qt::WA_NoSystemBackground); benoitrigolleau@139: zoomFactor = 1; benoitrigolleau@145: connect(this,SIGNAL(initSizeChanged()),this,SLOT(updateMinSize())); benoitrigolleau@139: benoitrigolleau@132: } benoitrigolleau@132: benoitrigolleau@132: SDLWidget::~SDLWidget() benoitrigolleau@132: { benoitrigolleau@132: SDL_Quit(); benoitrigolleau@132: } benoitrigolleau@132: benoitrigolleau@139: void SDLWidget::setZoomFactor( float f ) benoitrigolleau@139: { benoitrigolleau@139: int w, h; benoitrigolleau@139: benoitrigolleau@139: if( f == zoomFactor ) benoitrigolleau@139: return; benoitrigolleau@139: benoitrigolleau@139: zoomFactor = f; benoitrigolleau@145: emit(zoomfactorChanged(f)); benoitrigolleau@139: benoitrigolleau@145: w = m_width*zoomFactor; benoitrigolleau@145: h = m_height*zoomFactor; benoitrigolleau@139: setMinimumSize( w, h ); benoitrigolleau@139: emit(sizeChanged(w,h)); benoitrigolleau@145: emit(zoomfactorChanged(f)); benoitrigolleau@139: benoitrigolleau@139: /*QWidget *p = dynamic_cast( parent() ); benoitrigolleau@139: if( p ){ benoitrigolleau@139: resize( p->width(), p->height() ); benoitrigolleau@139: }*/ benoitrigolleau@139: } benoitrigolleau@139: benoitrigolleau@139: void SDLWidget::wheelEvent( QWheelEvent *event ) benoitrigolleau@139: { benoitrigolleau@139: float f; benoitrigolleau@139: benoitrigolleau@139: f = zoomFactor + 0.001*event->delta(); benoitrigolleau@145: if( f < 32.0/m_width ){ benoitrigolleau@145: f = 32.0/m_height; benoitrigolleau@139: } benoitrigolleau@139: benoitrigolleau@139: setZoomFactor( f ); benoitrigolleau@139: } benoitrigolleau@139: benoitrigolleau@145: void SDLWidget::setInitSize(int w, int h){ benoitrigolleau@145: if(m_width<=0 && m_height<=0){ benoitrigolleau@145: m_width = w; benoitrigolleau@145: m_height =h; benoitrigolleau@145: emit(initSizeChanged()); benoitrigolleau@145: } benoitrigolleau@145: } benoitrigolleau@145: benoitrigolleau@145: void SDLWidget::updateMinSize() benoitrigolleau@145: { benoitrigolleau@145: setMinimumSize( m_width*zoomFactor,m_height*zoomFactor ); benoitrigolleau@145: } benoitrigolleau@145: benoitrigolleau@145: benoitrigolleau@139: benoitrigolleau@132: void SDLWidget::showEvent(QShowEvent *e) benoitrigolleau@132: { benoitrigolleau@132: (void)e; ivand_qmul@138: benoitrigolleau@132: if(!windowInitialized) benoitrigolleau@132: { benoitrigolleau@132: // it's here the link between SDL and QT benoitrigolleau@132: char windowid[64]; benoitrigolleau@132: #ifdef Q_WS_WIN benoitrigolleau@132: sprintf(windowid, "SDL_WINDOWID=0x%lx", reinterpret_cast(winId())); benoitrigolleau@132: #elif defined Q_WS_X11 benoitrigolleau@132: sprintf(windowid, "SDL_WINDOWID=0x%lx", winId()); benoitrigolleau@132: #else benoitrigolleau@132: qFatal("uncorrect window ID"); benoitrigolleau@132: #endif benoitrigolleau@132: SDL_putenv(windowid); benoitrigolleau@132: benoitrigolleau@132: //SDL_Init(SDL_INIT_VIDEO); benoitrigolleau@132: //screen = SDL_SetVideoMode(width(), height(), 32, SDL_SWSURFACE); benoitrigolleau@132: windowInitialized = true; benoitrigolleau@132: } benoitrigolleau@139: } benoitrigolleau@139: