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
|