Yup C++ all the way :)
Ok here's my to-do list, please notify me if I'm missing anything:
TextArea
SelectionBox
Vertical Sliders
Drop down menues
The skinnable surface is already there and here's a list of its features:
Vertex and Pixel Shader/Program support.
Alpha/Blending attribues.
Up to 8 textures.
Materials.
I will provide an example later with some fancy pixel shading :D
Now this GUI should be really easy to use, to handle the user events, one is ought to provide the GUIFrame with an actionPeformed function to where it will direct all the events, an example:
void SceneFrame::actionPerformed(GUIEvent evt)
{
if(!evt.getEventSource())
return;
const String &callbackString = evt.getCallbackString();
if(evt.getEventSource()->getWidgetType() == CHECK_BOX)
{
GUICheckBox *checkBox = (GUICheckBox*)evt.getEventSource();
if(callbackString == "showVelocities")
{
if(velocitiesSurface) velocitiesSurface->setVisible(checkBox->isChecked());
return;
}
if(callbackString == "showLocations")
{
if(locationsSurface) locationsSurface->setVisible(checkBox->isChecked());
return;
}
if(callbackString == "showNormals")
{
if(normalsSurface) normalsSurface->setVisible(checkBox->isChecked());
return;
}
if(callbackString == "displayInfo")
if(checkBox->isClicked() && demoInfo)
demoInfo->setVisible(checkBox->isChecked());
}
if(evt.getEventSource()->getWidgetType() == RADIO_BUTTON)
{
GUIRadioButton *radioButton = (GUIRadioButton*)evt.getEventSource();
}
if(evt.getEventSource()->getWidgetType() == SLIDER)
{
GUISlider *slider = (GUISlider*)evt.getEventSource();
if(callbackString == "swimSize")
{
swimmerSize = clamp(int(slider->getProgress() * 10.0f), 1, 8);
slider->setLabelString(String("Swimmer Size: ") + swimmerSize);
return;
}
if(callbackString == "swimRadius")
{
swimmerRadius = clamp(slider->getProgress(), 0.1f, 1.0f);
swimmerRadius *= 10.0f;
slider->setLabelString(String("Swimmer Radius: ") + int(swimmerRadius));
swimmerRadius *= 8.0f;
return;
}
if(callbackString == "swimSpeed")
{
swimmerSpeed = clamp(slider->getProgress(), 0.1f, 1.0f);
slider->setLabelString(String("Swimmer Speed: ") + int(swimmerSpeed*10));
swimmerSpeed = 1.0f - swimmerSpeed;
swimmerSpeed = 0.0125f + swimmerSpeed*0.0125f;
return;
}
if(callbackString == "swimHeight")
{
swimmerHeight = clamp(slider->getProgress(), 0.1f, 1.0f);
slider->setLabelString(String("Swimmer Height: ") + swimmerHeight);
return;
}
if(callbackString == "dampFactor")
{
dampFactor = slider->getProgress();
dampFactor = dampFactor/10.0f + 0.85f;
slider->setLabelString(String("Damp Factor: ") + dampFactor);
return;
}
}
}
Aight, off to work on the new stuff