Refactored input event handling a bit.

This commit is contained in:
dfighter1985 2014-04-20 21:41:57 +02:00
parent 113b4c990e
commit d365189cd7
2 changed files with 462 additions and 434 deletions

View file

@ -333,6 +333,12 @@ namespace NLGUI
bool handleEvent( const CEventDescriptor &evnt ); bool handleEvent( const CEventDescriptor &evnt );
bool handleSystemEvent( const CEventDescriptor &evnt );
bool handleKeyboardEvent( const CEventDescriptor &evnt );
bool handleMouseEvent( const CEventDescriptor &evnt );
bool handleMouseMoveEvent( const CEventDescriptor &eventDesc ); bool handleMouseMoveEvent( const CEventDescriptor &eventDesc );
// Relative move of pointer // Relative move of pointer

View file

@ -2096,7 +2096,30 @@ namespace NLGUI
if( activeAnims[i]->isDisableButtons() ) if( activeAnims[i]->isDisableButtons() )
return false; return false;
bool handled = false;
CViewPointer *_Pointer = static_cast< CViewPointer* >( getPointer() );
if( evnt.getType() == CEventDescriptor::system ) if( evnt.getType() == CEventDescriptor::system )
{
handleSystemEvent( evnt );
}
else
if (evnt.getType() == CEventDescriptor::key)
{
handled = handleKeyboardEvent( evnt );
}
else if (evnt.getType() == CEventDescriptor::mouse )
{
handled = handleMouseEvent( evnt );
}
CDBManager::getInstance()->flushObserverCalls();
return handled;
}
bool CWidgetManager::handleSystemEvent( const CEventDescriptor &evnt )
{ {
const CEventDescriptorSystem &systemEvent = reinterpret_cast< const CEventDescriptorSystem& >( evnt ); const CEventDescriptorSystem &systemEvent = reinterpret_cast< const CEventDescriptorSystem& >( evnt );
if( systemEvent.getEventTypeExtended() == CEventDescriptorSystem::setfocus ) if( systemEvent.getEventTypeExtended() == CEventDescriptorSystem::setfocus )
@ -2119,22 +2142,23 @@ namespace NLGUI
_CapturedView = NULL; _CapturedView = NULL;
} }
} }
return true;
} }
bool CWidgetManager::handleKeyboardEvent( const CEventDescriptor &evnt )
{
bool handled = false; bool handled = false;
CViewPointer *_Pointer = static_cast< CViewPointer* >( getPointer() );
if (evnt.getType() == CEventDescriptor::key)
{
CEventDescriptorKey &eventDesc = (CEventDescriptorKey&)evnt; CEventDescriptorKey &eventDesc = (CEventDescriptorKey&)evnt;
//_LastEventKeyDesc = eventDesc; //_LastEventKeyDesc = eventDesc;
// Any Key event disable the ContextHelp // Any Key event disable the ContextHelp
disableContextHelp(); disableContextHelp();
// Hide menu if the key is pushed // Hide menu if the key is pushed
// if ((eventDesc.getKeyEventType() == CEventDescriptorKey::keydown) && !_ModalStack.empty() && !eventDesc.getKeyAlt() && !eventDesc.getKeyCtrl() && !eventDesc.getKeyShift()) // if ((eventDesc.getKeyEventType() == CEventDescriptorKey::keydown) && !_ModalStack.empty() && !eventDesc.getKeyAlt() && !eventDesc.getKeyCtrl() && !eventDesc.getKeyShift())
// Hide menu (or popup menu) is ESCAPE pressed // Hide menu (or popup menu) is ESCAPE pressed
if( eventDesc.getKeyEventType() == CEventDescriptorKey::keychar && eventDesc.getChar() == NLMISC::KeyESCAPE ) if( eventDesc.getKeyEventType() == CEventDescriptorKey::keychar && eventDesc.getChar() == NLMISC::KeyESCAPE )
{ {
@ -2246,12 +2270,14 @@ namespace NLGUI
} }
lastKeyEvent = eventDesc; lastKeyEvent = eventDesc;
return handled;
} }
//////////////////////////////////////////////// Keyboard handling ends here //////////////////////////////////// bool CWidgetManager::handleMouseEvent( const CEventDescriptor &evnt )
else if (evnt.getType() == CEventDescriptor::mouse )
{ {
bool handled = false;
CEventDescriptorMouse &eventDesc = (CEventDescriptorMouse&)evnt; CEventDescriptorMouse &eventDesc = (CEventDescriptorMouse&)evnt;
if( eventDesc.getEventTypeExtended() == CEventDescriptorMouse::mouseleftdown ) if( eventDesc.getEventTypeExtended() == CEventDescriptorMouse::mouseleftdown )
@ -2538,14 +2564,10 @@ namespace NLGUI
// If the mouse is over a window, always consider the event is taken (avoid click behind) // If the mouse is over a window, always consider the event is taken (avoid click behind)
handled|= isMouseOverWindow(); handled|= isMouseOverWindow();
} }
}
CDBManager::getInstance()->flushObserverCalls();
return handled; return handled;
} }
bool CWidgetManager::handleMouseMoveEvent( const CEventDescriptor &eventDesc ) bool CWidgetManager::handleMouseMoveEvent( const CEventDescriptor &eventDesc )
{ {
if( getPointer() == NULL ) if( getPointer() == NULL )