add initial examples, replacing the 'Demos/Demos3'. Will make it work cross-platform, OpenGL3/OpenGL2 and add more examples to it.
This commit is contained in:
111
examples/ThirdPartyLibs/Gwen/events.cpp
Normal file
111
examples/ThirdPartyLibs/Gwen/events.cpp
Normal file
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
GWEN
|
||||
Copyright (c) 2010 Facepunch Studios
|
||||
See license in Gwen.h
|
||||
*/
|
||||
|
||||
|
||||
#include "Gwen/Events.h"
|
||||
|
||||
using namespace Gwen;
|
||||
using namespace Gwen::Event;
|
||||
|
||||
|
||||
Handler::Handler()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Handler::~Handler()
|
||||
{
|
||||
CleanLinks();
|
||||
}
|
||||
|
||||
void Handler::CleanLinks()
|
||||
{
|
||||
// Tell all the callers that we're dead
|
||||
std::list<Caller*>::iterator iter = m_Callers.begin();
|
||||
while ( iter != m_Callers.end() )
|
||||
{
|
||||
Caller* pCaller = *iter;
|
||||
UnRegisterCaller( pCaller );
|
||||
pCaller->RemoveHandler( this );
|
||||
iter = m_Callers.begin();
|
||||
}
|
||||
}
|
||||
|
||||
void Handler::RegisterCaller( Caller* pCaller )
|
||||
{
|
||||
m_Callers.push_back( pCaller );
|
||||
}
|
||||
|
||||
void Handler::UnRegisterCaller( Caller* pCaller )
|
||||
{
|
||||
m_Callers.remove( pCaller );
|
||||
}
|
||||
|
||||
|
||||
Caller::Caller()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Caller::~Caller()
|
||||
{
|
||||
CleanLinks();
|
||||
}
|
||||
|
||||
void Caller::CleanLinks()
|
||||
{
|
||||
std::list<handler>::iterator iter;
|
||||
for (iter = m_Handlers.begin(); iter != m_Handlers.end(); ++iter)
|
||||
{
|
||||
handler& h = *iter;
|
||||
h.pObject->UnRegisterCaller( this );
|
||||
}
|
||||
|
||||
m_Handlers.clear();
|
||||
}
|
||||
|
||||
void Caller::Call( Controls::Base* pThis )
|
||||
{
|
||||
std::list<handler>::iterator iter;
|
||||
for (iter = m_Handlers.begin(); iter != m_Handlers.end(); ++iter)
|
||||
{
|
||||
handler& h = *iter;
|
||||
(h.pObject->*h.fnFunction)( pThis );
|
||||
}
|
||||
}
|
||||
|
||||
void Caller::AddInternal( Event::Handler* pObject, Event::Handler::Function pFunction )
|
||||
{
|
||||
handler h;
|
||||
h.fnFunction = pFunction;
|
||||
h.pObject = pObject;
|
||||
|
||||
m_Handlers.push_back( h );
|
||||
|
||||
pObject->RegisterCaller( this );
|
||||
}
|
||||
|
||||
void Caller::RemoveHandler( Event::Handler* pObject )
|
||||
{
|
||||
pObject->UnRegisterCaller( this );
|
||||
|
||||
std::list<handler>::iterator iter = m_Handlers.begin();
|
||||
|
||||
while ( iter != m_Handlers.end() )
|
||||
{
|
||||
handler& h = *iter;
|
||||
|
||||
if ( h.pObject == pObject )
|
||||
{
|
||||
iter = m_Handlers.erase( iter );
|
||||
}
|
||||
else
|
||||
{
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user