mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-04 09:18:38 +00:00
GRAPHICS: Consider flip mode when handling off-screen clipping
This commit is contained in:
parent
bb58647588
commit
7d60ccc463
@ -400,19 +400,31 @@ Common::Rect TransparentSurface::blit(Graphics::Surface &target, int posX, int p
|
|||||||
// Handle off-screen clipping
|
// Handle off-screen clipping
|
||||||
if (posY < 0) {
|
if (posY < 0) {
|
||||||
img->h = MAX(0, (int)img->h - -posY);
|
img->h = MAX(0, (int)img->h - -posY);
|
||||||
img->setPixels((byte *)img->getBasePtr(0, -posY));
|
if (!(flipping & FLIP_V))
|
||||||
|
img->setPixels((byte *)img->getBasePtr(0, -posY));
|
||||||
posY = 0;
|
posY = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (posX < 0) {
|
if (posX < 0) {
|
||||||
img->w = MAX(0, (int)img->w - -posX);
|
img->w = MAX(0, (int)img->w - -posX);
|
||||||
img->setPixels((byte *)img->getBasePtr(-posX, 0));
|
if (!(flipping & FLIP_H))
|
||||||
|
img->setPixels((byte *)img->getBasePtr(-posX, 0));
|
||||||
posX = 0;
|
posX = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
img->w = CLIP((int)img->w, 0, (int)MAX((int)target.w - posX, 0));
|
if (img->w > target.w - posX) {
|
||||||
img->h = CLIP((int)img->h, 0, (int)MAX((int)target.h - posY, 0));
|
if (flipping & FLIP_H)
|
||||||
|
img->setPixels((byte *)img->getBasePtr(img->w - target.w + posX, 0));
|
||||||
|
img->w = CLIP((int)img->w, 0, (int)MAX((int)target.w - posX, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (img->h > target.h - posY) {
|
||||||
|
if (flipping & FLIP_V)
|
||||||
|
img->setPixels((byte *)img->getBasePtr(0, img->h - target.h + posY));
|
||||||
|
img->h = CLIP((int)img->h, 0, (int)MAX((int)target.h - posY, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flip surface
|
||||||
if ((img->w > 0) && (img->h > 0)) {
|
if ((img->w > 0) && (img->h > 0)) {
|
||||||
int xp = 0, yp = 0;
|
int xp = 0, yp = 0;
|
||||||
|
|
||||||
@ -533,19 +545,31 @@ Common::Rect TransparentSurface::blitClip(Graphics::Surface &target, Common::Rec
|
|||||||
// Handle off-screen clipping
|
// Handle off-screen clipping
|
||||||
if (posY < clippingArea.top) {
|
if (posY < clippingArea.top) {
|
||||||
img->h = MAX(0, (int)img->h - (clippingArea.top - posY));
|
img->h = MAX(0, (int)img->h - (clippingArea.top - posY));
|
||||||
img->setPixels((byte *)img->getBasePtr(0, clippingArea.top - posY));
|
if (!(flipping & FLIP_V))
|
||||||
|
img->setPixels((byte *)img->getBasePtr(0, clippingArea.top - posY));
|
||||||
posY = clippingArea.top;
|
posY = clippingArea.top;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (posX < clippingArea.left) {
|
if (posX < clippingArea.left) {
|
||||||
img->w = MAX(0, (int)img->w - (clippingArea.left - posX));
|
img->w = MAX(0, (int)img->w - (clippingArea.left - posX));
|
||||||
img->setPixels((byte *)img->getBasePtr(clippingArea.left - posX, 0));
|
if (!(flipping & FLIP_H))
|
||||||
|
img->setPixels((byte *)img->getBasePtr(clippingArea.left - posX, 0));
|
||||||
posX = clippingArea.left;
|
posX = clippingArea.left;
|
||||||
}
|
}
|
||||||
|
|
||||||
img->w = CLIP((int)img->w, 0, (int)MAX((int)clippingArea.right - posX, 0));
|
if (img->w > clippingArea.right - posX) {
|
||||||
img->h = CLIP((int)img->h, 0, (int)MAX((int)clippingArea.bottom - posY, 0));
|
if (flipping & FLIP_H)
|
||||||
|
img->setPixels((byte *)img->getBasePtr(img->w - clippingArea.right + posX, 0));
|
||||||
|
img->w = CLIP((int)img->w, 0, (int)MAX((int)clippingArea.right - posX, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (img->h > clippingArea.bottom - posY) {
|
||||||
|
if (flipping & FLIP_V)
|
||||||
|
img->setPixels((byte *)img->getBasePtr(0, img->h - clippingArea.bottom + posY));
|
||||||
|
img->h = CLIP((int)img->h, 0, (int)MAX((int)clippingArea.bottom - posY, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flip surface
|
||||||
if ((img->w > 0) && (img->h > 0)) {
|
if ((img->w > 0) && (img->h > 0)) {
|
||||||
int xp = 0, yp = 0;
|
int xp = 0, yp = 0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user