I'm actually in the process of writing a light-weight GUI system for DarkGDK. As of now, it has sprite-based window controls, buttons, text fields, and a clock gadget, as well as managing z-order. It runs consistently at or above 60 FPS, and has no problem with many windows open at once, each with their own customizable color scheme, which API elements within the window inherit. When it's closer to finished (more form elements, &c.), I'll post something about it on the boards, so keep a look out!
To give you an idea of how it works, check out this actual code:
#include "DarkGDK.h"
#include "mapi3_5.h"
void DarkGDK(void){
dbSync();
dbBackdropOn();dbColorBackdrop(dbRGB(0,0,0));
dbSetImageColorKey(255,200,221);
dbSetWindowTitle("Mapi 3.5 Example Program");
apiWindow spriteWindow;
spriteWindow.setupQuick("Control",5,5,150,230,1);
apiButton closeButton;
closeButton.setupQuick("Exit",10,71,130,18,spriteWindow);
apiButton setButton;
setButton.setupQuick("Set",10,48,130,18,spriteWindow);
apiInputField name;
name.setupQuick("Title...",10,25,130,18,spriteWindow);
apiClock clock;
clock.setupQuick(10,94,130,130,spriteWindow);
apiWindow zStackTest;
zStackTest.setupQuick("Z-Test",400,50,100,250,1);
while(LoopGDK()){
spriteWindow.updatePosition();
closeButton.update(spriteWindow);
setButton.update(spriteWindow);
name.update(spriteWindow);
clock.update(spriteWindow);
zStackTest.updatePosition();
if(closeButton.clicked())return;
if(setButton.clicked()){
spriteWindow.label=name.contents;
spriteWindow.calcImage();
}
dbSync();
}
return;
}
Screenshot attached to see what that does.
My site, for various stuff that I make.