psemek/libs/ui/source/impl/button_base.cpp

41 lines
804 B
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 (*mouseover_ != mouseover)
mouseover_.set(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 (*mouseover_ || !mousedown)
{
if (*mousedown_ != mousedown)
mousedown_.set(mousedown);
return *mouseover_ && mousedown;
}
return false;
}
void button_base::update(button const & value)
{
mouseover_ = value.mouseover;
mousedown_ = value.mousedown;
}
}