diff --git a/inc/hgl/io/event/InputEvent.h b/inc/hgl/io/event/InputEvent.h index 378667d..8e37b0f 100644 --- a/inc/hgl/io/event/InputEvent.h +++ b/inc/hgl/io/event/InputEvent.h @@ -47,14 +47,14 @@ namespace hgl for(InputEvent *ie:sub_event_proc[header.type]) if(ie->OnEvent(header,data)==EventProcResult::Break) return EventProcResult::Break; + } - if(sub_event_proc[size_t(InputEventSource::Root)].GetCount()>0 - &&InputEventSource(header.type)!=InputEventSource::Root) - { - for(InputEvent *ie:sub_event_proc[size_t(InputEventSource::Root)]) - if(ie->OnEvent(header,data)==EventProcResult::Break) - return EventProcResult::Break; - } + if(sub_event_proc[size_t(InputEventSource::Root)].GetCount()>0 + &&InputEventSource(header.type)!=InputEventSource::Root) + { + for(InputEvent *ie:sub_event_proc[size_t(InputEventSource::Root)]) + if(ie->OnEvent(header,data)==EventProcResult::Break) + return EventProcResult::Break; } return(EventProcResult::Continue); diff --git a/inc/hgl/io/event/KeyboardEvent.h b/inc/hgl/io/event/KeyboardEvent.h index fb0f8e8..bcd3a46 100644 --- a/inc/hgl/io/event/KeyboardEvent.h +++ b/inc/hgl/io/event/KeyboardEvent.h @@ -180,9 +180,9 @@ namespace hgl return EventProcResult::Continue; } - virtual bool OnPressed(const KeyboardButton &kb){} - virtual bool OnReleased(const KeyboardButton &kb){} - virtual bool OnChar(const wchar_t &){} + virtual bool OnPressed(const KeyboardButton &kb){return(false);} + virtual bool OnReleased(const KeyboardButton &kb){return(false);} + virtual bool OnChar(const wchar_t &){return(false);} };//class KeyboardEvent class KeyboardStateEvent:public KeyboardEvent diff --git a/inc/hgl/io/event/MouseEvent.h b/inc/hgl/io/event/MouseEvent.h index 469f086..8cd00c6 100644 --- a/inc/hgl/io/event/MouseEvent.h +++ b/inc/hgl/io/event/MouseEvent.h @@ -1,4 +1,4 @@ -#ifndef HGL_IO_MOUSE_EVENT_INCLUDE +#ifndef HGL_IO_MOUSE_EVENT_INCLUDE #define HGL_IO_MOUSE_EVENT_INCLUDE #include @@ -7,7 +7,7 @@ namespace hgl namespace io { /** - * 갴ťö + * 鼠标按钮枚举 */ enum class MouseButton { @@ -19,7 +19,7 @@ namespace hgl X1,X2, - ENUM_CLASS_RANGE(Left,X2) + ENUM_CLASS_RANGE(None,X2) }; enum class MouseEventID @@ -50,9 +50,14 @@ namespace hgl int x,y; + bool pressed_statues[size_t(MouseButton::RANGE_SIZE)]; + public: - MouseEvent():InputEvent(InputEventSource::Mouse){} + MouseEvent():InputEvent(InputEventSource::Mouse) + { + hgl_zero(pressed_statues); + } virtual ~MouseEvent()=default; EventProcResult OnEvent(const EventHeader &header,const uint64 data) override @@ -73,8 +78,10 @@ namespace hgl switch(MouseEventID(header.id)) { case MouseEventID::Move: if(OnMove (med->x,med->y) )return EventProcResult::Break;break; - case MouseEventID::Pressed: if(OnPressed (med->x,med->y,MouseButton(med->button)))return EventProcResult::Break;break; - case MouseEventID::Released: if(OnReleased (med->x,med->y,MouseButton(med->button)))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; } } @@ -89,6 +96,16 @@ namespace hgl virtual bool OnReleased (int,int,MouseButton){return false;} virtual bool OnDblClicked(int,int,MouseButton){return false;} + /** + * 某按键是否按下 + */ + const bool HasPressed(const MouseButton &mb)const + { + if(!RangeCheck(mb))return(false); + + return pressed_statues[size_t(mb)]; + } + public: const int GetX()const{return x;}