blob: 9b69a3a01b6c9039ea1648e7acf7d8c581fa3721 (
plain) (
tree)
|
|
/*
* inputEvent.cpp
*
* Created on: 06.09.2010
* Author: brs
*/
#include <QBuffer>
#include <QByteArray>
#include <QDataStream>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QString>
#include "inputEvent.h"
#include <src/util/consoleLogger.h>
// We implement operators to serialize and load an event:
QDataStream& operator <<(QDataStream& ostrm, InputEvent const& evt)
{
ostrm << evt.type_ << evt.code_ << evt.value_;
return ostrm;
}
QDataStream& operator >>(QDataStream& istrm, InputEvent& evt)
{
istrm >> evt.type_ >> evt.code_ >> evt.value_;
return istrm;
}
void eventToString(InputEvent const& evt, QString& str)
{
QByteArray ba;
QBuffer buf(&ba);
buf.open(QIODevice::WriteOnly);
QDataStream out(&buf);
out << evt;
str = QString::fromAscii(ba.toBase64());
}
bool eventFromString(QString const& str, InputEvent& evt)
{
// TODO This does not do proper error checking. Only use from trusted sources!
QByteArray ba = QByteArray::fromBase64(str.toAscii());
QBuffer buf(&ba);
buf.open(QIODevice::ReadOnly);
QDataStream in(&buf);
in >> evt;
return true;
}
quint16 InputEvent::mouseButtonsFromQt(int b)
{
quint16 ret = 0;
if(b & Qt::LeftButton)
{
ret |= EB_LEFT;
}
if(b & Qt::RightButton)
{
ret |= EB_RIGHT;
}
if(b & Qt::MidButton)
{
ret |= EB_MIDDLE;
}
return ret;
}
InputEvent InputEvent::mousePressRelease(int qt_button, int qt_buttons)
{
quint16 button = mouseButtonsFromQt(qt_button);
quint16 buttons = mouseButtonsFromQt(qt_buttons);
quint16 code;
if(buttons & button)
{
code = EC_PRESS;
}
else
{
code = EC_RELEASE;
}
quint32 value = ((quint32)button << 16) | buttons;
return InputEvent(ET_BUTTON, code, value);
}
InputEvent InputEvent::keyboardPress(int key, int mods)
{
quint32 value = key | mods;
return InputEvent(ET_KEY, EC_PRESS, value);
}
InputEvent InputEvent::keyboardRelease(int key, int mods)
{
quint32 value = key | mods;
return InputEvent(ET_KEY, EC_RELEASE, value);
}
|