annotate data/model/SDLWidget.cpp @ 149:735e67e91508

(none)
author benoitrigolleau
date Wed, 14 Nov 2007 10:41:46 +0000
parents e63e8272dcb0
children c946c19e6329
rev   line source
benoitrigolleau@132 1 #include <vector>
benoitrigolleau@132 2 #include <cstdlib>
benoitrigolleau@132 3 #include <ctime>
benoitrigolleau@132 4 #include "SDLWidget.h"
ivand_qmul@138 5 extern int Videow;
ivand_qmul@138 6 extern int Videoh;
benoitrigolleau@132 7
benoitrigolleau@132 8 SDLWidget::SDLWidget()
benoitrigolleau@145 9 :windowInitialized(false), screen(0),m_width(0), m_height(0)
benoitrigolleau@132 10 {
benoitrigolleau@132 11 setAttribute(Qt::WA_PaintOnScreen);
benoitrigolleau@132 12 setAttribute(Qt::WA_NoSystemBackground);
benoitrigolleau@139 13 zoomFactor = 1;
benoitrigolleau@145 14 connect(this,SIGNAL(initSizeChanged()),this,SLOT(updateMinSize()));
benoitrigolleau@139 15
benoitrigolleau@132 16 }
benoitrigolleau@132 17
benoitrigolleau@132 18 SDLWidget::~SDLWidget()
benoitrigolleau@132 19 {
benoitrigolleau@132 20 SDL_Quit();
benoitrigolleau@132 21 }
benoitrigolleau@132 22
benoitrigolleau@139 23 void SDLWidget::setZoomFactor( float f )
benoitrigolleau@139 24 {
benoitrigolleau@139 25 int w, h;
benoitrigolleau@139 26
benoitrigolleau@139 27 if( f == zoomFactor )
benoitrigolleau@139 28 return;
benoitrigolleau@139 29
benoitrigolleau@139 30 zoomFactor = f;
benoitrigolleau@145 31 emit(zoomfactorChanged(f));
benoitrigolleau@139 32
benoitrigolleau@145 33 w = m_width*zoomFactor;
benoitrigolleau@145 34 h = m_height*zoomFactor;
benoitrigolleau@139 35 setMinimumSize( w, h );
benoitrigolleau@139 36 emit(sizeChanged(w,h));
benoitrigolleau@145 37 emit(zoomfactorChanged(f));
benoitrigolleau@139 38
benoitrigolleau@139 39 /*QWidget *p = dynamic_cast<QWidget*>( parent() );
benoitrigolleau@139 40 if( p ){
benoitrigolleau@139 41 resize( p->width(), p->height() );
benoitrigolleau@139 42 }*/
benoitrigolleau@139 43 }
benoitrigolleau@139 44
benoitrigolleau@139 45 void SDLWidget::wheelEvent( QWheelEvent *event )
benoitrigolleau@139 46 {
benoitrigolleau@139 47 float f;
benoitrigolleau@139 48
benoitrigolleau@139 49 f = zoomFactor + 0.001*event->delta();
benoitrigolleau@145 50 if( f < 32.0/m_width ){
benoitrigolleau@145 51 f = 32.0/m_height;
benoitrigolleau@139 52 }
benoitrigolleau@139 53
benoitrigolleau@139 54 setZoomFactor( f );
benoitrigolleau@139 55 }
benoitrigolleau@139 56
benoitrigolleau@145 57 void SDLWidget::setInitSize(int w, int h){
benoitrigolleau@145 58 if(m_width<=0 && m_height<=0){
benoitrigolleau@145 59 m_width = w;
benoitrigolleau@145 60 m_height =h;
benoitrigolleau@145 61 emit(initSizeChanged());
benoitrigolleau@145 62 }
benoitrigolleau@145 63 }
benoitrigolleau@145 64
benoitrigolleau@145 65 void SDLWidget::updateMinSize()
benoitrigolleau@145 66 {
benoitrigolleau@145 67 setMinimumSize( m_width*zoomFactor,m_height*zoomFactor );
benoitrigolleau@145 68 }
benoitrigolleau@145 69
benoitrigolleau@145 70
benoitrigolleau@139 71
benoitrigolleau@132 72 void SDLWidget::showEvent(QShowEvent *e)
benoitrigolleau@132 73 {
benoitrigolleau@132 74 (void)e;
ivand_qmul@138 75
benoitrigolleau@132 76 if(!windowInitialized)
benoitrigolleau@132 77 {
benoitrigolleau@132 78 // it's here the link between SDL and QT
benoitrigolleau@132 79 char windowid[64];
benoitrigolleau@132 80 #ifdef Q_WS_WIN
benoitrigolleau@132 81 sprintf(windowid, "SDL_WINDOWID=0x%lx", reinterpret_cast<qlonglong>(winId()));
benoitrigolleau@132 82 #elif defined Q_WS_X11
benoitrigolleau@132 83 sprintf(windowid, "SDL_WINDOWID=0x%lx", winId());
benoitrigolleau@132 84 #else
benoitrigolleau@132 85 qFatal("uncorrect window ID");
benoitrigolleau@132 86 #endif
benoitrigolleau@132 87 SDL_putenv(windowid);
benoitrigolleau@132 88
benoitrigolleau@132 89 //SDL_Init(SDL_INIT_VIDEO);
benoitrigolleau@132 90 //screen = SDL_SetVideoMode(width(), height(), 32, SDL_SWSURFACE);
benoitrigolleau@132 91 windowInitialized = true;
benoitrigolleau@132 92 }
benoitrigolleau@139 93 }
benoitrigolleau@139 94