Browse Source

Adding QWidget touch driver

remotes/origin_old/ugfx_release_2.6
Joel Bodenmann 5 years ago
parent
commit
af5fe425a8
  1. 1
      docs/releases.txt
  2. 54
      drivers/ginput/touch/QWidget/example/mywidget.cpp
  3. 18
      drivers/ginput/touch/QWidget/example/mywidget.h
  4. 3
      drivers/ginput/touch/QWidget/example/readme.txt
  5. 74
      drivers/ginput/touch/QWidget/gmouse_lld_QWidget.c
  6. 5
      drivers/ginput/touch/QWidget/readme.txt

1
docs/releases.txt

@ -11,6 +11,7 @@ FEATURE: Added gwinPrintg()
FIX: Fix sprintg and related functions handling of NULL pointers.
FIX: Fixing width calculation of gdispGDrawString() and gdispGFillString().
FEATURE: Added QImage display driver.
FEATURE: Added QWidget touch driver
FEATURE: Added support for Qt as a GOS platform
FEATURE: Add ability to set a parent for a win32 ugfx emulator window
FEATURE: Add ability to inject mouse events for a Win32 ugfx emulator window

54
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);
}

18
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)
};

3
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.

74
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 */

5
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.
Loading…
Cancel
Save