diff --git a/inc/hgl/io/event/MouseEvent.h b/inc/hgl/io/event/MouseEvent.h index 7512b4a..040387a 100644 --- a/inc/hgl/io/event/MouseEvent.h +++ b/inc/hgl/io/event/MouseEvent.h @@ -1,121 +1,118 @@ -#ifndef HGL_IO_MOUSE_EVENT_INCLUDE -#define HGL_IO_MOUSE_EVENT_INCLUDE +#pragma once #include -namespace hgl +#include +namespace hgl::io { - namespace io + /** + * 鼠标按钮枚举 + */ + enum class MouseButton { - /** - * 鼠标按钮枚举 - */ - enum class MouseButton + None=0, + + Left, + 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, - - Left, - Mid, - Right, - - X1,X2, - - ENUM_CLASS_RANGE(None,X2) + int16 x,y; + uint8 button; }; + }; - enum class MouseEventID - { - Move =0, - Pressed, - Released, - DblClicked, - Wheel - }; - - union MouseEventData - { - uint64 data; - - struct - { - int16 x,y; - uint8 button; - }; - }; - - constexpr size_t MouseEventDataBytes=sizeof(MouseEventData); + 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; - - int x,y; - - bool pressed_statues[size_t(MouseButton::RANGE_SIZE)]; - - public: - - MouseEvent():InputEvent(InputEventSource::Mouse) - { - med=nullptr; - x=y=0; - hgl_zero(pressed_statues); - } - virtual ~MouseEvent()=default; + med=nullptr; + position.x=0; + position.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) - { - if(OnWheel (med->x,med->y) )return EventProcResult::Break; - } - else + switch(MouseEventID(header.id)) { - x=med->x;y=med->y; - - switch(MouseEventID(header.id)) - { - case MouseEventID::Move: if(OnMove (med->x,med->y) )return EventProcResult::Break;break; - case MouseEventID::Pressed: pressed_statues[med->button]=true; - 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; - } + case MouseEventID::Move: if(OnMove (med->x,med->y) )return EventProcResult::Break;break; + case MouseEventID::Pressed: pressed_statues[med->button]=true; + 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;} - virtual bool OnWheel (int,int){return false;} + if(InputEvent::OnEvent(header,data)==EventProcResult::Break) + return EventProcResult::Break; - virtual bool OnPressed (int,int,MouseButton){return false;} - virtual bool OnReleased (int,int,MouseButton){return false;} - virtual bool OnDblClicked(int,int,MouseButton){return false;} + return EventProcResult::Continue; + } - /** - * 某按键是否按下 - */ - const bool HasPressed(const MouseButton &mb)const - { - if(!RangeCheck(mb))return(false); + virtual bool OnMove (int,int){return false;} + virtual bool OnWheel (int,int){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;} - const int GetY()const{return y;} - };//class MouseEvent - }//namespace io -}//namespace hgl -#endif//HGL_IO_MOUSE_EVENT_INCLUDE + return pressed_statues[size_t(mb)]; + } + + public: + + const Vector2i &GetMouseCoord()const{return position;} + };//class MouseEvent +}//namespace hgl::io