77 lines
1.7 KiB
C++
77 lines
1.7 KiB
C++
#include <psemek/app/app.hpp>
|
|
#include <psemek/app/main.hpp>
|
|
|
|
#include <psemek/gfx/gl.hpp>
|
|
|
|
#include <psemek/ui/controller.hpp>
|
|
#include <psemek/ui/default_element_factory.hpp>
|
|
#include <psemek/ui/font.hpp>
|
|
|
|
#include <psemek/geom/camera.hpp>
|
|
|
|
using namespace psemek;
|
|
|
|
struct ui_example
|
|
: app::app
|
|
{
|
|
ui_example()
|
|
: app("UI example", 1)
|
|
{
|
|
auto style = std::make_shared<ui::style>();
|
|
style->font = ui::make_default_9x12_font();
|
|
style->text_scale = 2;
|
|
element_factory.set_style(style);
|
|
|
|
auto screen = element_factory.make_screen();
|
|
screen->add(element_factory.make_button("Test"), ui::screen::x_policy::center, ui::screen::y_policy::center);
|
|
|
|
ui_controller.set_root(std::move(screen));
|
|
}
|
|
|
|
void on_resize(int width, int height) override
|
|
{
|
|
app::on_resize(width, height);
|
|
ui_controller.reshape({{{0, width}, {0, height}}});
|
|
}
|
|
|
|
void on_mouse_move(int x, int y, int dx, int dy) override
|
|
{
|
|
app::on_mouse_move(x, y, dx, dy);
|
|
ui_controller.event(ui::mouse_move{{x, y}});
|
|
}
|
|
|
|
void on_left_button_down() override
|
|
{
|
|
app::on_left_button_down();
|
|
ui_controller.event(ui::mouse_click{ui::mouse_button::left, true});
|
|
}
|
|
|
|
void on_left_button_up() override
|
|
{
|
|
app::on_left_button_up();
|
|
ui_controller.event(ui::mouse_click{ui::mouse_button::left, false});
|
|
}
|
|
|
|
void present() override;
|
|
|
|
ui::controller ui_controller;
|
|
ui::default_element_factory element_factory;
|
|
};
|
|
|
|
void ui_example::present()
|
|
{
|
|
gl::ClearColor(0.8f, 0.8f, 0.8f, 1.f);
|
|
gl::Clear(gl::COLOR_BUFFER_BIT);
|
|
|
|
gfx::render_target rt;
|
|
rt.framebuffer = &gfx::framebuffer::null();
|
|
rt.draw_buffer = gl::BACK_LEFT;
|
|
rt.viewport = {{{0, width()}, {0, height()}}};
|
|
|
|
ui_controller.render(rt);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
return app::main<ui_example>();
|
|
}
|