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