Fixed the last (?) glitches around the mouse cursor [*] in aspect-ratio

correction mode by making sure that dirty rects always start on a line
that won't have its colours changed by the stretching function. This was
probably only noticeable when using the 1x scaler.

[*] Actually, the glitches weren't specific to the mouse cursor, but it was
    useful for triggering them.

svn-id: r8621
This commit is contained in:
Torbjörn Andersson 2003-06-22 14:59:21 +00:00
parent 7e86b215bb
commit 160c4f9104
3 changed files with 17 additions and 0 deletions

View File

@ -286,6 +286,9 @@ void OSystem_SDL_Common::add_dirty_rect(int x, int y, int w, int h) {
if (h > _screenHeight - y) {
h = _screenHeight - y;
}
if (_adjustAspectRatio)
makeRectStretchable(x, y, w, h);
r->x = x;
r->y = y;

View File

@ -683,6 +683,18 @@ static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint1
#endif
}
void makeRectStretchable(int &x, int &y, int &w, int &h) {
int m = real2Aspect(y) % 6;
// Ensure that the rect will start on a line that won't have its
// colours changed by the stretching function.
if (m != 0 && m != 5) {
y -= m;
h += m;
}
}
/**
* Stretch a 16bpp image vertically by factor 1.2. Used to correct the
* aspect-ratio in games using 320x200 pixel graphics with non-qudratic

View File

@ -49,6 +49,8 @@ FORCEINLINE int aspect2Real(int y) {
return (y * 5 + 3) / 6;
}
extern void makeRectStretchable(int &x, int &y, int &w, int &h);
extern int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, int srcY, int origSrcY);
enum {