mirror of https://github.com/adamdruppe/arsd.git
63 lines
1.5 KiB
D
63 lines
1.5 KiB
D
/++
|
|
An [arsd.minigui] widget that can embed [arsd.nanovega].
|
|
|
|
History:
|
|
Added February 7, 2020 (version 9.2)
|
|
+/
|
|
module arsd.minigui_addons.nanovega;
|
|
|
|
import arsd.minigui;
|
|
/// Since the nvg context uses UFCS, you probably want this anyway.
|
|
public import arsd.nanovega;
|
|
|
|
static if(OpenGlEnabled)
|
|
/++
|
|
The NanoVegaWidget has a class you can use with [arsd.nanovega].
|
|
|
|
History:
|
|
Included in initial release on February 7, 2020 (dub package version 9.2).
|
|
+/
|
|
class NanoVegaWidget : OpenGlWidget {
|
|
NVGContext nvg;
|
|
|
|
this(Widget parent) {
|
|
super(parent);
|
|
|
|
win.onClosing = delegate() {
|
|
nvg.kill();
|
|
};
|
|
|
|
win.visibleForTheFirstTime = delegate() {
|
|
win.setAsCurrentOpenGlContext();
|
|
nvg = nvgCreateContext();
|
|
if(nvg is null) throw new Exception("cannot initialize NanoVega");
|
|
};
|
|
|
|
win.redrawOpenGlScene = delegate() {
|
|
if(redrawNVGScene is null)
|
|
return;
|
|
glViewport(0, 0, this.width, this.height);
|
|
if(clearOnEachFrame) {
|
|
glClearColor(0, 0, 0, 0);
|
|
glClear(glNVGClearFlags);
|
|
}
|
|
|
|
nvg.beginFrame(this.width, this.height);
|
|
scope(exit) nvg.endFrame();
|
|
|
|
redrawNVGScene(nvg);
|
|
};
|
|
}
|
|
/// Set this to draw your nanovega frame.
|
|
void delegate(NVGContext nvg) redrawNVGScene;
|
|
|
|
/// If true, it automatically clears the widget canvas between each redraw call.
|
|
bool clearOnEachFrame = true;
|
|
}
|
|
|
|
/// Nanovega requires at least OpenGL 3.0, so this sets that requirement. You can override it later still, of course.
|
|
shared static this() {
|
|
setOpenGLContextVersion(3, 0);
|
|
}
|
|
|