bwidgets/inc/basic_widgets/w/feat/mouse_handler.hpp

35 lines
1.1 KiB
C++

#ifndef BWIDGETS_MOUSE_HANDLER_HPP_
#define BWIDGETS_MOUSE_HANDLER_HPP_
#include <functional>
#include <basic_widgets/w/feat/focus_handler.hpp>
struct SDL_MouseButtonEvent;
struct SDL_MouseMotionEvent;
namespace bwidgets::widget
{
class MouseHandler : public virtual FocusHandler
{
protected:
const SDL_Rect* _click_area = nullptr;
bool _is_hovered = false;
bool _is_pushed = false;
virtual void _handle_mouse_button(const SDL_MouseButtonEvent&,
const SDL_Rect&) = 0;
virtual void _handle_mouse_motion(const SDL_MouseMotionEvent&,
const SDL_Rect&) = 0;
public:
std::function<void (const SDL_MouseButtonEvent&)> click_handler = nullptr;
virtual void handle_mouse(const SDL_MouseButtonEvent&,
const SDL_Rect&) final;
virtual void handle_mouse(const SDL_MouseMotionEvent&,
const SDL_Rect&) final;
};
}
#endif