From: Shamus Hammons Date: Thu, 27 Nov 2003 03:58:42 +0000 (+0000) Subject: Minor graphical update X-Git-Tag: 1.0.7~80 X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9917a7b287b02ae3eee071f970d57c9e8720f0a;p=virtualjaguar Minor graphical update --- diff --git a/src/gui.cpp b/src/gui.cpp index 5575496..d6ae7db 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -27,7 +27,7 @@ using namespace std; // For STL stuff class Window; // Forward declaration... -void DrawTransparentBitmap(int16 * screen, uint32 x, uint32 y, uint16 * bitmap); +void DrawTransparentBitmap(int16 * screen, uint32 x, uint32 y, uint16 * bitmap, uint8 * alpha = NULL); void DrawStringTrans(int16 * screen, uint32 x, uint32 y, uint16 color, uint8 opacity, const char * text, ...); void DrawStringOpaque(int16 * screen, uint32 x, uint32 y, uint16 color1, uint16 color2, const char * text, ...); Window * LoadROM(void); @@ -118,27 +118,49 @@ uint16 downArrowBox[] = { uint16 pushButtonUp[] = { 8, 8, - 0x0000,0x0000,0x0000,0x000A,0x000A,0x0000,0x0000,0x0000, // ...##... - 0x0000,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x0000, // .######. - 0x0000,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x0000, // .######. - 0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A, // ######## - 0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A, // ######## - 0x0000,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x0000, // .######. - 0x0000,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x0000, // .######. - 0x0000,0x0000,0x0000,0x000A,0x000A,0x0000,0x0000,0x0000 // ...##... + 0x0000, 0x0C63, 0x394A, 0x494A, 0x4108, 0x2CC6, 0x0421, 0x0000, + 0x0C63, 0x518C, 0x48E7, 0x48C6, 0x48A5, 0x48A5, 0x3CE7, 0x0421, + 0x3D4A, 0x48E7, 0x48C6, 0x48C6, 0x44A5, 0x48A5, 0x48A5, 0x2CC6, + 0x494A, 0x48C6, 0x48C6, 0x44A5, 0x44A5, 0x44A5, 0x48A5, 0x40E7, + 0x4529, 0x48A5, 0x44A5, 0x44A5, 0x44A5, 0x44A5, 0x4CA5, 0x40E7, + 0x2CC6, 0x48A5, 0x48A5, 0x44A5, 0x44A5, 0x48A5, 0x4CA5, 0x2CC6, + 0x0421, 0x3CE7, 0x48A5, 0x48A5, 0x4CA5, 0x4CA5, 0x44E7, 0x0421, + 0x0000, 0x0421, 0x28C6, 0x40E7, 0x40E7, 0x2CC6, 0x0421, 0x0000 +}; + +uint8 pbuAlpha[] = { + 0xFF, 0xE4, 0xA0, 0x99, 0xA4, 0xBE, 0xF0, 0xFF, + 0xE3, 0x85, 0x00, 0x00, 0x00, 0x00, 0xAF, 0xF0, + 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, + 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, + 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, + 0xF1, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xF1, + 0xFF, 0xF2, 0xC0, 0xAD, 0xAD, 0xC0, 0xF2, 0xFF }; uint16 pushButtonDown[] = { 8, 8, - 0x0000,0x0000,0x0000,0x000A,0x000A,0x0000,0x0000,0x0000, // ...@@... - 0x0000,0x000A,0x000A,0x0C7F,0x0C7F,0x000A,0x000A,0x0000, // .@@##@@. - 0x0000,0x000A,0x0C7F,0x0C7F,0x0C7F,0x0C7F,0x000A,0x0000, // .@####@. - 0x000A,0x0C7F,0x0C7F,0x0C7F,0x0C7F,0x0C7F,0x0C7F,0x000A, // @######@ - 0x000A,0x0C7F,0x0C7F,0x0C7F,0x0C7F,0x0C7F,0x0C7F,0x000A, // @######@ - 0x0000,0x000A,0x0C7F,0x0C7F,0x0C7F,0x0C7F,0x000A,0x0000, // .@####@. - 0x0000,0x000A,0x000A,0x0C7F,0x0C7F,0x000A,0x000A,0x0000, // .@@##@@. - 0x0000,0x0000,0x0000,0x000A,0x000A,0x0000,0x0000,0x0000 // ...@@... + 0x0000, 0x0C63, 0x4A31, 0x5631, 0x4DCE, 0x2D4A, 0x0421, 0x0000, + 0x0C63, 0x6AF7, 0x714A, 0x7908, 0x7908, 0x6908, 0x418C, 0x0421, + 0x4A31, 0x714A, 0x7508, 0x6CE7, 0x6CE7, 0x74E7, 0x68E7, 0x2929, + 0x5A31, 0x7908, 0x6CE7, 0x6CE7, 0x6CE7, 0x6CE7, 0x78E7, 0x3D6B, + 0x4DCE, 0x7908, 0x6CE7, 0x6CE7, 0x6CE7, 0x6CE7, 0x78E7, 0x416B, + 0x2D4A, 0x6D08, 0x74E7, 0x6CE7, 0x6CE7, 0x74E7, 0x6CE7, 0x2929, + 0x0842, 0x418C, 0x6CE7, 0x78E7, 0x78E7, 0x6CE7, 0x416B, 0x0842, + 0x0000, 0x0842, 0x2929, 0x416B, 0x416B, 0x2929, 0x0842, 0x0000 +}; + +uint8 pbdAlpha[] = { + 0xFF, 0xE4, 0x72, 0x68, 0x7E, 0xA7, 0xF0, 0xFF, + 0xE4, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x93, 0xF0, + 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, + 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, + 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, + 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, + 0xEF, 0x91, 0x00, 0x00, 0x00, 0x00, 0x96, 0xEF, + 0xFF, 0xEF, 0xAE, 0x98, 0x97, 0xAF, 0xEF, 0xFF }; uint16 slideSwitchUp[] = { @@ -432,7 +454,8 @@ void PushButton::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) } }*/ - DrawTransparentBitmap(screenBuffer, extents.x + offsetX, extents.y + offsetY, (*state ? pushButtonDown : pushButtonUp)); +// DrawTransparentBitmap(screenBuffer, extents.x + offsetX, extents.y + offsetY, (*state ? pushButtonDown : pushButtonUp)); + DrawTransparentBitmap(screenBuffer, extents.x + offsetX, extents.y + offsetY, (*state ? pushButtonDown : pushButtonUp), (*state ? pbdAlpha : pbuAlpha)); if (text.length() > 0) DrawString(screenBuffer, extents.x + offsetX + 12, extents.y + offsetY, false, "%s", text.c_str()); } @@ -1638,8 +1661,9 @@ Window * MiscOptions(void) // // Draw "picture" // Uses zero as transparent color +// Can also use an optional alpha channel // -void DrawTransparentBitmap(int16 * screen, uint32 x, uint32 y, uint16 * bitmap) +void DrawTransparentBitmap(int16 * screen, uint32 x, uint32 y, uint16 * bitmap, uint8 * alpha/*=NULL*/) { uint16 width = bitmap[0], height = bitmap[1]; bitmap += 2; @@ -1651,9 +1675,38 @@ void DrawTransparentBitmap(int16 * screen, uint32 x, uint32 y, uint16 * bitmap) { for(int xx=0; xx> 10) & 0x1F, + eGreen = (existingColor >> 5) & 0x1F, + eBlue = existingColor & 0x1F, + + nRed = (color >> 10) & 0x1F, + nGreen = (color >> 5) & 0x1F, + nBlue = color & 0x1F; + + uint8 invTrans = 255 - trans; + uint16 bRed = (eRed * trans + nRed * invTrans) / 255; + uint16 bGreen = (eGreen * trans + nGreen * invTrans) / 255; + uint16 bBlue = (eBlue * trans + nBlue * invTrans) / 255; + + uint16 blendedColor = (bRed << 10) | (bGreen << 5) | bBlue; + + *(screen + address + xx + (yy * pitch)) = blendedColor; + + alpha++; + } + + bitmap++; } } }