reg_t GfxPaint16::bitsSave(const Common::Rect &rect, byte screenMask) { reg_t memoryId; byte *memoryPtr; int size; Common::Rect workerRect(rect.left, rect.top, rect.right, rect.bottom); workerRect.clip(_ports->_curPort->rect); if (workerRect.isEmpty()) // nothing to save return NULL_REG; if (screenMask == GFX_SCREEN_MASK_DISPLAY) { // The coordinates we are given are actually up-to-including right/bottom - we extend accordingly workerRect.bottom++; workerRect.right++; // Adjust rect to upscaled hires, but dont adjust according to port _screen->adjustToUpscaledCoordinates(workerRect.top, workerRect.left); _screen->adjustToUpscaledCoordinates(workerRect.bottom, workerRect.right); } else { _ports->offsetRect(workerRect); } // now actually ask _screen how much space it will need for saving size = _screen->bitsGetDataSize(workerRect, screenMask); memoryId = _segMan->allocateHunkEntry("SaveBits()", size); memoryPtr = _segMan->getHunkPointer(memoryId); if (memoryPtr) _screen->bitsSave(workerRect, screenMask, memoryPtr); return memoryId; }
void GfxPaint16::bitsShow(const Common::Rect &rect) { Common::Rect workerRect(rect.left, rect.top, rect.right, rect.bottom); workerRect.clip(_ports->_curPort->rect); if (workerRect.isEmpty()) // nothing to show return; _ports->offsetRect(workerRect); _screen->copyRectToScreen(workerRect); }
void GfxPaint16::bitsShow(const Common::Rect &rect) { Common::Rect workerRect(rect.left, rect.top, rect.right, rect.bottom); workerRect.clip(_ports->_curPort->rect); if (workerRect.isEmpty()) // nothing to show return; _ports->offsetRect(workerRect); // We adjust the left/right coordinates to even coordinates workerRect.left &= 0xFFFE; // round down workerRect.right = (workerRect.right + 1) & 0xFFFE; // round up _screen->copyRectToScreen(workerRect); }