annotate data/model/SDLWidget.cpp @ 151:f2d2c1084e7c

very good zoom out :P
author benoitrigolleau
date Wed, 14 Nov 2007 17:27:42 +0000
parents c946c19e6329
children 46688275b5d4
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@139 14 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
ivand_qmul@150 33 w = m_width*zoomFactor;
ivand_qmul@150 34 h = m_height*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 /*if(event->delta()>0){
benoitrigolleau@151 50 f = zoomFactor*2;
benoitrigolleau@151 51 }else{
benoitrigolleau@151 52 f = zoomFactor/2;
benoitrigolleau@151 53 }*/
benoitrigolleau@151 54 f = m_zoomFactor + 0.001*event->delta();
benoitrigolleau@151 55
ivand_qmul@150 56 if( f < 32.0/m_width ){
ivand_qmul@150 57 f = 32.0/m_height;
ivand_qmul@150 58 }
benoitrigolleau@151 59 if((int)(m_width*f)%4){
benoitrigolleau@151 60 f = (m_width*f - (int)(m_width*f)%4)/m_width;
benoitrigolleau@151 61 }
ivand_qmul@150 62 zoomFivan=f;
ivand_qmul@150 63 setZoomFactor( f );
benoitrigolleau@139 64 }
benoitrigolleau@139 65
benoitrigolleau@145 66 void SDLWidget::setInitSize(int w, int h){
benoitrigolleau@145 67 if(m_width<=0 && m_height<=0){
benoitrigolleau@145 68 m_width = w;
benoitrigolleau@145 69 m_height =h;
benoitrigolleau@145 70 emit(initSizeChanged());
benoitrigolleau@145 71 }
benoitrigolleau@145 72 }
benoitrigolleau@145 73
benoitrigolleau@145 74 void SDLWidget::updateMinSize()
benoitrigolleau@145 75 {
benoitrigolleau@151 76 setMinimumSize( m_width*m_zoomFactor,m_height*m_zoomFactor );
benoitrigolleau@145 77 }
benoitrigolleau@145 78
benoitrigolleau@145 79
benoitrigolleau@139 80
benoitrigolleau@132 81 void SDLWidget::showEvent(QShowEvent *e)
ivand_qmul@150 82 {
benoitrigolleau@132 83 (void)e;
ivand_qmul@138 84
benoitrigolleau@132 85 if(!windowInitialized)
benoitrigolleau@132 86 {
benoitrigolleau@132 87 // it's here the link between SDL and QT
ivand_qmul@150 88 char windowid[64];
benoitrigolleau@132 89 #ifdef Q_WS_WIN
ivand_qmul@150 90 sprintf(windowid, "SDL_WINDOWID=0x%lx", reinterpret_cast<qlonglong>(winId()));
ivand_qmul@150 91 #elif defined Q_WS_X11
ivand_qmul@150 92 sprintf(windowid, "SDL_WINDOWID=0x%lx", winId());
ivand_qmul@150 93 #else
ivand_qmul@150 94 qFatal("uncorrect window ID");
benoitrigolleau@132 95 #endif
benoitrigolleau@132 96 SDL_putenv(windowid);
benoitrigolleau@132 97
benoitrigolleau@132 98 //SDL_Init(SDL_INIT_VIDEO);
benoitrigolleau@132 99 //screen = SDL_SetVideoMode(width(), height(), 32, SDL_SWSURFACE);
benoitrigolleau@132 100 windowInitialized = true;
benoitrigolleau@132 101 }
benoitrigolleau@139 102 }
benoitrigolleau@139 103