Add ui::impl::renderer
This commit is contained in:
parent
d7b68e44a8
commit
8cc3356eb1
4 changed files with 50 additions and 1 deletions
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include <psemek/ui/impl/size_constraints.hpp>
|
#include <psemek/ui/impl/size_constraints.hpp>
|
||||||
#include <psemek/ui/impl/events.hpp>
|
#include <psemek/ui/impl/events.hpp>
|
||||||
|
#include <psemek/ui/impl/renderer.hpp>
|
||||||
#include <psemek/react/value.hpp>
|
#include <psemek/react/value.hpp>
|
||||||
#include <psemek/geom/box.hpp>
|
#include <psemek/geom/box.hpp>
|
||||||
#include <psemek/geom/interval.hpp>
|
#include <psemek/geom/interval.hpp>
|
||||||
|
|
@ -27,6 +28,9 @@ namespace psemek::ui::impl
|
||||||
virtual bool on_event(mouse_button_event const &) { return false; }
|
virtual bool on_event(mouse_button_event const &) { return false; }
|
||||||
virtual bool on_event(key_event const &) { return false; }
|
virtual bool on_event(key_event const &) { return false; }
|
||||||
|
|
||||||
|
virtual void draw(renderer &) {}
|
||||||
|
virtual void post_draw(renderer &) {}
|
||||||
|
|
||||||
virtual ~component() {}
|
virtual ~component() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <psemek/ui/impl/component_factory.hpp>
|
#include <psemek/ui/impl/component_factory.hpp>
|
||||||
|
#include <psemek/ui/impl/renderer.hpp>
|
||||||
#include <psemek/react/value.hpp>
|
#include <psemek/react/value.hpp>
|
||||||
#include <psemek/util/pimpl.hpp>
|
#include <psemek/util/pimpl.hpp>
|
||||||
|
|
||||||
|
|
@ -16,12 +17,16 @@ namespace psemek::ui::impl
|
||||||
|
|
||||||
void set_ui(react::value<std::any> ui);
|
void set_ui(react::value<std::any> ui);
|
||||||
|
|
||||||
|
component * root();
|
||||||
|
|
||||||
bool on_event(resize_event const & event);
|
bool on_event(resize_event const & event);
|
||||||
bool on_event(mouse_move_event const & event);
|
bool on_event(mouse_move_event const & event);
|
||||||
bool on_event(mouse_wheel_event const & event);
|
bool on_event(mouse_wheel_event const & event);
|
||||||
bool on_event(mouse_button_event const & event);
|
bool on_event(mouse_button_event const & event);
|
||||||
bool on_event(key_event const & event);
|
bool on_event(key_event const & event);
|
||||||
|
|
||||||
|
void draw(renderer & renderer);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
psemek_declare_pimpl
|
psemek_declare_pimpl
|
||||||
};
|
};
|
||||||
|
|
|
||||||
11
libs/ui/include/psemek/ui/impl/renderer.hpp
Normal file
11
libs/ui/include/psemek/ui/impl/renderer.hpp
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace psemek::ui::impl
|
||||||
|
{
|
||||||
|
|
||||||
|
struct renderer
|
||||||
|
{
|
||||||
|
virtual ~renderer() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -24,7 +24,8 @@ namespace psemek::ui::impl
|
||||||
root = factory.reconciliate(std::move(root), value);
|
root = factory.reconciliate(std::move(root), value);
|
||||||
subscribe_reshape();
|
subscribe_reshape();
|
||||||
}, true);
|
}, true);
|
||||||
subscribe_reshape();
|
|
||||||
|
on_event(resize_event{screen_size});
|
||||||
}
|
}
|
||||||
|
|
||||||
void subscribe_reshape()
|
void subscribe_reshape()
|
||||||
|
|
@ -70,6 +71,24 @@ namespace psemek::ui::impl
|
||||||
|
|
||||||
return element->on_event(event);
|
return element->on_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void draw(renderer & renderer)
|
||||||
|
{
|
||||||
|
draw_impl(renderer, root.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_impl(renderer & renderer, component * element)
|
||||||
|
{
|
||||||
|
if (!element)
|
||||||
|
return;
|
||||||
|
|
||||||
|
element->draw(renderer);
|
||||||
|
|
||||||
|
for (auto const & child : element->children())
|
||||||
|
draw_impl(renderer, child.get());
|
||||||
|
|
||||||
|
element->post_draw(renderer);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
controller::controller(component_factory & factory)
|
controller::controller(component_factory & factory)
|
||||||
|
|
@ -83,6 +102,11 @@ namespace psemek::ui::impl
|
||||||
impl().set_ui(std::move(ui));
|
impl().set_ui(std::move(ui));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
component * controller::root()
|
||||||
|
{
|
||||||
|
return impl().root.get();
|
||||||
|
}
|
||||||
|
|
||||||
bool controller::on_event(resize_event const & event)
|
bool controller::on_event(resize_event const & event)
|
||||||
{
|
{
|
||||||
return impl().on_event(event);
|
return impl().on_event(event);
|
||||||
|
|
@ -108,4 +132,9 @@ namespace psemek::ui::impl
|
||||||
return impl().on_event(event);
|
return impl().on_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void controller::draw(renderer & renderer)
|
||||||
|
{
|
||||||
|
impl().draw(renderer);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue