#include <msp/gl/framebuffer.h>
#include <msp/gltk/layout.h>
#include "buttondemo.h"
+#include "dialogdemo.h"
#include "dropdowndemo.h"
#include "entrydemo.h"
#include "toggledemo.h"
WidgetDemo::WidgetDemo(int, char **):
window(800, 600),
+ gl_device(window),
+ view(window),
resources("basic.skin"),
root(resources, window)
{
window.set_title("GLtk widget demo");
window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &WidgetDemo::exit), 0));
- root.set_layout(new GLtk::Layout);
+ GLtk::Layout &root_layout = root.get_or_create_layout();
root.add(selector);
- root.get_layout()->set_expand(selector, false, true);
+ root_layout.set_expand(selector, false, true);
- add_demo("Button", new ButtonDemo);
- add_demo("Dropdown", new DropdownDemo);
- add_demo("Entry", new EntryDemo);
- add_demo("Toggle", new ToggleDemo);
+ add_demo<ButtonDemo>("Button");
+ add_demo<DialogDemo>("Dialog");
+ add_demo<DropdownDemo>("Dropdown");
+ add_demo<EntryDemo>("Entry");
+ add_demo<ToggleDemo>("Toggle");
+
+ view.set_content(&root);
}
int WidgetDemo::main()
void WidgetDemo::tick()
{
window.tick();
- GL::Framebuffer::system().clear(GL::COLOR_BUFFER_BIT);
- root.render();
- window.swap_buffers();
+ view.render();
}
-void WidgetDemo::add_demo(const string &title, GLtk::Panel *demo)
+template<typename T>
+void WidgetDemo::add_demo(const string &title)
{
- demo->set_visible(false);
- root.add(*demo);
- root.get_layout()->add_constraint(*demo, GLtk::Layout::RIGHT_OF, selector);
- root.get_layout()->set_expand(*demo, true, true);
+ GLtk::Layout &root_layout = root.get_or_create_layout();
+
+ T &demo = root.add_new<T>();
+ demo.set_visible(false);
+ root_layout.add_constraint(demo, GLtk::Layout::RIGHT_OF, selector);
+ root_layout.set_expand(demo, true, true);
- selector.add_demo(title, demo);
+ selector.add_demo(title, &demo);
}