#include <QtGui/QMouseEvent>#include "videoWidget.hh"using namespace mimas;VideoWidget::VideoWidget( QWidget *parent, Qt::WFlags ):QGLWidget( parent ), offsetX(0), offsetY(0), zoom(1.0){}void VideoWidget::setImage( const image< rgba< unsigned char > > &_img ){setImage( 0,0, _img.getWidth(), _img.getHeight(), _img );}void VideoWidget::setImage( int _offsetX, int _offsetY,int _width, int _height,const image< rgba< unsigned char > > &_img ){offsetX = _offsetX;offsetY = _offsetY;img = _img;adaptSize( _width, _height );update();}void VideoWidget::wheelEvent( QWheelEvent *e ){zoom += e->delta() / 1200.0;if ( zoom < 0.1 ) zoom = 0.1;if ( zoom > 2.5 ) zoom = 2.5;adaptSize( img.getWidth(), img.getHeight() );update();}void VideoWidget::initializeGL(void){qglClearColor( QColor( 32, 32, 32 ) );}void VideoWidget::resizeGL( int w, int h ){glViewport( 0, 0, (GLint)w, (GLint)h );glMatrixMode( GL_PROJECTION );glLoadIdentity();glOrtho( 0, width(), height(), 0, -1, 1 );glMatrixMode( GL_MODELVIEW );}void VideoWidget::paintGL(void){glClear( GL_COLOR_BUFFER_BIT );if ( img.initialised() ) {glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );// glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );// glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );// glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );glRasterPos2f( offsetX * zoom, offsetY * zoom );glPixelZoom( zoom, -zoom );// Direct access to image-memory!glDrawPixels( img.getWidth(), img.getHeight(),GL_BGRA, GL_UNSIGNED_BYTE, img.rawData() );};};void VideoWidget::adaptSize( int w, int h ){intnewW = (int)( w * zoom ),newH = (int)( h * zoom );if ( width() != newW || height() != newH ) {resize( newW, newH );};}