mirror of
https://github.com/robmcmullen/apple2.git
synced 2024-06-16 09:29:32 +00:00
Added missing files from last commit. :-/
This commit is contained in:
parent
c970c23a2e
commit
331bbf2080
517
src/gui/config.cpp
Normal file
517
src/gui/config.cpp
Normal file
|
@ -0,0 +1,517 @@
|
||||||
|
//
|
||||||
|
// config.cpp
|
||||||
|
//
|
||||||
|
// Configuration GUI
|
||||||
|
// by James Hammons
|
||||||
|
// © 2019 Underground Software
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include <vector>
|
||||||
|
#include "elements.h"
|
||||||
|
#include "font10pt.h"
|
||||||
|
#include "gui.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "settings.h"
|
||||||
|
#include "video.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define C_WIDTH 402
|
||||||
|
#define C_HEIGHT 322
|
||||||
|
#define C_XPOS ((VIRTUAL_SCREEN_WIDTH - C_WIDTH) / 2)
|
||||||
|
#define C_YPOS ((VIRTUAL_SCREEN_HEIGHT - C_HEIGHT) / 2)
|
||||||
|
|
||||||
|
static SDL_Texture * window = NULL;
|
||||||
|
//static uint32_t windowPixels[C_WIDTH * C_HEIGHT];
|
||||||
|
static SDL_Texture * cardTex[3] = { 0 };
|
||||||
|
static SDL_Texture * cardBay = NULL;
|
||||||
|
bool Config::showWindow = false;
|
||||||
|
|
||||||
|
std::vector<void *> objList;
|
||||||
|
|
||||||
|
static bool dragging = false;
|
||||||
|
static bool entered = false;
|
||||||
|
static bool refresh = false;
|
||||||
|
//static bool cb1Checked = false;
|
||||||
|
static bool cb2Checked = false;
|
||||||
|
//static bool cb3Checked = false;
|
||||||
|
static bool cb4Checked = false;
|
||||||
|
static bool cbnChecked = false;
|
||||||
|
static char le1[512] = { 0 };
|
||||||
|
|
||||||
|
static const char cb1Text[] = "Automatically save state on exit";
|
||||||
|
static const char cb2Text[] = "Enable hard drive";
|
||||||
|
static const char cb3Text[] = "Run Apple2 in full screen mode";
|
||||||
|
static const char cb4Text[] = "Automatically switch to Apple ][ mode for games that require it";
|
||||||
|
static const char cbnText[] = "Don't check this box";
|
||||||
|
static const char le1Text[] = "HD1 location:";
|
||||||
|
|
||||||
|
static const char cbChecked[(9 * 11) + 1] =
|
||||||
|
" @@"
|
||||||
|
" @@"
|
||||||
|
" @@ "
|
||||||
|
" @@ "
|
||||||
|
" @@ "
|
||||||
|
" @@ @@ "
|
||||||
|
"@@ @@ "
|
||||||
|
" @@ @@ "
|
||||||
|
" @@@ @ "
|
||||||
|
" @ @@ @ "
|
||||||
|
" @@ @@ ";
|
||||||
|
|
||||||
|
static const char cbUnchecked[(9 * 11) + 1] =
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
" @@@@@@ "
|
||||||
|
" @ @ "
|
||||||
|
" @ @ "
|
||||||
|
" @ @ "
|
||||||
|
" @ @ "
|
||||||
|
" @@@@@@ ";
|
||||||
|
|
||||||
|
static const char slotNum[7][(5 * 5) + 1] =
|
||||||
|
{
|
||||||
|
" @ "
|
||||||
|
"@@@ "
|
||||||
|
" @ "
|
||||||
|
" @ "
|
||||||
|
"@@@@@",
|
||||||
|
|
||||||
|
"@@@@ "
|
||||||
|
" @"
|
||||||
|
" @@@ "
|
||||||
|
"@ "
|
||||||
|
"@@@@@",
|
||||||
|
|
||||||
|
"@@@@ "
|
||||||
|
" @"
|
||||||
|
" @@@ "
|
||||||
|
" @"
|
||||||
|
"@@@@ ",
|
||||||
|
|
||||||
|
"@ @ "
|
||||||
|
"@ @ "
|
||||||
|
"@@@@@"
|
||||||
|
" @ "
|
||||||
|
" @ ",
|
||||||
|
|
||||||
|
"@@@@@"
|
||||||
|
"@ "
|
||||||
|
"@@@@ "
|
||||||
|
" @"
|
||||||
|
"@@@@",
|
||||||
|
|
||||||
|
" @@@@"
|
||||||
|
"@ "
|
||||||
|
"@@@@ "
|
||||||
|
"@ @"
|
||||||
|
" @@@ ",
|
||||||
|
|
||||||
|
"@@@@@"
|
||||||
|
" @"
|
||||||
|
" @ "
|
||||||
|
" @ "
|
||||||
|
" @ "
|
||||||
|
};
|
||||||
|
|
||||||
|
//static uint8_t card1[(96 * 11) + 1] = { 0 };
|
||||||
|
|
||||||
|
|
||||||
|
void Config::Init(SDL_Renderer * renderer)
|
||||||
|
{
|
||||||
|
window = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ABGR8888,
|
||||||
|
SDL_TEXTUREACCESS_TARGET, C_WIDTH, C_HEIGHT);
|
||||||
|
|
||||||
|
if (!window)
|
||||||
|
{
|
||||||
|
WriteLog("GUI (Config): Could not create window!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SDL_SetTextureBlendMode(window, SDL_BLENDMODE_BLEND) == -1)
|
||||||
|
WriteLog("GUI (Config): Could not set blend mode for window.\n");
|
||||||
|
|
||||||
|
for(int t=0; t<3; t++)
|
||||||
|
{
|
||||||
|
cardTex[t] = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,
|
||||||
|
SDL_TEXTUREACCESS_TARGET, 96, 11);
|
||||||
|
SDL_SetTextureBlendMode(cardTex[t], SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(renderer, cardTex[t]);
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
|
||||||
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0x00, 0xAA, 0x00, 0xFF);
|
||||||
|
|
||||||
|
for(int j=3; j<8; j++)
|
||||||
|
for(int i=0; i<96; i++)
|
||||||
|
SDL_RenderDrawPoint(renderer, i, j);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(renderer, cardTex[0]);
|
||||||
|
GUI::DrawString(renderer, 4, 0, "Disk ][");
|
||||||
|
SDL_SetRenderTarget(renderer, cardTex[1]);
|
||||||
|
GUI::DrawString(renderer, 2, 0, "Mockingboard");
|
||||||
|
SDL_SetRenderTarget(renderer, cardTex[2]);
|
||||||
|
GUI::DrawString(renderer, 6, 0, "SCSI");
|
||||||
|
|
||||||
|
cardBay = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 123, 99);
|
||||||
|
SDL_SetTextureBlendMode(cardBay, SDL_BLENDMODE_BLEND);
|
||||||
|
SDL_SetRenderTarget(renderer, cardBay);
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
|
||||||
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
GUI::DrawBox(renderer, 5, 5, 118, 88, 0xFF, 0xFF, 0xFF);
|
||||||
|
GUI::DrawStringVert(renderer, 5, 33 + 21, " SLOTS ");
|
||||||
|
|
||||||
|
for(int t=0; t<7; t++)
|
||||||
|
{
|
||||||
|
GUI::DrawBox(renderer, FONT_WIDTH * 2, (FONT_HEIGHT * (t + 1)) + 3, 96, 5, 0xFF, 0xFF, 0xFF);
|
||||||
|
GUI::DrawCharArray(renderer, slotNum[t], 112, (FONT_HEIGHT * (t + 1)) + 3, 5, 5, 0xFF, 0xFF, 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(renderer, NULL);
|
||||||
|
|
||||||
|
objList.push_back(new CheckBox(1, 1, &cb1Checked, cb1Text));
|
||||||
|
objList.push_back(new CheckBox(1, 1, &settings.autoStateSaving, cb1Text));
|
||||||
|
objList.push_back(new CheckBox(1, 2, &cb2Checked, cb2Text));
|
||||||
|
objList.push_back(new CheckBox(1, 3, &settings.fullscreen, cb3Text));
|
||||||
|
objList.push_back(new CheckBox(1, 4, &cb4Checked, cb4Text));
|
||||||
|
|
||||||
|
objList.push_back(new CheckBox(1, 27, &cbnChecked, cbnText));
|
||||||
|
|
||||||
|
objList.push_back(new LineEdit(1, 6, le1, 48, le1Text));
|
||||||
|
objList.push_back(new Draggable(1 * FONT_WIDTH, 8 * FONT_HEIGHT, 96, 11, cardTex[0]));
|
||||||
|
objList.push_back(new Draggable(1 * FONT_WIDTH, 9 * FONT_HEIGHT, 96, 11, cardTex[0]));
|
||||||
|
objList.push_back(new Draggable(1 * FONT_WIDTH, 10 * FONT_HEIGHT, 96, 11, cardTex[1]));
|
||||||
|
objList.push_back(new Draggable(1 * FONT_WIDTH, 11 * FONT_HEIGHT, 96, 11, cardTex[1]));
|
||||||
|
objList.push_back(new Draggable(1 * FONT_WIDTH, 12 * FONT_HEIGHT, 96, 11, cardTex[2]));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Config::ShowWindow(void)
|
||||||
|
{
|
||||||
|
entered = false;
|
||||||
|
showWindow = true;
|
||||||
|
refresh = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Config::HideWindow(void)
|
||||||
|
{
|
||||||
|
showWindow = false;
|
||||||
|
refresh = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Config::MouseDown(int32_t x, int32_t y, uint32_t buttons)
|
||||||
|
{
|
||||||
|
if (!showWindow || !entered)
|
||||||
|
return;
|
||||||
|
|
||||||
|
dragging = true;
|
||||||
|
std::vector<void *>::iterator i;
|
||||||
|
|
||||||
|
for(i=objList.begin(); i!=objList.end(); i++)
|
||||||
|
{
|
||||||
|
Object * obj = (Object *)(*i);
|
||||||
|
|
||||||
|
switch (obj->type)
|
||||||
|
{
|
||||||
|
case OTCheckBox:
|
||||||
|
{
|
||||||
|
CheckBox * cb = (CheckBox *)obj;
|
||||||
|
|
||||||
|
if (cb->hovered)
|
||||||
|
{
|
||||||
|
*(cb->state) = !(*(cb->state));
|
||||||
|
refresh = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case OTDraggable:
|
||||||
|
{
|
||||||
|
Draggable * d = (Draggable *)obj;
|
||||||
|
|
||||||
|
if (d->hovered)
|
||||||
|
{
|
||||||
|
d->dragging = true;
|
||||||
|
refresh = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Config::MouseUp(int32_t x, int32_t y, uint32_t buttons)
|
||||||
|
{
|
||||||
|
if (!showWindow)
|
||||||
|
return;
|
||||||
|
|
||||||
|
dragging = false;
|
||||||
|
std::vector<void *>::iterator i;
|
||||||
|
|
||||||
|
for(i=objList.begin(); i!=objList.end(); i++)
|
||||||
|
{
|
||||||
|
Object * obj = (Object *)(*i);
|
||||||
|
|
||||||
|
switch (obj->type)
|
||||||
|
{
|
||||||
|
case OTDraggable:
|
||||||
|
{
|
||||||
|
Draggable * d = (Draggable *)obj;
|
||||||
|
|
||||||
|
if (d->dragging)
|
||||||
|
{
|
||||||
|
d->dragging = false;
|
||||||
|
|
||||||
|
if ((d->r.x > 120) && (d->r.x < 220) && (d->r.y > (8 * FONT_HEIGHT)) && (d->r.y < (15 * FONT_HEIGHT)))
|
||||||
|
{
|
||||||
|
d->spot = ((d->r.y - (8 * FONT_HEIGHT)) / FONT_HEIGHT) + 1;
|
||||||
|
d->r.x = 120;
|
||||||
|
d->r.y = (7 + d->spot) * FONT_HEIGHT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d->r.x = d->homex;
|
||||||
|
d->r.y = d->homey;
|
||||||
|
d->spot = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
refresh = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int32_t oldx, oldy;
|
||||||
|
void Config::MouseMove(int32_t x, int32_t y, uint32_t buttons)
|
||||||
|
{
|
||||||
|
if (!showWindow)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int32_t nx = x - C_XPOS, ny = y - C_YPOS;
|
||||||
|
|
||||||
|
// Check to see if C has been hovered yet, and, if so, set a flag to show
|
||||||
|
// that it has
|
||||||
|
if (!entered && ((nx >= 0) && (nx <= C_WIDTH) && (ny >= 0)
|
||||||
|
&& (ny <= C_HEIGHT)))
|
||||||
|
entered = true;
|
||||||
|
|
||||||
|
// Check to see if the C, since being hovered, is now no longer being
|
||||||
|
// hovered
|
||||||
|
//N.B.: Should probably make like a 1/2 to 1 second timeout to allow for overshooting the edge of the thing, maybe have the window fade out gradually and let it come back if you enter before it leaves...
|
||||||
|
if (entered && ((nx < 0) || (nx > C_WIDTH) || (ny < 0) || (ny > C_HEIGHT)))
|
||||||
|
{
|
||||||
|
showWindow = false;
|
||||||
|
refresh = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bail out if the C hasn't been entered yet
|
||||||
|
if (!entered)
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::vector<void *>::iterator i;
|
||||||
|
|
||||||
|
for(i=objList.begin(); i!=objList.end(); i++)
|
||||||
|
{
|
||||||
|
Object * obj = (Object *)(*i);
|
||||||
|
|
||||||
|
switch (obj->type)
|
||||||
|
{
|
||||||
|
case OTCheckBox:
|
||||||
|
{
|
||||||
|
CheckBox * cb = (CheckBox *)obj;
|
||||||
|
bool oldHover = cb->hovered;
|
||||||
|
cb->hovered = (((nx >= ((cb->r.x * FONT_WIDTH) + 1))
|
||||||
|
&& (nx <= ((cb->r.x * FONT_WIDTH) + 6))
|
||||||
|
&& (ny >= ((cb->r.y * FONT_HEIGHT) + 3))
|
||||||
|
&& (ny <= ((cb->r.y * FONT_HEIGHT) + 8))) ? true : false);
|
||||||
|
|
||||||
|
if (oldHover != cb->hovered)
|
||||||
|
refresh = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case OTLineEdit:
|
||||||
|
{
|
||||||
|
LineEdit * le = (LineEdit *)obj;
|
||||||
|
uint32_t labelLen = strlen(le->label);
|
||||||
|
bool oldHover = le->hovered;
|
||||||
|
le->hovered = (((nx >= ((le->r.x + labelLen + 1) * FONT_WIDTH))
|
||||||
|
&& (nx <= ((le->r.x + labelLen + 1 + le->size) * FONT_WIDTH))
|
||||||
|
&& (ny >= ((le->r.y * FONT_HEIGHT)))
|
||||||
|
&& (ny <= ((le->r.y + 1) * FONT_HEIGHT))) ? true : false);
|
||||||
|
|
||||||
|
if (oldHover != le->hovered)
|
||||||
|
refresh = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case OTDraggable:
|
||||||
|
{
|
||||||
|
Draggable * d = (Draggable *)obj;
|
||||||
|
|
||||||
|
if (!d->dragging)
|
||||||
|
{
|
||||||
|
bool oldHover = d->hovered;
|
||||||
|
d->hovered = (((nx >= d->r.x) && (nx < (d->r.x + d->r.w))
|
||||||
|
&& (ny >= d->r.y) && (ny < (d->r.y + d->r.h)))
|
||||||
|
? true : false);
|
||||||
|
|
||||||
|
if (oldHover != d->hovered)
|
||||||
|
refresh = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d->r.x += (nx - oldx);
|
||||||
|
d->r.y += (ny - oldy);
|
||||||
|
refresh = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
oldx = nx;
|
||||||
|
oldy = ny;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Config::KeyDown(uint32_t key)
|
||||||
|
{
|
||||||
|
if (!showWindow)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// bool response = false;
|
||||||
|
std::vector<void *>::iterator i;
|
||||||
|
|
||||||
|
for(i=objList.begin(); i!=objList.end(); i++)
|
||||||
|
{
|
||||||
|
Object * obj = (Object *)(*i);
|
||||||
|
|
||||||
|
switch (obj->type)
|
||||||
|
{
|
||||||
|
case OTLineEdit:
|
||||||
|
{
|
||||||
|
LineEdit * le = (LineEdit *)obj;
|
||||||
|
|
||||||
|
if (le->hovered)
|
||||||
|
{
|
||||||
|
uint32_t textLen = strlen(le->text);
|
||||||
|
le->text[textLen] = key;
|
||||||
|
refresh = true;
|
||||||
|
WriteLog("Config: textLen=%u, key=%02X\n", textLen, key);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Config::DrawElements(SDL_Renderer * renderer)
|
||||||
|
{
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0x7F, 0x3F, 0x00, 0xEF);
|
||||||
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
SDL_Rect cbRect = { 108, FONT_HEIGHT * 7, 123, 99 };
|
||||||
|
SDL_RenderCopy(renderer, cardBay, NULL, &cbRect);
|
||||||
|
|
||||||
|
std::vector<void *>::iterator i;
|
||||||
|
|
||||||
|
for(i=objList.begin(); i!=objList.end(); i++)
|
||||||
|
{
|
||||||
|
Object * obj = (Object *)(*i);
|
||||||
|
|
||||||
|
switch (obj->type)
|
||||||
|
{
|
||||||
|
case OTCheckBox:
|
||||||
|
{
|
||||||
|
CheckBox * cb = (CheckBox *)obj;
|
||||||
|
uint8_t r = 0x00, g = 0xAA, b = 0x00;
|
||||||
|
|
||||||
|
if (cb->hovered)
|
||||||
|
r = 0x20, g = 0xFF, b = 0x20;
|
||||||
|
|
||||||
|
GUI::DrawCharArray(renderer, (*(cb->state) ? cbChecked : cbUnchecked), cb->r.x * FONT_WIDTH, (cb->r.y * FONT_HEIGHT) - 2, 9, 11, r, g, b);
|
||||||
|
GUI::DrawString(renderer, cb->r.x + 2, cb->r.y, cb->text);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case OTLineEdit:
|
||||||
|
{
|
||||||
|
LineEdit * le = (LineEdit *)obj;
|
||||||
|
GUI::DrawString(renderer, le->r.x, le->r.y, le->label);
|
||||||
|
uint32_t labelLen = strlen(le->label);
|
||||||
|
uint8_t r = 0x00, g = 0xAA, b = 0x00;
|
||||||
|
|
||||||
|
if (le->hovered)
|
||||||
|
r = 0x20, g = 0xFF, b = 0x20;
|
||||||
|
|
||||||
|
GUI::DrawBox(renderer, FONT_WIDTH * (le->r.x + labelLen + 1), FONT_HEIGHT * le->r.y, FONT_WIDTH * le->size, FONT_HEIGHT, r, g, b);
|
||||||
|
GUI::DrawString(renderer, le->r.x + labelLen + 1, le->r.y, le->text);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case OTDraggable:
|
||||||
|
{
|
||||||
|
Draggable * d = (Draggable *)obj;
|
||||||
|
SDL_RenderCopy(renderer, d->img, NULL, &d->r);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Config::Render(SDL_Renderer * renderer)
|
||||||
|
{
|
||||||
|
if (!(window && showWindow))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (refresh)
|
||||||
|
{
|
||||||
|
SDL_SetRenderTarget(renderer, window);
|
||||||
|
DrawElements(renderer);
|
||||||
|
refresh = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(renderer, NULL);
|
||||||
|
|
||||||
|
SDL_Rect dst = { C_XPOS, C_YPOS, C_WIDTH, C_HEIGHT };
|
||||||
|
SDL_RenderCopy(renderer, window, NULL, &dst);
|
||||||
|
}
|
||||||
|
|
29
src/gui/config.h
Normal file
29
src/gui/config.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#ifndef __CONFIG_H__
|
||||||
|
#define __CONFIG_H__
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Config() {}
|
||||||
|
~Config() {}
|
||||||
|
|
||||||
|
// Everything is class methods/variables
|
||||||
|
static void Init(SDL_Renderer *);
|
||||||
|
static void ShowWindow(void);
|
||||||
|
static void HideWindow(void);
|
||||||
|
static void MouseDown(int32_t, int32_t, uint32_t);
|
||||||
|
static void MouseUp(int32_t, int32_t, uint32_t);
|
||||||
|
static void MouseMove(int32_t, int32_t, uint32_t);
|
||||||
|
static bool KeyDown(uint32_t);
|
||||||
|
static void DrawElements(SDL_Renderer *);
|
||||||
|
static void Render(SDL_Renderer *);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static bool showWindow;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __CONFIG_H__
|
||||||
|
|
50
src/gui/elements.h
Normal file
50
src/gui/elements.h
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#ifndef __ELEMENTS_H__
|
||||||
|
#define __ELEMENTS_H__
|
||||||
|
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
enum ObjectType { OTNone = 0, OTCheckBox, OTLineEdit, OTDraggable, OTCount };
|
||||||
|
|
||||||
|
#define OBJECT_COMMON \
|
||||||
|
int type; \
|
||||||
|
SDL_Rect r; \
|
||||||
|
bool hovered;
|
||||||
|
|
||||||
|
struct Object {
|
||||||
|
OBJECT_COMMON;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CheckBox {
|
||||||
|
OBJECT_COMMON;
|
||||||
|
bool * state;
|
||||||
|
const char * text;
|
||||||
|
|
||||||
|
CheckBox(): type(OTCheckBox), hovered(false), state(0), text(0) { r.x = r.y = 0; }
|
||||||
|
CheckBox(int32_t xx, int32_t yy, bool * s = 0, const char * t = 0): type(OTCheckBox), hovered(false), state(s), text(t) { r.x = xx; r.y = yy; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct LineEdit {
|
||||||
|
OBJECT_COMMON;
|
||||||
|
char * text;
|
||||||
|
uint8_t size;
|
||||||
|
const char * label;
|
||||||
|
|
||||||
|
LineEdit(): type(OTLineEdit), hovered(false), text(0), size(12), label(0) { r.x = r.y = 0; }
|
||||||
|
LineEdit(int32_t xx, int32_t yy, char * t = 0, uint8_t sz = 12, const char * lb = 0): type(OTLineEdit), hovered(false), text(t), size(sz), label(lb) { r.x = xx; r.y = yy; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Draggable {
|
||||||
|
OBJECT_COMMON;
|
||||||
|
int32_t homex, homey;
|
||||||
|
bool dragging;
|
||||||
|
SDL_Texture * img;
|
||||||
|
SDL_Rect dest;
|
||||||
|
uint8_t spot;
|
||||||
|
|
||||||
|
Draggable(): type(OTDraggable), hovered(false), homex(0), homey(0), dragging(false), img(0), spot(0) { r.x = r.y = r.w = r.h = 0; }
|
||||||
|
Draggable(int32_t xx, int32_t yy, int32_t w, int32_t h, SDL_Texture * i = 0): type(OTDraggable), hovered(false), homex(xx), homey(yy), dragging(false), img(i), spot(0) { r.x = xx; r.y = yy; r.w = w; r.h = h; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __ELEMENTS_H__
|
||||||
|
|
Loading…
Reference in New Issue
Block a user