diff --git a/openglcanvas.cpp b/openglcanvas.cpp index 27a64627533860042295c9109bf476dc4fdbb5ac..ca83ae7b6eae0cf6219978483125f6d7325c5feb 100644 --- a/openglcanvas.cpp +++ b/openglcanvas.cpp @@ -446,7 +446,9 @@ int OpenGLCanvas::getTextureSize(const char * const progname, const char * textu pnm_readpaminit(in_file,&inpam,sizeof(struct pam)); #endif - int size = inpam.width*inpam.height*inpam.depth*inpam.bytes_per_sample; + image_size_x=inpam.width; + image_size_y=inpam.height; + int size = image_size_x*image_size_y*inpam.depth*inpam.bytes_per_sample; pm_close(in_file); //fprintf(stderr,"size=%d\n",size); @@ -590,6 +592,22 @@ void OpenGLCanvas::setShaders() { } +void OpenGLCanvas::mousePressEvent(QMouseEvent *event){ + lastPos=event->pos(); + //fprintf(stderr,"mouse click\n"); +} + +void OpenGLCanvas::mouseMoveEvent(QMouseEvent *event){ + // scroll with the left button + if(event->buttons()==Qt::LeftButton){ + // compute the delta and move the image + center_lambda+=(event->x()-lastPos.x())*3.1415926f/image_size_x; + center_phi+=(event->y()-lastPos.y())*3.1415926f/image_size_y; + lastPos=event->pos(); + updateGL(); + } +} + void OpenGLCanvas::paintGL(){ float fov_rads = (fov/180.f)*1.5708f; diff --git a/openglcanvas.h b/openglcanvas.h index 88dced1c7929508ed8db2306af347a1745324ffa..364ce83d80f5a5182f0ff4b607be84d26a5c8b3c 100644 --- a/openglcanvas.h +++ b/openglcanvas.h @@ -55,6 +55,8 @@ protected: void readTextureBytes(const char * const progname, const char * texturePath,unsigned char * textureBytes,int * outImageWidth, int * outImageHeight); char *textFileRead(char *fn); void setShaders(); + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); signals: void fps(QString newFPS); @@ -93,6 +95,12 @@ private: // options set in the rc file char* shader_dir; char* input_image_file; + + // input image size (determined automatically) + int image_size_x; + int image_size_y; + + QPoint lastPos; // mouse click position }; #endif // OPENGLCANVAS_H