From 1332a69b077ae012de92dfd18686d3e90021bd4e Mon Sep 17 00:00:00 2001 From: Kari Salminen Date: Fri, 6 Jul 2007 12:42:50 +0000 Subject: Tidied up and simplified AGI mouse cursor management. svn-id: r27937 --- engines/agi/graphics.cpp | 72 +++++++++++++++++++++++++----------------------- engines/agi/graphics.h | 1 + 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/engines/agi/graphics.cpp b/engines/agi/graphics.cpp index b5d517e25a..2e32fc49ed 100644 --- a/engines/agi/graphics.cpp +++ b/engines/agi/graphics.cpp @@ -713,18 +713,44 @@ void GfxMgr::gfxPutBlock(int x1, int y1, int x2, int y2) { g_system->copyRectToScreen(_screen + y1 * 320 + x1, 320, x1, y1, x2 - x1 + 1, y2 - y1 + 1); } -static const byte mouseCursorArrow[] = { - // This is the same arrow cursor that was later used in early SCI games - 0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x70, 0x00, - 0x78, 0x00, 0x7C, 0x00, 0x7E, 0x00, 0x7F, 0x00, - 0x7F, 0x80, 0x7F, 0xC0, 0x7C, 0x00, 0x46, 0x00, - 0x06, 0x00, 0x03, 0x00, 0x03, 0x00, 0x01, 0x80, - 0xC0, 0x00, 0xA0, 0x00, 0x90, 0x00, 0x88, 0x00, - 0x84, 0x00, 0x82, 0x00, 0x81, 0x00, 0x80, 0x80, - 0x80, 0x40, 0x80, 0x20, 0x82, 0x00, 0xA9, 0x00, - 0xC9, 0x00, 0x04, 0x80, 0x04, 0x80, 0x02, 0x40 +/** + * A black and white SCI-style arrow cursor (11x16). + * 0 = Transparent. + * 1 = Black (#000000 in 24-bit RGB). + * 2 = White (#FFFFFF in 24-bit RGB). + */ +static const byte sciMouseCursor[] = { + 1,1,0,0,0,0,0,0,0,0,0, + 1,2,1,0,0,0,0,0,0,0,0, + 1,2,2,1,0,0,0,0,0,0,0, + 1,2,2,2,1,0,0,0,0,0,0, + 1,2,2,2,2,1,0,0,0,0,0, + 1,2,2,2,2,2,1,0,0,0,0, + 1,2,2,2,2,2,2,1,0,0,0, + 1,2,2,2,2,2,2,2,1,0,0, + 1,2,2,2,2,2,2,2,2,1,0, + 1,2,2,2,2,2,2,2,2,2,1, + 1,2,2,2,2,2,1,0,0,0,0, + 1,2,1,0,1,2,2,1,0,0,0, + 1,1,0,0,1,2,2,1,0,0,0, + 0,0,0,0,0,1,2,2,1,0,0, + 0,0,0,0,0,1,2,2,1,0,0, + 0,0,0,0,0,0,1,2,2,1,0 +}; + +/** + * RGBA-palette for the black and white SCI-style arrow cursor. + */ +static const byte sciMouseCursorPalette[] = { + 0x00, 0x00, 0x00, 0x00, // Black + 0xFF, 0xFF, 0xFF, 0x00 // White }; +void GfxMgr::setCursor() { + CursorMan.replaceCursorPalette(sciMouseCursorPalette, 1, ARRAYSIZE(sciMouseCursorPalette) / 4); + CursorMan.replaceCursor(sciMouseCursor, 11, 16, 1, 1, 0); +} + /** * Initialize graphics device. * @@ -741,31 +767,7 @@ int GfxMgr::initVideo() { gfxSetPalette(); - byte mouseCursor[16 * 16]; - const byte *src = mouseCursorArrow; - for (int i = 0; i < 32; ++i) { - int offs = i * 8; - for (byte mask = 0x80; mask != 0; mask >>= 1) { - if (src[0] & mask) { - mouseCursor[offs] = 2; - } else if (src[32] & mask) { - mouseCursor[offs] = 0; - } else { - mouseCursor[offs] = 0xFF; - } - ++offs; - } - ++src; - } - - const byte cursorPalette[] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 255, 255, 255, 0 - }; - - CursorMan.replaceCursorPalette(cursorPalette, 0, 3); - CursorMan.replaceCursor(mouseCursor, 16, 16, 1, 1); + setCursor(); return errOK; } diff --git a/engines/agi/graphics.h b/engines/agi/graphics.h index 38f80675cd..e5ab976b42 100644 --- a/engines/agi/graphics.h +++ b/engines/agi/graphics.h @@ -87,6 +87,7 @@ public: void putPixel(int, int, int); void putBlock(int x1, int y1, int x2, int y2); void gfxSetPalette(); + void setCursor(); int keypress(); int getKey(); -- cgit v1.2.3