]> Shamusworld >> Repos - virtualjaguar/commitdiff
Preliminary text editing widget
authorShamus Hammons <jlhamm@acm.org>
Wed, 24 Aug 2005 14:35:53 +0000 (14:35 +0000)
committerShamus Hammons <jlhamm@acm.org>
Wed, 24 Aug 2005 14:35:53 +0000 (14:35 +0000)
src/gui.cpp

index 28b626fb424996477573b239769d84fc8f225dc7..38fc12841d44b027a41acaa994319eeb1a6a91ba 100644 (file)
@@ -36,7 +36,9 @@ class Window;                                                                         // Forward declaration...
 void DrawTransparentBitmapDeprecated(uint32 * screen, uint32 x, uint32 y, uint32 * bitmap);
 void DrawTransparentBitmap(uint32 * screen, uint32 x, uint32 y, const void * bitmap);
 void DrawBitmap(uint32 * screen, uint32 x, uint32 y, const void * bitmap);
-void ClearScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h);
+//Should call this FillScreenRectangle with a number representing the RGBA value to fill. !!! FIX !!!
+//void ClearScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h);
+void FillScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h, uint32 color);
 void DrawStringTrans(uint32 * screen, uint32 x, uint32 y, uint32 color, uint8 opacity, const char * text, ...);
 void DrawStringOpaque(uint32 * screen, uint32 x, uint32 y, uint32 color1, uint32 color2, const char * text, ...);
 void DrawString(uint32 * screen, uint32 x, uint32 y, bool invert, const char * text, ...);
@@ -593,9 +595,11 @@ class TextEdit: public Element
 {
        public:
                TextEdit(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0): Element(x, y, w, h),
-                       fgColor(0xFF8484FF), bgColor(0xFF84FF4D), text(""), caretPos(0) {}
-               TextEdit(uint32 x, uint32 y, string s, uint32 fg = 0xFF8484FF, uint32 bg = 0xFF84FF4D):
-                       Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s), caretPos(0) {}
+                       fgColor(0xFF8484FF), bgColor(0xFF84FF4D), text(""), caretPos(0),
+                       maxScreenSize(10) {}
+               TextEdit(uint32 x, uint32 y, string s, uint32 mss = 10, uint32 fg = 0xFF8484FF,
+                       uint32 bg = 0xFF84FF4D): Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s),
+                       caretPos(0), maxScreenSize(mss) {}
                virtual void HandleKey(SDLKey key);
                virtual void HandleMouseMove(uint32 x, uint32 y) {}
                virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown) {}
@@ -606,6 +610,7 @@ class TextEdit: public Element
                uint32 fgColor, bgColor;
                string text;
                uint32 caretPos;
+               uint32 maxScreenSize;
 };
 
 //Set different filters depending on type passed in on construction, e.g., filename, amount, etc...?
@@ -616,9 +621,11 @@ void TextEdit::HandleKey(SDLKey key)
        {
                //Need to handle shift key as well...
                text[caretPos++] = key;
+               Draw();
        }
        else if (key == SDLK_BACKSPACE)
        {
+               
        }
        else if (key == SDLK_DELETE)
        {
@@ -629,8 +636,13 @@ void TextEdit::HandleKey(SDLKey key)
 void TextEdit::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/)
 {
        if (text.length() > 0)
+       {
+               FillScreenRectangle(screenBuffer, extents.x + offsetX, extents.y + offsetY, FONT_WIDTH * maxScreenSize, FONT_HEIGHT, bgColor);
 //             DrawString(screenBuffer, extents.x + offsetX, extents.y + offsetY, false, "%s", text.c_str());
                DrawStringOpaque(screenBuffer, extents.x + offsetX, extents.y + offsetY, fgColor, bgColor, "%s", text.c_str());
+       }
+
+       // Draw the caret (underscore? or vertical line?)
 }
 
 
@@ -1585,16 +1597,17 @@ void DrawBitmap(uint32 * screen, uint32 x, uint32 y, const void * bitmap)
 }
 
 //
-// Clear a portion of the screen
+// Fill a portion of the screen with the passed in color
 //
-void ClearScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h)
+void FillScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h, uint32 color)
+//void ClearScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h)
 {
        uint32 pitch = sdlemuGetOverlayWidthInPixels();
        uint32 address = x + (y * pitch);
 
        for(uint32 yy=0; yy<h; yy++)
                for(uint32 xx=0; xx<w; xx++)
-                       *(screen + address + xx + (yy * pitch)) = 0;
+                       *(screen + address + xx + (yy * pitch)) = color;
 }
 
 
@@ -2071,6 +2084,7 @@ Window * RunEmu(void)
 //     doDSPDis = true;
 
 //Problem: Need to do this *only* when the state changes from visible to not...
+//Also, need to clear out the GUI when not on (when showMessage is active...)
 if (showGUI || showMessage)
        sdlemuEnableOverlay();
 else
@@ -2081,7 +2095,7 @@ else
                // Some QnD GUI stuff here...
                if (showGUI)
                {
-                       ClearScreenRectangle(overlayPixels, 8, 1*FONT_HEIGHT, 128, 4*FONT_HEIGHT);
+                       FillScreenRectangle(overlayPixels, 8, 1*FONT_HEIGHT, 128, 4*FONT_HEIGHT, 0x00000000);
                        extern uint32 gpu_pc, dsp_pc;
                        DrawString(overlayPixels, 8, 1*FONT_HEIGHT, false, "GPU PC: %08X", gpu_pc);
                        DrawString(overlayPixels, 8, 2*FONT_HEIGHT, false, "DSP PC: %08X", dsp_pc);
@@ -2189,6 +2203,11 @@ Window * MiscOptions(void)
        window->AddElement(new SlideSwitch(8, 120, (bool *)&vjs.glFilter, "Sharp", "Blurry"));
        window->AddElement(new SlideSwitch(8, 152, (bool *)&vjs.renderType, "Normal render", "TV style"));
 
+       window->AddElement(new TextEdit(88, 8, vjs.ROMPath, 20, 0xFF8484FF, 0xFF000000));
+
+/*TextEdit(uint32 x, uint32 y, string s, uint32 mss = 10, uint32 fg = 0xFF8484FF,
+       uint32 bg = 0xFF84FF4D): Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s),
+       caretPos(0), maxScreenSize(mss) {}*/
 // Missing:
 // * BIOS path
 // * ROM path