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