Add Gui class and move GUI logic from main module to it.

This commit is contained in:
Josh Holtrop 2020-12-03 10:00:34 -05:00
parent 19a1ae222a
commit 5385718e91
2 changed files with 68 additions and 40 deletions

63
src/jes/gui/package.d Normal file
View File

@ -0,0 +1,63 @@
module jes.gui;
static import jtk;
import derelict.opengl;
import std.stdio;
class Gui
{
jtk.Window[] m_windows;
this()
{
if (!jtk.init())
{
throw new Exception("JTK initialization failed.");
}
}
void run()
{
try
{
m_windows ~= new jtk.Window();
event_loop();
m_windows[0].close();
}
finally
{
jtk.quit();
}
}
private void event_loop()
{
bool running = true;
while (running)
{
jtk.Event event = jtk.wait_event();
switch (event.type)
{
case jtk.Event.WINDOW_CLOSE:
running = false;
break;
case jtk.Event.WINDOW_RESIZE:
glViewport(0, 0, event.window_resize.width, event.window_resize.height);
redraw_window(event.window_resize.window);
break;
default:
break;
}
}
}
private void redraw_window(jtk.Window window)
{
glClearColor(0.5, 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
m_windows[0].swap_buffers();
}
}

View File

@ -1,50 +1,15 @@
static import jtk;
import std.stdio; import std.stdio;
import derelict.opengl; import jes.gui;
jtk.Window window;
static void redraw()
{
glClearColor(0.5, 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
window.swap_buffers();
}
int main(string[] args) int main(string[] args)
{ {
if (!jtk.init()) version(unittest)
{ {
stderr.writeln("JTK initialization failed.");
return 1;
} }
try else
{ {
window = new jtk.Window(); Gui g = new Gui();
bool running = true; g.run();
while (running)
{
jtk.Event event = jtk.wait_event();
switch (event.type)
{
case jtk.Event.WINDOW_CLOSE:
running = false;
break;
case jtk.Event.WINDOW_RESIZE:
glViewport(0, 0, event.window_resize.width, event.window_resize.height);
redraw();
break;
default:
break;
}
}
window.close();
}
finally
{
jtk.quit();
} }
return 0; return 0;
} }