#include "SubViewWin.h" #include SubViewWin::SubViewWin() { // Create subwindows glutWinSubWindow(); // yiq window yiqwin = new YIQWin(); glutPositionWindow(20,20); // Double buffer glutInitDisplayMode(GLUT_DOUBLE); // Image window imagewin = new ImageSelectorWin(); glutPositionWindow(240,20); // Set single buffer again glutInitDisplayMode(GLUT_SINGLE); // Histogram window histwin = new HistogramWin(); glutPositionWindow(20,240); // Line View window linewin = new LinePlotWin(); glutPositionWindow(20,480); // Set subsequent windows back to the root glutWinMainWindow(); } SubViewWin::~SubViewWin() { delete yiqwin; delete imagewin; delete histwin; delete linewin; } void SubViewWin::attachImage(ImageInfo info) { // Add to image imagewin->attachImage(info); // Add to yiq yiqwin->dataImage=info; histwin->dataImage=info; linewin->dataImage=info; // Resize glutSetWindow(glWindowNum); int xresize = info.xsize+260; int yresize = info.ysize+40; if (yresize<720) yresize=720; glutReshapeWindow(xresize,yresize); } void SubViewWin::idle() { if (yiqwin->xselection!= imagewin->xselection || yiqwin->selectionsize!=imagewin->xselectionsize || yiqwin->yselection!= imagewin->yselection) { yiqwin->xselection=imagewin->xselection; yiqwin->yselection=imagewin->yselection; yiqwin->selectionsize=imagewin->xselectionsize; glutSetWindow(yiqwin->glWindowNum); glutPostRedisplay(); } if (histwin->xselection!= imagewin->xselection || histwin->selectionsize!=imagewin->xselectionsize || histwin->yselection!= imagewin->yselection) { histwin->xselection=imagewin->xselection; histwin->yselection=imagewin->yselection; histwin->selectionsize=imagewin->xselectionsize; glutSetWindow(histwin->glWindowNum); glutPostRedisplay(); } if (linewin->xselection!= imagewin->xselection || linewin->selectionsize!=imagewin->xselectionsize || linewin->yselection!= imagewin->yselection) { linewin->xselection=imagewin->xselection; linewin->yselection=imagewin->yselection; linewin->selectionsize=imagewin->xselectionsize; glutSetWindow(linewin->glWindowNum); glutPostRedisplay(); } } void SubViewWin::display() { glClearColor(1,1,1,1); glClear(GL_COLOR_BUFFER_BIT); glutSetWindow(linewin->glWindowNum); glutPostRedisplay(); glutSetWindow(histwin->glWindowNum); glutPostRedisplay(); glutSetWindow(yiqwin->glWindowNum); glutPostRedisplay(); glutSetWindow(imagewin->glWindowNum); glutPostRedisplay(); } void SubViewWin::keyboard(unsigned char key, int x, int y) { if (key=='q' || key==27) exit(0); if (key=='m') { // Print the current selected rectangle int l,t,r,b; l = imagewin->xselection - imagewin->xselectionsize; r = imagewin->xselection + imagewin->xselectionsize; t = imagewin->yselection - imagewin->xselectionsize; b = imagewin->yselection + imagewin->xselectionsize; printf ("%d %d %d %d \n",l,t/2,r,b/2); } }