X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui.cpp;h=404af7e4f481fbf71ebdf01686c64bc9e3bb0830;hb=c4046c6cf8b342bf98f8f0ef121f9c6408806330;hp=e1bf5c1e15c450344d0d7c532a65f75b8a8f905d;hpb=220217373079ff8d737f3d6dc07bbbad8f46e1ca;p=virtualjaguar diff --git a/src/gui.cpp b/src/gui.cpp index e1bf5c1..404af7e 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -11,6 +11,7 @@ #include #include #include "types.h" +#include "settings.h" #include "tom.h" #include "video.h" #include "font1.h" @@ -20,9 +21,42 @@ using namespace std; // For STL stuff // Private function prototypes +// Local global variables + +int mouseX, mouseY; + +uint16 mousePic[] = { + 6, 8, + + 0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // + + 0x0300,0x03E0,0x0000,0x0000,0x0000,0x0000, // @+ + 0x0300,0x03E0,0x03E0,0x0000,0x0000,0x0000, // @++ + 0x0300,0x0300,0x03E0,0x03E0,0x0000,0x0000, // @@++ + 0x0300,0x0300,0x03E0,0x03E0,0x03E0,0x0000, // @@+++ + 0x0300,0x0300,0x0300,0x03E0,0x03E0,0x03E0, // @@@+++ + 0x0300,0x0300,0x0300,0x0000,0x0000,0x0000, // @@@ + 0x0300,0x0000,0x0000,0x0000,0x0000,0x0000 // @ +/* + 0xFFFF,0x0000,0x0000,0x0000,0x0000,0x0000, // + + 0xE318,0xFFFF,0x0000,0x0000,0x0000,0x0000, // @+ + 0xE318,0xFFFF,0xFFFF,0x0000,0x0000,0x0000, // @++ + 0xE318,0xE318,0xFFFF,0xFFFF,0x0000,0x0000, // @@++ + 0xE318,0xE318,0xFFFF,0xFFFF,0xFFFF,0x0000, // @@+++ + 0xE318,0xE318,0xE318,0xFFFF,0xFFFF,0xFFFF, // @@@+++ + 0xE318,0xE318,0xE318,0x0000,0x0000,0x0000, // @@@ + 0xE318,0x0000,0x0000,0x0000,0x0000,0x0000 // @ +*/ +}; +// 1 111 00 11 100 1 1100 -> F39C +// 1 100 00 10 000 1 0000 -> C210 +// 1 110 00 11 000 1 1000 -> E318 +// 0 000 00 11 111 0 0000 -> 03E0 +// 0 000 00 11 000 0 0000 -> 0300 void InitGUI(void) { + SDL_ShowCursor(SDL_DISABLE); + SDL_GetMouseState(&mouseX, &mouseY); } void GUIDone(void) @@ -62,6 +96,29 @@ void DrawString(int16 * screen, uint32 x, uint32 y, bool invert, const char * te } } +// +// Draw "picture" +// Uses zero as transparent color +// +void DrawTransparentBitmap(int16 * screen, uint32 x, uint32 y, uint16 * bitmap) +{ + uint16 width = bitmap[0], height = bitmap[1]; + bitmap += 2; + + uint32 pitch = GetSDLScreenPitch() / 2; // Returns pitch in bytes but we need words... + uint32 address = x + (y * pitch); + + for(int yy=0; yy 24 ? 24 : fileList.size()); + uint32 limit = (fileList.size() > 30 ? 30 : fileList.size()); SDL_Event event; + // Ensure that the GUI is drawn before any user input... + event.type = SDL_USEREVENT; + SDL_PushEvent(&event); + while (!done) { while (SDL_PollEvent(&event)) { - // Draw the GUI... - memset(backbuffer, 0x11, tom_getVideoModeWidth() * tom_getVideoModeHeight() * 2); - - for(uint32 i=0; i 38) - s[38] = 0; - DrawString(backbuffer, 0, i*8, invert, " %s ", s.c_str()); - } - - RenderBackbuffer(); - if (event.type == SDL_KEYDOWN) { SDLKey key = event.key.keysym.sym; @@ -143,9 +189,26 @@ bool UserSelectFile(char * path, char * filename) } if (key == SDLK_PAGEDOWN) { + if (cursor != limit - 1) + cursor = limit - 1; + else + { + startFile += limit; + if (startFile > fileList.size() - limit) + startFile = fileList.size() - limit; + } } if (key == SDLK_PAGEUP) { + if (cursor != 0) + cursor = 0; + else + { + if (startFile < limit) + startFile = 0; + else + startFile -= limit; + } } if (key == SDLK_RETURN) done = true; @@ -175,6 +238,37 @@ bool UserSelectFile(char * path, char * filename) } } } + else if (event.type == SDL_MOUSEMOTION) + { + mouseX = event.motion.x, mouseY = event.motion.y; + if (vjs.useOpenGL) + mouseX /= 2, mouseY /= 2; + } + else if (event.type == SDL_MOUSEBUTTONDOWN) + { + uint32 mx = event.button.x, my = event.button.y; + if (vjs.useOpenGL) + mx /= 2, my /= 2; + cursor = my / 8; + } + + // Draw the GUI... +// memset(backbuffer, 0x11, tom_getVideoModeWidth() * tom_getVideoModeHeight() * 2); + memset(backbuffer, 0x11, tom_getVideoModeWidth() * 240 * 2); + + for(uint32 i=0; i 38) + s[38] = 0; + DrawString(backbuffer, 0, i*8, (cursor == i ? true : false), " %s ", s.c_str()); + } + + DrawTransparentBitmap(backbuffer, mouseX, mouseY, mousePic); + + RenderBackbuffer(); } } }