Refactored the CEvent -> CEventDescriptor code in CInputHandlerManager. Extracted it as a new class CInputHandler, and moved some of it to CInterfaceManager.
--HG-- branch : gui-refactoringhg/feature/sse2
parent
4996705ed7
commit
b7feaa83cb
@ -0,0 +1,36 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef INPUTEVENTLISTENER_H
|
||||
#define INPUTEVENTLISTENER_H
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/gui/event_descriptor.h"
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
/**
|
||||
@brief Interface for accepting GUI input events.
|
||||
*/
|
||||
class IInputEventListener
|
||||
{
|
||||
public:
|
||||
virtual ~IInputEventListener(){}
|
||||
virtual bool handleEvent( const CEventDescriptor &eventDesc ) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
@ -0,0 +1,57 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#ifndef INPUT_HANDLER_H
|
||||
#define INPUT_HANDLER_H
|
||||
|
||||
#include "nel/misc/events.h"
|
||||
#include "nel/gui/event_descriptor.h"
|
||||
#include "nel/gui/input_event_listener.h"
|
||||
|
||||
namespace NLGUI{
|
||||
|
||||
/**
|
||||
@brief The input event entry point of the GUI library.
|
||||
|
||||
Translates the NEL input events and forwards them.
|
||||
*/
|
||||
class CInputHandler
|
||||
{
|
||||
public:
|
||||
CInputHandler();
|
||||
~CInputHandler();
|
||||
|
||||
bool handleEvent( const NLMISC::CEvent &evnt );
|
||||
bool handleSetFocusEvent( const NLMISC::CEvent &evnt );
|
||||
bool handleKeyboardEvent( const NLMISC::CEvent &evnt );
|
||||
bool handleMouseEvent( const NLMISC::CEvent &evnt );
|
||||
bool handleMouseMoveEvent( const NLMISC::CEvent &evnt );
|
||||
bool handleMouseButtonDownEvent( const NLMISC::CEvent &evnt );
|
||||
bool handleMouseButtonUpEvent( const NLMISC::CEvent &evnt );
|
||||
bool handleMouseDblClickEvent( const NLMISC::CEvent &evnt );
|
||||
bool handleMouseWheelEvent( const NLMISC::CEvent &evnt );
|
||||
|
||||
void setListener( IInputEventListener* listener );
|
||||
|
||||
private:
|
||||
IInputEventListener *listener;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -0,0 +1,212 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "nel/gui/input_handler.h"
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
CInputHandler::CInputHandler()
|
||||
{
|
||||
listener = NULL;
|
||||
}
|
||||
|
||||
CInputHandler::~CInputHandler()
|
||||
{
|
||||
listener = NULL;
|
||||
}
|
||||
|
||||
|
||||
bool CInputHandler::handleEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
if( evnt == NLMISC::EventSetFocusId )
|
||||
return handleSetFocusEvent( evnt );
|
||||
else
|
||||
if( evnt == NLMISC::EventKeyDownId ||
|
||||
evnt == NLMISC::EventKeyUpId ||
|
||||
evnt == NLMISC::EventCharId ||
|
||||
evnt == NLMISC::EventStringId )
|
||||
return handleKeyboardEvent( evnt );
|
||||
else
|
||||
if( evnt == NLMISC::EventMouseMoveId ||
|
||||
evnt == NLMISC::EventMouseDownId ||
|
||||
evnt == NLMISC::EventMouseUpId ||
|
||||
evnt == NLMISC::EventMouseWheelId ||
|
||||
evnt == NLMISC::EventMouseDblClkId )
|
||||
return handleMouseEvent( evnt );
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CInputHandler::handleSetFocusEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
nlassert( evnt == NLMISC::EventSetFocusId );
|
||||
const NLMISC::CEventSetFocus *e = reinterpret_cast< const NLMISC::CEventSetFocus* >( &evnt );
|
||||
|
||||
return listener->handleEvent( CEventDescriptorSetFocus( e->Get ) );
|
||||
}
|
||||
|
||||
bool CInputHandler::handleKeyboardEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
bool ok = false;
|
||||
if( evnt == NLMISC::EventKeyDownId ||
|
||||
evnt == NLMISC::EventKeyUpId ||
|
||||
evnt == NLMISC::EventCharId ||
|
||||
evnt == NLMISC::EventStringId )
|
||||
ok = true;
|
||||
|
||||
nlassert( ok );
|
||||
|
||||
return listener->handleEvent( NLGUI::CEventDescriptorKey( reinterpret_cast< const NLMISC::CEventKey& >( evnt ) ) );
|
||||
}
|
||||
|
||||
bool CInputHandler::handleMouseEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
if( evnt == NLMISC::EventMouseMoveId )
|
||||
return handleMouseMoveEvent( evnt );
|
||||
else
|
||||
if( evnt == NLMISC::EventMouseDownId )
|
||||
return handleMouseButtonDownEvent( evnt );
|
||||
else
|
||||
if( evnt == NLMISC::EventMouseUpId )
|
||||
return handleMouseButtonUpEvent( evnt );
|
||||
else
|
||||
if( evnt == NLMISC::EventMouseDblClkId )
|
||||
return handleMouseDblClickEvent( evnt );
|
||||
else
|
||||
if( evnt == NLMISC::EventMouseWheelId )
|
||||
return handleMouseWheelEvent( evnt );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CInputHandler::handleMouseMoveEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
const NLMISC::CEventMouseMove &mouseMoveEvent = static_cast< const NLMISC::CEventMouseMove& >( evnt );
|
||||
|
||||
CEventDescriptorMouse eventDesc;
|
||||
float x = mouseMoveEvent.X;
|
||||
float y = mouseMoveEvent.Y;
|
||||
|
||||
// These bloody hacks here are used so that we can send the x, and y float coordinates
|
||||
// from the NEL mouse move event, to the GUI event listener, without having to change
|
||||
// CEventDescriptorMouse or without having to couple with the consumer class
|
||||
eventDesc.setX( *reinterpret_cast< sint32* >( &x ) );
|
||||
eventDesc.setY( *reinterpret_cast< sint32* >( &y ) );
|
||||
|
||||
eventDesc.setEventTypeExtended( CEventDescriptorMouse::mousemove );
|
||||
|
||||
return listener->handleEvent( eventDesc );
|
||||
}
|
||||
|
||||
bool CInputHandler::handleMouseButtonDownEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
nlassert( evnt == NLMISC::EventMouseDownId );
|
||||
|
||||
CEventDescriptorMouse eventDesc;
|
||||
|
||||
const NLMISC::CEventMouseDown *mouseDownEvent = static_cast< const NLMISC::CEventMouseDown* >( &evnt );
|
||||
|
||||
if( mouseDownEvent->Button & NLMISC::leftButton )
|
||||
{
|
||||
eventDesc.setEventTypeExtended( CEventDescriptorMouse::mouseleftdown );
|
||||
return listener->handleEvent( eventDesc );
|
||||
}
|
||||
|
||||
if(mouseDownEvent->Button & NLMISC::rightButton)
|
||||
{
|
||||
eventDesc.setEventTypeExtended( CEventDescriptorMouse::mouserightdown );
|
||||
return listener->handleEvent( eventDesc );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CInputHandler::handleMouseButtonUpEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
nlassert( evnt == NLMISC::EventMouseUpId );
|
||||
|
||||
CEventDescriptorMouse eventDesc;
|
||||
|
||||
const NLMISC::CEventMouseUp *mouseUpEvent = static_cast< const NLMISC::CEventMouseUp* >( &evnt );
|
||||
|
||||
if( mouseUpEvent->Button & NLMISC::leftButton )
|
||||
{
|
||||
eventDesc.setEventTypeExtended( CEventDescriptorMouse::mouseleftup );
|
||||
return listener->handleEvent( eventDesc );
|
||||
}
|
||||
|
||||
if( mouseUpEvent->Button & NLMISC::rightButton )
|
||||
{
|
||||
eventDesc.setEventTypeExtended( CEventDescriptorMouse::mouserightup );
|
||||
return listener->handleEvent( eventDesc );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CInputHandler::handleMouseDblClickEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
nlassert( evnt == NLMISC::EventMouseDblClkId );
|
||||
|
||||
CEventDescriptorMouse eventDesc;
|
||||
|
||||
const NLMISC::CEventMouseDblClk *dblClickEvent = static_cast< const NLMISC::CEventMouseDblClk* >( &evnt );
|
||||
|
||||
if( dblClickEvent->Button & NLMISC::leftButton )
|
||||
{
|
||||
eventDesc.setEventTypeExtended( CEventDescriptorMouse::mouseleftdblclk );
|
||||
return listener->handleEvent (eventDesc);
|
||||
}
|
||||
|
||||
if( dblClickEvent->Button & NLMISC::rightButton )
|
||||
{
|
||||
eventDesc.setEventTypeExtended(NLGUI::CEventDescriptorMouse::mouserightdblclk);
|
||||
return listener->handleEvent (eventDesc);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CInputHandler::handleMouseWheelEvent( const NLMISC::CEvent &evnt )
|
||||
{
|
||||
nlassert( evnt == NLMISC::EventMouseWheelId );
|
||||
|
||||
CEventDescriptorMouse eventDesc;
|
||||
sint32 mouseWheel = 0;
|
||||
|
||||
const NLMISC::CEventMouseWheel *wheelEvent = static_cast< const NLMISC::CEventMouseWheel* >( &evnt );
|
||||
|
||||
if( wheelEvent->Direction )
|
||||
mouseWheel = 1;
|
||||
else
|
||||
mouseWheel = -1;
|
||||
|
||||
if( mouseWheel != 0 )
|
||||
{
|
||||
eventDesc.setEventTypeExtended( CEventDescriptorMouse::mousewheel );
|
||||
eventDesc.setWheel( mouseWheel );
|
||||
return listener->handleEvent( eventDesc );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CInputHandler::setListener( IInputEventListener *listener )
|
||||
{
|
||||
this->listener = listener;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue