mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 17:33:05 +00:00
Revert last change to mouse cursors in FF, causes odd glitches
svn-id: r22243
This commit is contained in:
parent
49dbcc591e
commit
c34e30ea79
@ -393,14 +393,15 @@ const byte _mouseOffs[] = {
|
||||
0,0,10,7,10,6,10,5,10,4,10,3,10,4,10,5,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
};
|
||||
|
||||
// TODO: Convert to our mouse code in system
|
||||
void SimonEngine::drawMousePointer_FF() {
|
||||
byte *dst;
|
||||
uint curCursor;
|
||||
int image, offs, pitch;
|
||||
int hotSpotX, hotSpotY;
|
||||
int image, offs;
|
||||
int pitch;
|
||||
|
||||
dst = (byte *)calloc(80 * 80, 1);
|
||||
pitch = 80;
|
||||
dst = getBackBuf();
|
||||
pitch = _screenWidth;
|
||||
|
||||
if (_animatePointer != 0) {
|
||||
if (getBitFlag(99)) {
|
||||
@ -414,6 +415,31 @@ void SimonEngine::drawMousePointer_FF() {
|
||||
_mouseAnim = 1;
|
||||
}
|
||||
|
||||
_mouseCountY = 40;
|
||||
_mouseCountX = 40;
|
||||
|
||||
if (_mouseY < 19)
|
||||
_mouseCountY -= 19 - _mouseY;
|
||||
else
|
||||
dst += (((_mouseY - 19) * (pitch / 16)) & 0xffff) * 16;
|
||||
|
||||
if (_mouseX < 38)
|
||||
_mouseCountX -= 38 - _mouseX;
|
||||
else
|
||||
dst += _mouseX - 38;
|
||||
|
||||
if (_mouseCountY == 40) {
|
||||
_mouseCountY = 499 - _mouseY;
|
||||
if (_mouseCountY > 40)
|
||||
_mouseCountY = 40;
|
||||
}
|
||||
|
||||
if (_mouseCountX == 40) {
|
||||
_mouseCountX = 659 - _mouseX;
|
||||
if (_mouseCountX > 40)
|
||||
_mouseCountX = 40;
|
||||
}
|
||||
|
||||
curCursor = _mouseCursor;
|
||||
if (_animatePointer == 0 && getBitFlag(99)) {
|
||||
_mouseAnim = 1;
|
||||
@ -424,21 +450,18 @@ void SimonEngine::drawMousePointer_FF() {
|
||||
|
||||
image = curCursor * 16 + 1;
|
||||
offs = curCursor * 32;
|
||||
drawMousePart(dst, pitch, image, offs, hotSpotX, hotSpotY);
|
||||
drawMousePart(dst, pitch, image, offs);
|
||||
|
||||
image = curCursor * 16 + 1 + _mouseAnim;
|
||||
offs = curCursor * 32 + _mouseAnim * 2;
|
||||
drawMousePart(dst, pitch, image, offs, hotSpotX, hotSpotY);
|
||||
|
||||
_system->setMouseCursor(dst, 80, 80, hotSpotX, hotSpotY, 0);
|
||||
free(dst);
|
||||
drawMousePart(dst, pitch, image, offs);
|
||||
}
|
||||
|
||||
void SimonEngine::drawMousePart(byte *dst, int pitch, int image, int offs, int &hotSpotX, int &hotSpotY) {
|
||||
void SimonEngine::drawMousePart(byte *dst, int pitch, int image, int offs) {
|
||||
VgaPointersEntry *vpe = &_vgaBufferPointers[7];
|
||||
byte *src;
|
||||
int x, y, w, h;
|
||||
int width, height;
|
||||
int x, y, width, height;
|
||||
int tmp, srcw;
|
||||
|
||||
x = _mouseOffs[offs];
|
||||
y = _mouseOffs[offs + 1];
|
||||
@ -446,23 +469,76 @@ void SimonEngine::drawMousePart(byte *dst, int pitch, int image, int offs, int &
|
||||
dst += y * pitch + x;
|
||||
|
||||
src = vpe->vgaFile2 + image * 8;
|
||||
width = READ_LE_UINT16(src + 6);
|
||||
srcw = width = READ_LE_UINT16(src + 6);
|
||||
height = READ_LE_UINT16(src + 4);
|
||||
|
||||
src = vpe->vgaFile2 + readUint32Wrapper(src);
|
||||
|
||||
if (_mouseCountX != 40) {
|
||||
if (_mouseX >= 600) {
|
||||
tmp = _mouseOffs[offs] + width - _mouseCountX;
|
||||
if (tmp >= 0) {
|
||||
width -= tmp;
|
||||
if (width <= 0)
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (_mouseOffs[offs] + _mouseCountX >= 40) {
|
||||
dst -= 40 - _mouseCountX;
|
||||
} else {
|
||||
dst -= _mouseOffs[offs];
|
||||
tmp = -(_mouseOffs[offs] + _mouseCountX - 40);
|
||||
width -= tmp;
|
||||
if (width <= 0)
|
||||
return;
|
||||
src += tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_mouseCountY != 40) {
|
||||
if (_mouseY >= 200) {
|
||||
tmp = _mouseOffs[offs + 1] + height - _mouseCountY;
|
||||
if (tmp >= 0) {
|
||||
height -= tmp;
|
||||
if (height <= 0)
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
tmp = _mouseOffs[offs + 1] + _mouseCountY;
|
||||
if (tmp >= 40) {
|
||||
tmp = 40 - _mouseCountY;
|
||||
while (tmp--)
|
||||
dst -= pitch;
|
||||
} else {
|
||||
tmp = _mouseOffs[offs + 1];
|
||||
while (tmp--)
|
||||
dst -= pitch;
|
||||
tmp = -(_mouseOffs[offs + 1] + _mouseCountY - 40);
|
||||
height -= tmp;
|
||||
if (height <= 0)
|
||||
return;
|
||||
while (tmp--)
|
||||
src += srcw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
drawMouse(dst, pitch, src, srcw, width, height);
|
||||
}
|
||||
|
||||
void SimonEngine::drawMouse(byte *dst, int pitch, byte *src, int srcw, int width, int height) {
|
||||
int h, w;
|
||||
|
||||
for (h = 0; h < height; h++) {
|
||||
for (w = 0; w < width; w++) {
|
||||
if (src[w] != 0)
|
||||
dst[w] = src[w];
|
||||
|
||||
}
|
||||
src += width;
|
||||
src += srcw;
|
||||
dst += pitch;
|
||||
}
|
||||
|
||||
hotSpotX = (x + width) / 2;
|
||||
hotSpotY = (y + height) / 2;
|
||||
}
|
||||
|
||||
} // End of namespace Simon
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "gui/about.h"
|
||||
|
||||
#include "simon/debugger.h"
|
||||
#include "simon/intern.h"
|
||||
#include "simon/simon.h"
|
||||
#include "simon/vga.h"
|
||||
|
||||
@ -163,7 +164,6 @@ SimonEngine::SimonEngine(OSystem *syst)
|
||||
_mouseAnimMax = 0;
|
||||
_oldMouseCursor = 0;
|
||||
_oldMouseAnimMax = 0;
|
||||
_mouseToggle = false;
|
||||
|
||||
_vgaVar9 = 0;
|
||||
_chanceModifier = 0;
|
||||
|
@ -325,6 +325,7 @@ protected:
|
||||
byte _mouseCursor, _mouseAnim, _mouseAnimMax;
|
||||
byte _oldMouseCursor, _oldMouseAnimMax;
|
||||
uint _mouseHideCount;
|
||||
int _mouseCountX, _mouseCountY;
|
||||
bool _mouseToggle;
|
||||
|
||||
byte _leftButtonDown;
|
||||
@ -674,7 +675,9 @@ protected:
|
||||
void pollMouseXY();
|
||||
void drawMousePointer();
|
||||
void drawMousePointer_FF();
|
||||
void drawMousePart(byte *dst, int pitch, int image, int offs, int &hotSpotX, int &hotSpotY);
|
||||
void drawMouse(byte *dst, int pitch, byte *src, int srcw, int width, int height);
|
||||
void drawMousePart(byte *dst, int pitch, int image, int offs);
|
||||
|
||||
|
||||
void defineArrowBoxes(WindowBlock *window);
|
||||
void removeArrows(WindowBlock *window, uint num);
|
||||
|
Loading…
x
Reference in New Issue
Block a user