From 036922ba5e90ae7f6f6abe3f99b1783dec5132fc Mon Sep 17 00:00:00 2001 From: Constantin Date: Wed, 17 Jul 2013 22:56:28 +0200 Subject: [PATCH] there are players now :-) every game is better with players --- qt/multypo.cpp | 30 ++++++++++++++---------------- qt/multypo.h | 4 ++-- qt/multypo.pro | 6 ++++-- qt/player.cpp | 28 ++++++++++++++++++++++++++++ qt/player.h | 18 ++++++++++++++++++ 5 files changed, 66 insertions(+), 20 deletions(-) create mode 100644 qt/player.cpp create mode 100644 qt/player.h diff --git a/qt/multypo.cpp b/qt/multypo.cpp index e7a1886..0c5451e 100644 --- a/qt/multypo.cpp +++ b/qt/multypo.cpp @@ -9,13 +9,6 @@ #include #include -static QString colorToString(QColor col) -{ - return QString("#%1%2%3").arg(col.red(), 2, 16, QChar('0')) - .arg(col.green(), 2, 16, QChar('0')) - .arg(col.blue(), 2, 16, QChar('0')); -} - MultypoWindow::MultypoWindow(QWidget *parent) : QWidget(parent), xiInited(false) @@ -42,16 +35,15 @@ void MultypoWindow::handleKeyPress(int device, QString string) { qDebug() << "Device" << device << "String" << string; - if (string == "Escape") + if (string == "Escape") { close(); + return; + } if (!players.contains(device)) { - QLabel *label = new QLabel(this); - layout()->addWidget(label); - players[device] = label; + players[device] = new Player(this); } - QColor textColor = QColor(Qt::blue); - players[device]->setText(players[device]->text() + ""+string+""); + players[device]->handleKey(string); } bool MultypoWindow::handleX11Event(XEvent *event) @@ -66,7 +58,7 @@ bool MultypoWindow::handleX11Event(XEvent *event) } /* Which version of XI2? We support 2.0 */ - int major = 2, minor = 0; + int major = 2, minor = 1; if (XIQueryVersion(dpy, &major, &minor) == BadRequest) { qCritical() << "XI2 not available. Server supports" << major << "." << minor; @@ -90,7 +82,7 @@ bool MultypoWindow::handleX11Event(XEvent *event) for (int i = 0; i < ndevices; ++i) { if (devices[i].use != XIMasterKeyboard) continue; qDebug() << "Found master keyboard with ID" << devices[i].deviceid; - XISetFocus(dpy, devices[i].deviceid, winId(), CurrentTime); + //XISetFocus(dpy, devices[i].deviceid, winId(), CurrentTime); } XIFreeDeviceInfo(devices); @@ -100,7 +92,13 @@ bool MultypoWindow::handleX11Event(XEvent *event) } else if (xiInited && event->type == GenericEvent && event->xcookie.type == GenericEvent && event->xcookie.extension == xiOpcode - && event->xcookie.evtype == XI_KeyPress && XGetEventData(dpy, &event->xcookie)) { + && event->xcookie.evtype == XI_KeyPress) { + + if (XGetEventData(dpy, &event->xcookie) != True) { + qCritical() << "Error getting event data"; + // FIXME return true; + } + /* Handle XI event */ XIDeviceEvent *d_ev = (XIDeviceEvent*) event->xcookie.data; KeyCode keycode = d_ev->detail; diff --git a/qt/multypo.h b/qt/multypo.h index 49b70b1..de0898f 100644 --- a/qt/multypo.h +++ b/qt/multypo.h @@ -4,7 +4,7 @@ #include #include -class QLabel; +#include "player.h" class MultypoWindow : public QWidget { @@ -24,7 +24,7 @@ private: int xiOpcode; QLabel *mainLabel; - QMap players; + QMap players; }; #endif // MULTIKBD_H diff --git a/qt/multypo.pro b/qt/multypo.pro index 58a81a3..8911a5e 100644 --- a/qt/multypo.pro +++ b/qt/multypo.pro @@ -13,8 +13,10 @@ TEMPLATE = app SOURCES += main.cpp\ - multypo.cpp + multypo.cpp \ + player.cpp -HEADERS += multypo.h +HEADERS += multypo.h \ + player.h LIBS += -lX11 -lXi diff --git a/qt/player.cpp b/qt/player.cpp new file mode 100644 index 0000000..4049788 --- /dev/null +++ b/qt/player.cpp @@ -0,0 +1,28 @@ +#include "player.h" + +#include + +static QString colorToString(QColor col) +{ + return QString("#%1%2%3").arg(col.red(), 2, 16, QChar('0')) + .arg(col.green(), 2, 16, QChar('0')) + .arg(col.blue(), 2, 16, QChar('0')); +} + +Player::Player(QWidget* parent) { + theLabel = new QLabel (parent); + parent->layout()->addWidget(theLabel); +} + +void Player::handleKey(QString str) { + if (str.length() == 1) { + currentLine += str; + } else if (name.isNull() && str == "Return") { + // set name + name = currentLine; + currentLine = ""; + } else if (str == "BackSpace") { + currentLine.chop(1); + } + theLabel->setText(currentLine); +} diff --git a/qt/player.h b/qt/player.h new file mode 100644 index 0000000..f725069 --- /dev/null +++ b/qt/player.h @@ -0,0 +1,18 @@ +#ifndef PLAYER_H +#define PLAYER_H + +#include +#include + +class Player +{ +private: + QString name; + QString currentLine; + QLabel* theLabel; +public: + Player(QWidget* parent); + void handleKey(QString); +}; + +#endif // PLAYER_H -- 2.30.2