aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/qt_sdl
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2020-05-19 22:57:15 +0200
committerArisotura <thetotalworm@gmail.com>2020-05-19 22:57:15 +0200
commit68a7865096a17b7a10a9dc521c99c7eb042582ec (patch)
tree69d9a5274043435571a686f04300bc61afa72d76 /src/frontend/qt_sdl
parent95f9698077fe50d2567aacd8728ff2625f88f228 (diff)
basic touchscreen support
Diffstat (limited to 'src/frontend/qt_sdl')
-rw-r--r--src/frontend/qt_sdl/main.cpp42
-rw-r--r--src/frontend/qt_sdl/main.h3
2 files changed, 42 insertions, 3 deletions
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index 67ac92c..3b0b35d 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -410,6 +410,8 @@ MainWindowPanel::MainWindowPanel(QWidget* parent) : QWidget(parent)
{
screen[0] = new QImage(256, 192, QImage::Format_RGB32);
screen[1] = new QImage(256, 192, QImage::Format_RGB32);
+
+ touching = false;
}
MainWindowPanel::~MainWindowPanel()
@@ -441,25 +443,59 @@ void MainWindowPanel::paintEvent(QPaintEvent* event)
}
+void MainWindowPanel::transformTSCoords(int& x, int& y)
+{
+ // TODO: actual screen de-transform taking screen layout/rotation/etc into account
+
+ y -= 192;
+
+ // clamp to screen range
+ if (x < 0) x = 0;
+ else if (x > 255) x = 255;
+ if (y < 0) y = 0;
+ else if (y > 191) y = 191;
+}
+
void MainWindowPanel::mousePressEvent(QMouseEvent* event)
{
event->accept();
+ if (event->button() != Qt::LeftButton) return;
+
+ int x = event->pos().x();
+ int y = event->pos().y();
- printf("mouse press %d,%d\n", event->pos().x(), event->pos().y());
+ if (x >= 0 && x < 256 && y >= 192 && y < 384)
+ {
+ touching = true;
+
+ transformTSCoords(x, y);
+ NDS::TouchScreen(x, y);
+ }
}
void MainWindowPanel::mouseReleaseEvent(QMouseEvent* event)
{
event->accept();
+ if (event->button() != Qt::LeftButton) return;
- printf("mouse release %d,%d\n", event->pos().x(), event->pos().y());
+ if (touching)
+ {
+ touching = false;
+ NDS::ReleaseScreen();
+ }
}
void MainWindowPanel::mouseMoveEvent(QMouseEvent* event)
{
event->accept();
+ if (!(event->buttons() & Qt::LeftButton)) return;
+ if (!touching) return;
+
+ int x = event->pos().x();
+ int y = event->pos().y();
- printf("mouse move %d,%d %08X\n", event->pos().x(), event->pos().y(), event->buttons());
+ transformTSCoords(x, y);
+ NDS::TouchScreen(x, y);
}
diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h
index a3125cc..5443780 100644
--- a/src/frontend/qt_sdl/main.h
+++ b/src/frontend/qt_sdl/main.h
@@ -74,6 +74,9 @@ protected:
private:
QImage* screen[2];
+ bool touching;
+
+ void transformTSCoords(int& x, int& y);
};