diff --git a/SMILEBASIC/dialog.d b/SMILEBASIC/dialog.d index 0f41d6b..b808a3d 100644 --- a/SMILEBASIC/dialog.d +++ b/SMILEBASIC/dialog.d @@ -51,6 +51,10 @@ class DialogButton this.height = background.surface.h; this.result = result; } + bool colDetect(int x, int y) + { + return x >= this.x && y >= this.y && this.x + this.width > x && this.y + this.height > y; + } } class DialogResources @@ -107,19 +111,25 @@ class Dialog : DialogBase } void renderButton(DialogButton button) { + int mx, my; + if (button.isPressed) + { + mx += 2; + my += 2; + } glDepthMask(GL_FALSE); glEnable(GL_TEXTURE_2D); glColor3ub(255, 255, 255); glBindTexture(GL_TEXTURE_2D, button.background.glTexture); glBegin(GL_QUADS); glTexCoord2i(0, 0); - glVertex2i(button.x, button.y); + glVertex2i(button.x + mx, button.y + my); glTexCoord2i(1, 0); - glVertex2i(button.x + button.width, button.y); + glVertex2i(button.x + button.width + mx, button.y + my); glTexCoord2i(1, 1); - glVertex2i(button.x + button.width, button.y + button.height); + glVertex2i(button.x + button.width + mx, button.y + button.height + my); glTexCoord2i(0, 1); - glVertex2i(button.x, button.y + button.height); + glVertex2i(button.x + mx, button.y + button.height + my); glEnd(); glDisable(GL_TEXTURE_2D); glDepthMask(GL_TRUE); @@ -134,6 +144,7 @@ class Dialog : DialogBase } } + int show(wstring text) { petitcom.dialog = this; @@ -154,9 +165,24 @@ class Dialog : DialogBase DialogResult.CANCEL ) ]; - while (true) + bool isPressed; + while (!isPressed) { auto to = petitcom.touchPosition(); + auto x = to.display1X; + auto y = to.display1Y; + foreach (b; buttons) + { + if (to.tm == 1 && b.colDetect(x, y)) + { + b.isPressed = true; + } + else if (b.isPressed && to.tm < 1) + { + result = b.result; + isPressed = true; + } + } SDL_Delay(16); } petitcom.hideTouchScreen(); diff --git a/SMILEBASIC/petitcomputer.d b/SMILEBASIC/petitcomputer.d index 1e4692d..169f632 100644 --- a/SMILEBASIC/petitcomputer.d +++ b/SMILEBASIC/petitcomputer.d @@ -638,7 +638,7 @@ class PetitComputer } mousex = mousex.clamp(5, 314); mousey = mousey.clamp(5, 234); - touchPosition = Touch(old.tm + 1, mousex, mousey); + touchPosition = Touch(old.tm + 1, mousex, mousey, 0, 0, mousex, mousey); } else { @@ -1637,8 +1637,16 @@ class PetitComputer { return currentDisplay.rect[1]; } - auto rect = currentDisplay.rect[0]; - rect.y += rect.h; + SDL_Rect rect; + if (xscreenmode == 0) + { + rect = SDL_Rect((screenWidth - screenWidthDisplay1) / 2, screenHeight, screenWidthDisplay1, screenHeightDisplay1); + } + else + { + rect = currentDisplay.rect[0]; + rect.y += rect.h; + } currentDisplay.windowSize.height += rect.h; currentDisplay.yoffset = currentDisplay.windowSize.height; updateWindowSize();