Implement dialog button
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
module otya.smilebasic.dialog;
|
module otya.smilebasic.dialog;
|
||||||
import otya.smilebasic.petitcomputer;
|
import otya.smilebasic.petitcomputer;
|
||||||
|
import otya.smilebasic.project;
|
||||||
import derelict.sdl2.sdl;
|
import derelict.sdl2.sdl;
|
||||||
import derelict.sdl2.image;
|
import derelict.sdl2.image;
|
||||||
import derelict.opengl3.gl;
|
import derelict.opengl3.gl;
|
||||||
@@ -35,6 +36,36 @@ enum ButtonResult
|
|||||||
touch = 140,
|
touch = 140,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DialogButton
|
||||||
|
{
|
||||||
|
int x, y, width, height;
|
||||||
|
GraphicPage background;
|
||||||
|
DialogResult result;
|
||||||
|
bool isPressed;
|
||||||
|
this(GraphicPage background, int x, int y, DialogResult result)
|
||||||
|
{
|
||||||
|
this.background = background;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.width = background.surface.w;
|
||||||
|
this.height = background.surface.h;
|
||||||
|
this.result = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DialogResources
|
||||||
|
{
|
||||||
|
public GraphicPage button1;
|
||||||
|
public GraphicPage button2;
|
||||||
|
public this(SDL_Renderer* renderer, GLenum textureScaleMode)
|
||||||
|
{
|
||||||
|
button1 = new GraphicPage("dialogresource/yes.png");
|
||||||
|
button1.createTexture(renderer, textureScaleMode);
|
||||||
|
button2 = new GraphicPage("dialogresource/no.png");
|
||||||
|
button2.createTexture(renderer, textureScaleMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class Dialog : DialogBase
|
class Dialog : DialogBase
|
||||||
{
|
{
|
||||||
@@ -45,6 +76,7 @@ class Dialog : DialogBase
|
|||||||
}
|
}
|
||||||
private int result;
|
private int result;
|
||||||
private SDL_Rect area;
|
private SDL_Rect area;
|
||||||
|
DialogButton[] buttons;
|
||||||
|
|
||||||
void renderBackground()
|
void renderBackground()
|
||||||
{
|
{
|
||||||
@@ -73,16 +105,55 @@ class Dialog : DialogBase
|
|||||||
glEnd();
|
glEnd();
|
||||||
glDepthMask(GL_TRUE);
|
glDepthMask(GL_TRUE);
|
||||||
}
|
}
|
||||||
|
void renderButton(DialogButton button)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
glTexCoord2i(1, 0);
|
||||||
|
glVertex2i(button.x + button.width, button.y);
|
||||||
|
glTexCoord2i(1, 1);
|
||||||
|
glVertex2i(button.x + button.width, button.y + button.height);
|
||||||
|
glTexCoord2i(0, 1);
|
||||||
|
glVertex2i(button.x, button.y + button.height);
|
||||||
|
glEnd();
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
glDepthMask(GL_TRUE);
|
||||||
|
}
|
||||||
override void render()
|
override void render()
|
||||||
{
|
{
|
||||||
petitcom.chScreen2(area.x, area.y, area.w, area.h);
|
petitcom.chScreen2(area.x, area.y, area.w, area.h);
|
||||||
renderBackground();
|
renderBackground();
|
||||||
|
foreach (b; buttons)
|
||||||
|
{
|
||||||
|
renderButton(b);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int show(wstring text)
|
int show(wstring text)
|
||||||
{
|
{
|
||||||
petitcom.dialog = this;
|
petitcom.dialog = this;
|
||||||
area = petitcom.showTouchScreen();
|
area = petitcom.showTouchScreen();
|
||||||
|
int buttonMarginWidth = 12;
|
||||||
|
int buttonMarginHeight = 12;
|
||||||
|
buttons = [
|
||||||
|
new DialogButton(
|
||||||
|
petitcom.dialogResource.button1,
|
||||||
|
area.w - buttonMarginWidth - petitcom.dialogResource.button1.surface.w,
|
||||||
|
area.h - buttonMarginHeight - petitcom.dialogResource.button1.surface.h,
|
||||||
|
DialogResult.SUCCESS
|
||||||
|
),
|
||||||
|
new DialogButton(
|
||||||
|
petitcom.dialogResource.button2,
|
||||||
|
buttonMarginWidth,
|
||||||
|
area.h - buttonMarginHeight - petitcom.dialogResource.button1.surface.h,
|
||||||
|
DialogResult.CANCEL
|
||||||
|
)
|
||||||
|
];
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
auto to = petitcom.touchPosition();
|
auto to = petitcom.touchPosition();
|
||||||
|
|||||||
@@ -46,6 +46,16 @@ class GraphicPage
|
|||||||
{
|
{
|
||||||
static GLenum textureScaleMode = GL_NEAREST;
|
static GLenum textureScaleMode = GL_NEAREST;
|
||||||
SDL_Surface* surface;
|
SDL_Surface* surface;
|
||||||
|
this(string filename)
|
||||||
|
{
|
||||||
|
SDL_RWops* stream = SDL_RWFromFile(toStringz(filename), toStringz("rb"));
|
||||||
|
auto src = IMG_Load_RW(stream, 0);
|
||||||
|
scope(exit)
|
||||||
|
{
|
||||||
|
SDL_RWclose(stream);
|
||||||
|
}
|
||||||
|
this(src);
|
||||||
|
}
|
||||||
this(SDL_Surface* s)
|
this(SDL_Surface* s)
|
||||||
{
|
{
|
||||||
surface = s;
|
surface = s;
|
||||||
@@ -779,6 +789,7 @@ class PetitComputer
|
|||||||
DerelictGL3.reload();
|
DerelictGL3.reload();
|
||||||
console.GRPF.createBuffer();
|
console.GRPF.createBuffer();
|
||||||
graphic.initGraphicPages();
|
graphic.initGraphicPages();
|
||||||
|
dialogResource = new DialogResources(renderer, textureScaleMode);
|
||||||
//3graphic.initGLGraphicPages();
|
//3graphic.initGLGraphicPages();
|
||||||
//glEnable(GL_BLEND);
|
//glEnable(GL_BLEND);
|
||||||
//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
@@ -1619,6 +1630,7 @@ class PetitComputer
|
|||||||
wstring[5] functionKey;
|
wstring[5] functionKey;
|
||||||
|
|
||||||
DialogBase dialog;
|
DialogBase dialog;
|
||||||
|
DialogResources dialogResource;
|
||||||
SDL_Rect showTouchScreen()
|
SDL_Rect showTouchScreen()
|
||||||
{
|
{
|
||||||
if (currentDisplay.rect.length != 1)
|
if (currentDisplay.rect.length != 1)
|
||||||
|
|||||||
2
dub.json
2
dub.json
@@ -9,5 +9,5 @@
|
|||||||
"buildRequirements": ["allowWarnings"],
|
"buildRequirements": ["allowWarnings"],
|
||||||
"targetPath": "out",
|
"targetPath": "out",
|
||||||
"workingDirectory": "out",
|
"workingDirectory": "out",
|
||||||
"copyFiles": ["SMILEBASIC/spdef.csv"]
|
"copyFiles": ["SMILEBASIC/spdef.csv", "SMILEBASIC/dialogresource"]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user