fixed order of run event

This commit is contained in:
hyzboy 2022-01-24 19:29:19 +08:00
parent b6f37bef87
commit 6280ace5a5
3 changed files with 33 additions and 16 deletions

View File

@ -47,14 +47,14 @@ namespace hgl
for(InputEvent *ie:sub_event_proc[header.type]) for(InputEvent *ie:sub_event_proc[header.type])
if(ie->OnEvent(header,data)==EventProcResult::Break) if(ie->OnEvent(header,data)==EventProcResult::Break)
return EventProcResult::Break; return EventProcResult::Break;
}
if(sub_event_proc[size_t(InputEventSource::Root)].GetCount()>0 if(sub_event_proc[size_t(InputEventSource::Root)].GetCount()>0
&&InputEventSource(header.type)!=InputEventSource::Root) &&InputEventSource(header.type)!=InputEventSource::Root)
{ {
for(InputEvent *ie:sub_event_proc[size_t(InputEventSource::Root)]) for(InputEvent *ie:sub_event_proc[size_t(InputEventSource::Root)])
if(ie->OnEvent(header,data)==EventProcResult::Break) if(ie->OnEvent(header,data)==EventProcResult::Break)
return EventProcResult::Break; return EventProcResult::Break;
}
} }
return(EventProcResult::Continue); return(EventProcResult::Continue);

View File

@ -180,9 +180,9 @@ namespace hgl
return EventProcResult::Continue; return EventProcResult::Continue;
} }
virtual bool OnPressed(const KeyboardButton &kb){} virtual bool OnPressed(const KeyboardButton &kb){return(false);}
virtual bool OnReleased(const KeyboardButton &kb){} virtual bool OnReleased(const KeyboardButton &kb){return(false);}
virtual bool OnChar(const wchar_t &){} virtual bool OnChar(const wchar_t &){return(false);}
};//class KeyboardEvent };//class KeyboardEvent
class KeyboardStateEvent:public KeyboardEvent class KeyboardStateEvent:public KeyboardEvent

View File

@ -1,4 +1,4 @@
#ifndef HGL_IO_MOUSE_EVENT_INCLUDE #ifndef HGL_IO_MOUSE_EVENT_INCLUDE
#define HGL_IO_MOUSE_EVENT_INCLUDE #define HGL_IO_MOUSE_EVENT_INCLUDE
#include<hgl/io/event/InputEvent.h> #include<hgl/io/event/InputEvent.h>
@ -7,7 +7,7 @@ namespace hgl
namespace io namespace io
{ {
/** /**
* *
*/ */
enum class MouseButton enum class MouseButton
{ {
@ -19,7 +19,7 @@ namespace hgl
X1,X2, X1,X2,
ENUM_CLASS_RANGE(Left,X2) ENUM_CLASS_RANGE(None,X2)
}; };
enum class MouseEventID enum class MouseEventID
@ -50,9 +50,14 @@ namespace hgl
int x,y; int x,y;
bool pressed_statues[size_t(MouseButton::RANGE_SIZE)];
public: public:
MouseEvent():InputEvent(InputEventSource::Mouse){} MouseEvent():InputEvent(InputEventSource::Mouse)
{
hgl_zero(pressed_statues);
}
virtual ~MouseEvent()=default; virtual ~MouseEvent()=default;
EventProcResult OnEvent(const EventHeader &header,const uint64 data) override EventProcResult OnEvent(const EventHeader &header,const uint64 data) override
@ -73,8 +78,10 @@ namespace hgl
switch(MouseEventID(header.id)) switch(MouseEventID(header.id))
{ {
case MouseEventID::Move: if(OnMove (med->x,med->y) )return EventProcResult::Break;break; 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::Pressed: pressed_statues[med->button]=true;
case MouseEventID::Released: if(OnReleased (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; 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 OnReleased (int,int,MouseButton){return false;}
virtual bool OnDblClicked(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: public:
const int GetX()const{return x;} const int GetX()const{return x;}