diff options
| author | Tarek Soliman | 2012-03-01 06:29:44 -0600 | 
|---|---|---|
| committer | Tarek Soliman | 2012-03-02 20:48:50 -0600 | 
| commit | c0a215282d12872cf32fb24f9067216c0f869b96 (patch) | |
| tree | f55b1c3591ebc7c094b78c32f3d714d45e942da7 /common/EventMapper.cpp | |
| parent | d12f21b31db2985faeb2e2a6b9b09cd210f82c34 (diff) | |
| download | scummvm-rg350-c0a215282d12872cf32fb24f9067216c0f869b96.tar.gz scummvm-rg350-c0a215282d12872cf32fb24f9067216c0f869b96.tar.bz2 scummvm-rg350-c0a215282d12872cf32fb24f9067216c0f869b96.zip | |
KEYMAPPER: Add delays for *UP events coming from non-keys
Delayed entries are in a queue where each entry stores how
many milliseconds should pass based on the last entry.
Diffstat (limited to 'common/EventMapper.cpp')
| -rw-r--r-- | common/EventMapper.cpp | 28 | 
1 files changed, 28 insertions, 0 deletions
| diff --git a/common/EventMapper.cpp b/common/EventMapper.cpp index 0771ecdd89..47db61e472 100644 --- a/common/EventMapper.cpp +++ b/common/EventMapper.cpp @@ -21,6 +21,8 @@   */  #include "common/events.h" + +#include "common/system.h"  #include "common/textconsole.h"  namespace Common { @@ -61,4 +63,30 @@ List<Event> DefaultEventMapper::mapEvent(const Event &ev, EventSource *source) {  } +void DefaultEventMapper::addDelayedEvent(uint32 millis, Event ev) { +	if (_delayedEvents.empty()) { +		_delayedEffectiveTime = g_system->getMillis() + millis; +		millis = 0; +	} +	DelayedEventsEntry entry = DelayedEventsEntry(millis, ev); +	_delayedEvents.push(entry); +} + +List<Event> DefaultEventMapper::getDelayedEvents() { +	List<Event> events; + +	if (_delayedEvents.empty()) +		return events; + +	uint32 now = g_system->getMillis(); + +	while (!_delayedEvents.empty() && now >= _delayedEffectiveTime) { +		DelayedEventsEntry entry = _delayedEvents.pop(); +		if (!_delayedEvents.empty()) +			_delayedEffectiveTime += _delayedEvents.front().timerOffset; +		events.push_back(entry.event); +	} +	return events; +} +  } // namespace Common | 
