Mercurial > hg > easaier-soundaccess
view 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 |
line wrap: on
line source
#include <vector> #include <cstdlib> #include <ctime> #include "SDLWidget.h" float zoomFivan=1; SDLWidget::SDLWidget() :windowInitialized(false), screen(0),m_width(0), m_height(0) { setAttribute(Qt::WA_PaintOnScreen); setAttribute(Qt::WA_NoSystemBackground); m_zoomFactor = 1; connect(this,SIGNAL(initSizeChanged()),this,SLOT(updateMinSize())); } SDLWidget::~SDLWidget() { SDL_Quit(); } void SDLWidget::setZoomFactor( float f ) { int w, h; if( f == m_zoomFactor ) return; m_zoomFactor = f; w = m_width*m_zoomFactor; h = m_height*m_zoomFactor; setMinimumSize( w, h ); emit(sizeChanged(w,h)); emit(zoomfactorChanged(f)); /*QWidget *p = dynamic_cast<QWidget*>( parent() ); if( p ){ resize( p->width(), p->height() ); }*/ } void SDLWidget::wheelEvent( QWheelEvent *event ) { float f; f = m_zoomFactor + 0.001*event->delta(); if( f < 32.0/m_width ){ f = 32.0/m_height; } if((int)(m_width*f)%4){ f = (m_width*f - (int)(m_width*f)%4)/m_width; } zoomFivan=f; setZoomFactor( f ); } void SDLWidget::setInitSize(int w, int h){ if(m_width<=0 && m_height<=0){ m_width = w; m_height =h; emit(initSizeChanged()); } } void SDLWidget::updateMinSize() { setMinimumSize( m_width*m_zoomFactor,m_height*m_zoomFactor ); } void SDLWidget::showEvent(QShowEvent *e) { (void)e; if(!windowInitialized) { // it's here the link between SDL and QT char windowid[64]; #ifdef Q_WS_WIN sprintf(windowid, "SDL_WINDOWID=0x%lx", reinterpret_cast<qlonglong>(winId())); #elif defined Q_WS_X11 sprintf(windowid, "SDL_WINDOWID=0x%lx", winId()); #else qFatal("uncorrect window ID"); #endif SDL_putenv(windowid); //SDL_Init(SDL_INIT_VIDEO); //screen = SDL_SetVideoMode(width(), height(), 32, SDL_SWSURFACE); windowInitialized = true; } }