Adding QWidget touch driver
This commit is contained in:
parent
e67e314df4
commit
af5fe425a8
@ -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
Normal file
54
drivers/ginput/touch/QWidget/example/mywidget.cpp
Normal file
@ -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
Normal file
18
drivers/ginput/touch/QWidget/example/mywidget.h
Normal file
@ -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
Normal file
3
drivers/ginput/touch/QWidget/example/readme.txt
Normal file
@ -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
Normal file
74
drivers/ginput/touch/QWidget/gmouse_lld_QWidget.c
Normal file
@ -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
Normal file
5
drivers/ginput/touch/QWidget/readme.txt
Normal file
@ -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…
Reference in New Issue
Block a user