2005-11-18 12:43:37 +03:00
|
|
|
/*
|
|
|
|
* Copyright 2005, Haiku, Inc. All Rights Reserved.
|
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*
|
|
|
|
* Authors:
|
|
|
|
* Axel Dörfler, axeld@pinc-software.de
|
|
|
|
*/
|
|
|
|
|
|
|
|
// TODO: introduce means to define event stream features (like local vs. net)
|
|
|
|
// TODO: introduce the possibility to identify a stream by a unique name
|
|
|
|
|
|
|
|
|
|
|
|
#include "EventStream.h"
|
|
|
|
#include "InputManager.h"
|
|
|
|
|
|
|
|
#include <Autolock.h>
|
|
|
|
|
|
|
|
|
|
|
|
InputManager* gInputManager;
|
|
|
|
// the global input manager will be created by the AppServer
|
|
|
|
|
|
|
|
|
|
|
|
InputManager::InputManager()
|
|
|
|
: BLocker("input manager"),
|
|
|
|
fFreeStreams(2, true),
|
|
|
|
fUsedStreams(2, true)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
InputManager::~InputManager()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
InputManager::AddStream(EventStream* stream)
|
|
|
|
{
|
|
|
|
BAutolock _(this);
|
|
|
|
return fFreeStreams.AddItem(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
InputManager::RemoveStream(EventStream* stream)
|
|
|
|
{
|
|
|
|
BAutolock _(this);
|
|
|
|
fFreeStreams.RemoveItem(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EventStream*
|
|
|
|
InputManager::GetStream()
|
|
|
|
{
|
|
|
|
BAutolock _(this);
|
|
|
|
|
|
|
|
EventStream* stream = NULL;
|
|
|
|
do {
|
|
|
|
delete stream;
|
|
|
|
// this deletes the previous invalid stream
|
|
|
|
|
|
|
|
stream = fFreeStreams.RemoveItemAt(0);
|
|
|
|
} while (stream != NULL && !stream->IsValid());
|
|
|
|
|
|
|
|
if (stream == NULL)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
fUsedStreams.AddItem(stream);
|
|
|
|
return stream;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
InputManager::PutStream(EventStream* stream)
|
|
|
|
{
|
|
|
|
if (stream == NULL)
|
|
|
|
return;
|
|
|
|
|
|
|
|
BAutolock _(this);
|
|
|
|
|
|
|
|
fUsedStreams.RemoveItem(stream, false);
|
|
|
|
if (stream->IsValid())
|
|
|
|
fFreeStreams.AddItem(stream);
|
|
|
|
else
|
|
|
|
delete stream;
|
|
|
|
}
|
|
|
|
|
2005-11-26 19:22:06 +03:00
|
|
|
|
|
|
|
void
|
|
|
|
InputManager::UpdateScreenBounds(BRect bounds)
|
|
|
|
{
|
|
|
|
BAutolock _(this);
|
|
|
|
|
|
|
|
for (int32 i = fUsedStreams.CountItems(); i-- > 0;) {
|
|
|
|
fUsedStreams.ItemAt(i)->UpdateScreenBounds(bounds);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int32 i = fFreeStreams.CountItems(); i-- > 0;) {
|
|
|
|
fFreeStreams.ItemAt(i)->UpdateScreenBounds(bounds);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|