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
|