int AbstractMouseSelection::handleEvent(const SoEvent * const ev, const SbViewportRegion& vp) { int ret=Continue; const SbVec2s& sz = vp.getWindowSize(); short w,h; sz.getValue(w,h); SbVec2s loc = ev->getPosition(); short x,y; loc.getValue(x,y); y = h-y; // the origin is at the left bottom corner (instead of left top corner) if (ev->getTypeId().isDerivedFrom(SoMouseButtonEvent::getClassTypeId())) { const SoMouseButtonEvent * const event = (const SoMouseButtonEvent *) ev; const SbBool press = event->getState() == SoButtonEvent::DOWN ? TRUE : FALSE; if (press) { _clPoly.push_back(ev->getPosition()); ret = mouseButtonEvent(static_cast<const SoMouseButtonEvent*>(ev), QPoint(x,y)); } else { ret = mouseButtonEvent(static_cast<const SoMouseButtonEvent*>(ev), QPoint(x,y)); } } else if (ev->getTypeId().isDerivedFrom(SoLocation2Event::getClassTypeId())) { ret = locationEvent(static_cast<const SoLocation2Event*>(ev), QPoint(x,y)); } else if (ev->getTypeId().isDerivedFrom(SoKeyboardEvent::getClassTypeId())) { ret = keyboardEvent(static_cast<const SoKeyboardEvent*>(ev)); } if (ret == Restart) _clPoly.clear(); return ret; }
void SoViewportRegion::setViewportRegion(const SbViewportRegion vp) { SbVec2s winSize; viewport.setViewport(vp.getViewportOrigin(), vp.getViewportSize()); viewport.setWindowSize (vp.getWindowSize()); viewport.setViewportPixels(vp.getViewportOriginPixels(), vp.getViewportSizePixels()); }
/*! Update our SoGLRenderAction's viewport settings. This will change \e both the information about window dimensions and the actual viewport size and origin. \sa setWindowSize() */ void SoSceneManager::setViewportRegion(const SbViewportRegion & newregion) { #if COIN_DEBUG && 0 // debug const SbVec2s & ws = newregion.getWindowSize(); const SbVec2s & vpop = newregion.getViewportOriginPixels(); const SbVec2s & vpsp = newregion.getViewportSizePixels(); SoDebugError::postInfo("SoSceneManager::setViewportRegion", "windowsize=(%d, %d) " "viewportorigin=(%d, %d) " "viewportsize=(%d, %d) ", ws[0], ws[1], vpop[0], vpop[1], vpsp[0], vpsp[1]); #endif // debug PRIVATE(this)->rendermanager->setViewportRegion(newregion); PRIVATE(this)->eventmanager->setViewportRegion(newregion); }