55 lines
1.1 KiB
C++
55 lines
1.1 KiB
C++
#include <psemek/ui/impl/button_base.hpp>
|
|
#include <psemek/geom/contains.hpp>
|
|
|
|
namespace psemek::ui::impl
|
|
{
|
|
|
|
button_base::button_base()
|
|
{}
|
|
|
|
bool button_base::on_event(mouse_move_event const & event)
|
|
{
|
|
bool const mouseover = geom::contains(shape(), geom::cast<float>(event.position));
|
|
|
|
if (is_mouseover_ != mouseover)
|
|
{
|
|
is_mouseover_ = mouseover;
|
|
mouseover_.set(is_mouseover_);
|
|
on_mouseover_.set(is_mouseover_);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool button_base::on_event(mouse_button_event const & event)
|
|
{
|
|
bool const mousedown = event.button == app::mouse_button::left && event.down;
|
|
|
|
if (is_mouseover_ || !mousedown)
|
|
{
|
|
if (is_mousedown_ != mousedown)
|
|
{
|
|
is_mousedown_ = mousedown;
|
|
mousedown_.set(is_mousedown_);
|
|
on_mousedown_.set(is_mousedown_);
|
|
}
|
|
|
|
return is_mouseover_ && is_mousedown_;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void button_base::update(button const & value)
|
|
{
|
|
mouseover_ = value.mouseover;
|
|
mousedown_ = value.mousedown;
|
|
|
|
on_mouseover_ = value.on_mouseover;
|
|
on_mousedown_ = value.on_mousedown;
|
|
|
|
mouseover_.set(is_mouseover_);
|
|
mousedown_.set(is_mousedown_);
|
|
}
|
|
|
|
}
|