aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ginput
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@embedded.pro>2016-07-26 12:50:32 +0200
committerJoel Bodenmann <joel@embedded.pro>2016-07-26 12:50:32 +0200
commitaf5fe425a8c6a1f9620c0c877ba8accc066298c1 (patch)
tree8a6656373bfd556ac763b3d08a591b5031deb040 /drivers/ginput
parente67e314df4e342323c2f2bb03fd2f79540990ded (diff)
downloaduGFX-af5fe425a8c6a1f9620c0c877ba8accc066298c1.tar.gz
uGFX-af5fe425a8c6a1f9620c0c877ba8accc066298c1.tar.bz2
uGFX-af5fe425a8c6a1f9620c0c877ba8accc066298c1.zip
Adding QWidget touch driver
Diffstat (limited to 'drivers/ginput')
-rw-r--r--drivers/ginput/touch/QWidget/example/mywidget.cpp54
-rw-r--r--drivers/ginput/touch/QWidget/example/mywidget.h18
-rw-r--r--drivers/ginput/touch/QWidget/example/readme.txt3
-rw-r--r--drivers/ginput/touch/QWidget/gmouse_lld_QWidget.c74
-rw-r--r--drivers/ginput/touch/QWidget/readme.txt5
5 files changed, 154 insertions, 0 deletions
diff --git a/drivers/ginput/touch/QWidget/example/mywidget.cpp b/drivers/ginput/touch/QWidget/example/mywidget.cpp
new file mode 100644
index 00000000..b14713b1
--- /dev/null
+++ b/drivers/ginput/touch/QWidget/example/mywidget.cpp
@@ -0,0 +1,54 @@
+#include "mywidget.h"
+#include "ugfx/src/ginput/ginput_driver_mouse.h"
+
+extern GMouse* qwidgetMouse;
+extern coord_t qwidgetMouseX;
+extern coord_t qwidgetMouseY;
+extern coord_t qwidgetMouseZ;
+extern uint16_t qwidgetMouseButtons;
+
+MyWidget::MyWidget(QWidget* parent) : QWidget(parent)
+{
+ // GMouse
+ if (!qwidgetMouse) {
+ qFatal("MyWidget::MyWidget(): Invalid GMouse (nullptr).");
+ }
+ qwidgetMouse->display = nullptr; // Set your display here!
+}
+
+void MyWidget::mousePressEvent(QMouseEvent* event)
+{
+ event->accept();
+
+ qwidgetMouseX = event->x();
+ qwidgetMouseY = event->y();
+ qwidgetMouseZ = 1;
+
+ if (event->buttons() & Qt::LeftButton) {
+ qwidgetMouseButtons = GINPUT_MOUSE_BTN_LEFT;
+ } else if (event->buttons() & Qt::RightButton) {
+ qwidgetMouseButtons = GINPUT_MOUSE_BTN_RIGHT;
+ }
+
+ _gmouseWakeup(qwidgetMouse);
+}
+
+void MyWidget::mouseReleaseEvent(QMouseEvent* event)
+{
+ event->accept();
+
+ qwidgetMouseZ = 0;
+ qwidgetMouseButtons = 0;
+
+ _gmouseWakeup(qwidgetMouse);
+}
+
+void MyWidget::mouseMoveEvent(QMouseEvent* event)
+{
+ event->accept();
+
+ qwidgetMouseX = event->x();
+ qwidgetMouseY = event->y();
+
+ _gmouseWakeup(qwidgetMouse);
+}
diff --git a/drivers/ginput/touch/QWidget/example/mywidget.h b/drivers/ginput/touch/QWidget/example/mywidget.h
new file mode 100644
index 00000000..f3e329d3
--- /dev/null
+++ b/drivers/ginput/touch/QWidget/example/mywidget.h
@@ -0,0 +1,18 @@
+#pragma once
+
+class MyWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ MyWidget(QWidget* parent = nullptr);
+ virtual ~MyWidget() = default;
+
+protected:
+ virtual void mousePressEvent(QMouseEvent* event) override;
+ virtual void mouseReleaseEvent(QMouseEvent* event) override;
+ virtual void mouseMoveEvent(QMouseEvent* event) override;
+
+private:
+ Q_DISABLE_COPY(MyWidget)
+};
diff --git a/drivers/ginput/touch/QWidget/example/readme.txt b/drivers/ginput/touch/QWidget/example/readme.txt
new file mode 100644
index 00000000..df127019
--- /dev/null
+++ b/drivers/ginput/touch/QWidget/example/readme.txt
@@ -0,0 +1,3 @@
+This example shows how a QWidget can be used as touch input.
+
+Important note: The GDisplay pointer must be set to a valid display in mywidget.cpp:16 for this to work.
diff --git a/drivers/ginput/touch/QWidget/gmouse_lld_QWidget.c b/drivers/ginput/touch/QWidget/gmouse_lld_QWidget.c
new file mode 100644
index 00000000..d79da2a2
--- /dev/null
+++ b/drivers/ginput/touch/QWidget/gmouse_lld_QWidget.c
@@ -0,0 +1,74 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ * http://ugfx.org/license.html
+ */
+
+#include "ugfx/gfx.h"
+
+
+#if GFX_USE_GINPUT && GINPUT_NEED_MOUSE
+
+#define GMOUSE_DRIVER_VMT GMOUSEVMT_QWidget
+#include "../../../../src/ginput/ginput_driver_mouse.h"
+
+GMouse* qwidgetMouse;
+coord_t qwidgetMouseX;
+coord_t qwidgetMouseY;
+coord_t qwidgetMouseZ;
+uint16_t qwidgetMouseButtons;
+
+static bool_t _init(GMouse* m, unsigned driverinstance)
+{
+ (void)driverinstance;
+
+ qwidgetMouse = m;
+
+ return TRUE;
+}
+
+static bool_t _read(GMouse* m, GMouseReading* pdr)
+{
+ (void)m;
+
+ pdr->x = qwidgetMouseX;
+ pdr->y = qwidgetMouseY;
+ pdr->z = qwidgetMouseZ;
+ pdr->buttons = qwidgetMouseButtons;
+
+ return TRUE;
+}
+
+const GMouseVMT GMOUSE_DRIVER_VMT[1] = {{
+ {
+ GDRIVER_TYPE_MOUSE,
+ 0,
+ sizeof(GMouse),
+ _gmouseInitDriver,
+ _gmousePostInitDriver,
+ _gmouseDeInitDriver
+ },
+ 1, // z_max
+ 0, // z_min
+ 1, // z_touchon
+ 0, // z_touchoff
+ { // pen_jitter
+ 1, // calibrate
+ 1, // click
+ 1 // move
+ },
+ { // finger_jitter
+ 1, // calibrate
+ 1, // click
+ 1 // move
+ },
+ _init, // init
+ 0, // deinit
+ _read, // get
+ 0, // calsave
+ 0 // calload
+}};
+
+#endif /* GFX_USE_GINPUT && GINPUT_NEED_MOUSE */
+
diff --git a/drivers/ginput/touch/QWidget/readme.txt b/drivers/ginput/touch/QWidget/readme.txt
new file mode 100644
index 00000000..cd2cca8d
--- /dev/null
+++ b/drivers/ginput/touch/QWidget/readme.txt
@@ -0,0 +1,5 @@
+Limitation: As this driver only exports one set of variables, this driver can only be used
+ on systems with one single touch input device of this type. To overcome this
+ limitation, the global variables have to be converted into arrays. The driverinstance
+ variable passed to the _read() function is then used to distinguish between the
+ different instances.