代码精简

This commit is contained in:
hyzboy 2025-06-11 01:03:53 +08:00
parent 333bec0a12
commit c5b37f9835

View File

@ -1,121 +1,118 @@
#ifndef HGL_IO_MOUSE_EVENT_INCLUDE #pragma once
#define HGL_IO_MOUSE_EVENT_INCLUDE
#include<hgl/io/event/InputEvent.h> #include<hgl/io/event/InputEvent.h>
namespace hgl #include<hgl/math/Vector.h>
namespace hgl::io
{ {
namespace io /**
*
*/
enum class MouseButton
{ {
/** None=0,
*
*/ Left,
enum class MouseButton Mid,
Right,
X1,X2,
ENUM_CLASS_RANGE(None,X2)
};
enum class MouseEventID
{
Move =0,
Pressed,
Released,
DblClicked,
Wheel
};
union MouseEventData
{
uint64 data;
struct
{ {
None=0, int16 x,y;
uint8 button;
Left,
Mid,
Right,
X1,X2,
ENUM_CLASS_RANGE(None,X2)
}; };
};
enum class MouseEventID constexpr size_t MouseEventDataBytes=sizeof(MouseEventData);
{
Move =0,
Pressed,
Released,
DblClicked,
Wheel
};
union MouseEventData
{
uint64 data;
struct
{
int16 x,y;
uint8 button;
};
};
constexpr size_t MouseEventDataBytes=sizeof(MouseEventData);
class MouseEvent:public InputEvent class MouseEvent:public InputEvent
{
MouseEventData *med;
Vector2i position;
bool pressed_statues[size_t(MouseButton::RANGE_SIZE)];
public:
MouseEvent():InputEvent(InputEventSource::Mouse)
{ {
MouseEventData *med; med=nullptr;
position.x=0;
int x,y; position.y=0;;
hgl_zero(pressed_statues);
bool pressed_statues[size_t(MouseButton::RANGE_SIZE)]; }
virtual ~MouseEvent()=default;
public:
MouseEvent():InputEvent(InputEventSource::Mouse)
{
med=nullptr;
x=y=0;
hgl_zero(pressed_statues);
}
virtual ~MouseEvent()=default;
EventProcResult OnEvent(const EventHeader &header,const uint64 data) override EventProcResult OnEvent(const EventHeader &header,const uint64 data) override
{
if(header.type==InputEventSource::Mouse)
{ {
if(header.type==InputEventSource::Mouse) med=(MouseEventData *)&data;
if(MouseEventID(header.id)==MouseEventID::Wheel)
{
if(OnWheel (med->x,med->y) )return EventProcResult::Break;
}
else
{ {
med=(MouseEventData *)&data; position.x=med->x;
position.y=med->y;
if(MouseEventID(header.id)==MouseEventID::Wheel) switch(MouseEventID(header.id))
{
if(OnWheel (med->x,med->y) )return EventProcResult::Break;
}
else
{ {
x=med->x;y=med->y; case MouseEventID::Move: if(OnMove (med->x,med->y) )return EventProcResult::Break;break;
case MouseEventID::Pressed: pressed_statues[med->button]=true;
switch(MouseEventID(header.id)) if(OnPressed (med->x,med->y,MouseButton(med->button)))return EventProcResult::Break;break;
{ case MouseEventID::Released: pressed_statues[med->button]=false;
case MouseEventID::Move: if(OnMove (med->x,med->y) )return EventProcResult::Break;break; if(OnReleased (med->x,med->y,MouseButton(med->button)))return EventProcResult::Break;break;
case MouseEventID::Pressed: pressed_statues[med->button]=true; case MouseEventID::DblClicked: if(OnDblClicked (med->x,med->y,MouseButton(med->button)))return EventProcResult::Break;break;
if(OnPressed (med->x,med->y,MouseButton(med->button)))return EventProcResult::Break;break;
case MouseEventID::Released: pressed_statues[med->button]=false;
if(OnReleased (med->x,med->y,MouseButton(med->button)))return EventProcResult::Break;break;
case MouseEventID::DblClicked: if(OnDblClicked (med->x,med->y,MouseButton(med->button)))return EventProcResult::Break;break;
}
} }
} }
if(InputEvent::OnEvent(header,data)==EventProcResult::Break)
return EventProcResult::Break;
return EventProcResult::Continue;
} }
virtual bool OnMove (int,int){return false;} if(InputEvent::OnEvent(header,data)==EventProcResult::Break)
virtual bool OnWheel (int,int){return false;} return EventProcResult::Break;
virtual bool OnPressed (int,int,MouseButton){return false;} return EventProcResult::Continue;
virtual bool OnReleased (int,int,MouseButton){return false;} }
virtual bool OnDblClicked(int,int,MouseButton){return false;}
/** virtual bool OnMove (int,int){return false;}
* virtual bool OnWheel (int,int){return false;}
*/
const bool HasPressed(const MouseButton &mb)const
{
if(!RangeCheck(mb))return(false);
return pressed_statues[size_t(mb)]; virtual bool OnPressed (int,int,MouseButton){return false;}
} virtual bool OnReleased (int,int,MouseButton){return false;}
virtual bool OnDblClicked(int,int,MouseButton){return false;}
public: /**
*
*/
const bool HasPressed(const MouseButton &mb)const
{
if(!RangeCheck(mb))return(false);
const int GetX()const{return x;} return pressed_statues[size_t(mb)];
const int GetY()const{return y;} }
};//class MouseEvent
}//namespace io public:
}//namespace hgl
#endif//HGL_IO_MOUSE_EVENT_INCLUDE const Vector2i &GetMouseCoord()const{return position;}
};//class MouseEvent
}//namespace hgl::io