bool GiGraphics::setClipWorld(const Box2d& rectWorld) { bool ret = false; if (isDrawing() && !rectWorld.isEmpty()) { Box2d box (rectWorld * xf().worldToDisplay()); box.intersectWith(Box2d(m_impl->clipBox0)); if (!box.isEmpty(Tol(1, 0))) { if (box != Box2d(m_impl->clipBox)) { box.get(m_impl->clipBox); m_impl->rectDraw = box; m_impl->rectDraw.inflate(GiGraphicsImpl::CLIP_INFLATE); m_impl->rectDrawM = m_impl->rectDraw * xf().displayToModel(); m_impl->rectDrawW = m_impl->rectDrawM * xf().modelToWorld(); SafeCall(m_impl->canvas, _clipBoxChanged(m_impl->clipBox)); } ret = true; } } return ret; }
float GLMoblet::getActualFramesPerSecond() const { if(!isDrawing()) return 0.0f; else { int millisSinceStartDrawing = maGetMilliSecondCount() - mMillisOfStartDrawing; if(millisSinceStartDrawing == 0) return 0; return mFramesSinceStartDrawing / (0.001f * (float)millisSinceStartDrawing); } }
bool GdiPrintContext::swapBuffer() { //if (!isActivated() || isDrawing()) return false; if (isDrawing()) return false; if (NULL == memBmp_ || NULL == memDC_ || NULL == printDC_) return false; setDrawing(true); // copy off-screen buffer to window's DC #if 1 // method #1: [use DDB & DIB] the image is not scaled to fit the rectangle const bool ret = TRUE == BitBlt( printDC_, drawRegion_.left, drawRegion_.bottom, drawRegion_.getWidth(), drawRegion_.getHeight(), memDC_, 0, 0, //drawRegion_.left, drawRegion_.bottom, SRCCOPY ); #elif 0 // method #2: [use DDB & DIB] the image is scaled to fit the rectangle // caution: // all negative coordinate values are ignored. // instead, these values are regarded as absolute(positive) values. const bool ret = TRUE == StretchBlt( printDC_, drawRegion_.left, drawRegion_.bottom, drawRegion_.getWidth(), drawRegion_.getHeight(), memDC_, //(int)std::floor(viewingRegion_.left + 0.5), (int)std::floor(viewingRegion_.bottom + 0.5), (int)std::floor(viewingRegion_.getWidth() + 0.5), (int)std::floor(viewingRegion_.getHeight() + 0.5), 0, 0, (int)std::floor(viewingRegion_.getWidth() + 0.5), (int)std::floor(viewingRegion_.getHeight() + 0.5), SRCCOPY ); #else // method #3: [use DIB] the image is scaled to fit the rectangle // caution: // all negative coordinate values are ignored. // instead, these values are regarded as absolute(positive) values. const bool ret = TRUE == StretchDIBits( printDC_, drawRegion_.left, drawRegion_.bottom, drawRegion_.getWidth(), drawRegion_.getHeight(), //(int)std::floor(viewingRegion_.left + 0.5), (int)std::floor(viewingRegion_.bottom + 0.5), (int)std::floor(viewingRegion_.getWidth() + 0.5), (int)std::floor(viewingRegion_.getHeight() + 0.5), 0, 0, (int)std::floor(viewingRegion_.getWidth() + 0.5), (int)std::floor(viewingRegion_.getHeight() + 0.5), dibBits_, &bmiDIB, !isPaletteUsed_ ? DIB_RGB_COLORS : DIB_PAL_COLORS, SRCCOPY ); #endif setDrawing(false); return ret; }
bool WglBitmapBufferedContext::swapBuffer() { //if (!isActivated() || isDrawing()) return false; if (isDrawing()) return false; if (NULL == memBmp_ || NULL == memDC_ || NULL == hDC_) return false; setDrawing(true); // copy off-screen buffer to window's DC const bool ret = TRUE == BitBlt( hDC_, drawRegion_.left, drawRegion_.bottom, drawRegion_.getWidth(), drawRegion_.getHeight(), memDC_, 0, 0, //drawRegion_.left, drawRegion_.bottom, SRCCOPY ); setDrawing(false); return ret; }
bool GiGraphics::setClipBox(const RECT_2D& rc) { if (!isDrawing() || isStopping()) return false; bool ret = false; Box2d rect; if (!rect.intersectWith(Box2d(rc), Box2d(m_impl->clipBox0)).isEmpty()) { if (rect != Box2d(m_impl->clipBox)) { rect.get(m_impl->clipBox); m_impl->rectDraw.set(Box2d(rc)); m_impl->rectDraw.inflate(GiGraphicsImpl::CLIP_INFLATE); m_impl->rectDrawM = m_impl->rectDraw * xf().displayToModel(); m_impl->rectDrawW = m_impl->rectDrawM * xf().modelToWorld(); SafeCall(m_impl->canvas, clipRect(m_impl->clipBox.left, m_impl->clipBox.top, m_impl->clipBox.width(), m_impl->clipBox.height())); } ret = true; } return ret; }