//----------------------------------------------------------------------------- // pick() -- Perform for select/pick operation; returns the selected (picked) // graphic or zero(0) if nothing was selected. // // 1) When item == 0, returns nearest (by depth buffer) selected entry. // 2) When item < 0, returns furthest (by depth buffer) selected entry. // 3) When item > 0, returns the item'th selected entry or the first entry if // there are less than 'item' entries // 4) Returns zero(0) when there are no entries in the select buffer or if the // Graphic for the select ID is not found. //----------------------------------------------------------------------------- BasicGL::Graphic* GlutDisplay::pick(const int item) { GLint viewport[4]; glGetIntegerv(GL_VIEWPORT,viewport); // make sure we are starting at 0, 0 int xm = 0, ym = 0; getMouse(&xm,&ym); int x = xm; int y = viewport[3] - ym; glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluPickMatrix(x, y, getPickWidth(), getPickHeight(), viewport); // Get our ortho parameters GLdouble oLeft(0), oRight(0), oBottom(0), oTop(0), oNear(0), oFar(0); getOrtho(oLeft, oRight, oBottom, oTop, oNear, oFar); glOrtho(oLeft, oRight, oBottom, oTop, oNear, oFar); glMatrixMode(GL_MODELVIEW); if (getDisplayOrientation() != NORMAL) { glPushMatrix(); if (getDisplayOrientation() == CW90) glRotated(-90.0, 0.0, 0.0, 1.0); else if (getDisplayOrientation() == CCW90) glRotated(90.0, 0.0, 0.0, 1.0); else glRotated(180.0, 0.0, 0.0, 1.0); } static const unsigned int MAX_BUFF_SIZE = 1024; GLuint sbuff[MAX_BUFF_SIZE]; clearSelectBuffer(sbuff,MAX_BUFF_SIZE); glSelectBuffer(MAX_BUFF_SIZE, sbuff); glRenderMode(GL_SELECT); glInitNames(); draw(); GLint hits = glRenderMode(GL_RENDER); if (getDisplayOrientation() != NORMAL) glPopMatrix(); Graphic* selected = findSelected(hits, sbuff, item); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); return selected; }
static String getDisplayInfo() { const Desktop::Displays& displays = Desktop::getInstance().getDisplays(); String displayDesc; for (int i = 0; i < displays.displays.size(); ++i) { const Desktop::Displays::Display display = displays.displays.getReference(i); displayDesc << "Display " << (i + 1) << (display.isMain ? " (main)" : "") << ":" << newLine << " Total area: " << display.totalArea.toString() << newLine << " User area: " << display.userArea.toString() << newLine << " DPI: " << display.dpi << newLine << " Scale: " << display.scale << newLine << newLine; } displayDesc << "Orientation: " << getDisplayOrientation() << newLine; return displayDesc; }