|
|
@ -401,12 +401,6 @@ qreal GRenderWindow::windowPixelRatio() const { |
|
|
return devicePixelRatioF(); |
|
|
return devicePixelRatioF(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
std::pair<u32, u32> GRenderWindow::ScaleTouch(const QPointF& pos) const { |
|
|
|
|
|
const qreal pixel_ratio = windowPixelRatio(); |
|
|
|
|
|
return {static_cast<u32>(std::max(std::round(pos.x() * pixel_ratio), qreal{0.0})), |
|
|
|
|
|
static_cast<u32>(std::max(std::round(pos.y() * pixel_ratio), qreal{0.0}))}; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void GRenderWindow::closeEvent(QCloseEvent* event) { |
|
|
void GRenderWindow::closeEvent(QCloseEvent* event) { |
|
|
emit Closed(); |
|
|
emit Closed(); |
|
|
QWidget::closeEvent(event); |
|
|
QWidget::closeEvent(event); |
|
|
@ -649,10 +643,9 @@ void GRenderWindow::mousePressEvent(QMouseEvent* event) { |
|
|
// Qt sometimes returns the parent coordinates. To avoid this we read the global mouse
|
|
|
// Qt sometimes returns the parent coordinates. To avoid this we read the global mouse
|
|
|
// coordinates and map them to the current render area
|
|
|
// coordinates and map them to the current render area
|
|
|
const auto pos = mapFromGlobal(QCursor::pos()); |
|
|
const auto pos = mapFromGlobal(QCursor::pos()); |
|
|
const auto [x, y] = ScaleTouch(pos); |
|
|
|
|
|
const auto [touch_x, touch_y] = MapToTouchScreen(x, y); |
|
|
|
|
|
|
|
|
const auto [touch_x, touch_y] = MapToTouchScreen(pos.x(), pos.y()); |
|
|
const auto button = QtButtonToMouseButton(event->button()); |
|
|
const auto button = QtButtonToMouseButton(event->button()); |
|
|
input_subsystem->GetMouse()->PressButton(x, y, touch_x, touch_y, button); |
|
|
|
|
|
|
|
|
input_subsystem->GetMouse()->PressButton(pos.x(), pos.y(), touch_x, touch_y, button); |
|
|
|
|
|
|
|
|
emit MouseActivity(); |
|
|
emit MouseActivity(); |
|
|
} |
|
|
} |
|
|
@ -665,11 +658,10 @@ void GRenderWindow::mouseMoveEvent(QMouseEvent* event) { |
|
|
// Qt sometimes returns the parent coordinates. To avoid this we read the global mouse
|
|
|
// Qt sometimes returns the parent coordinates. To avoid this we read the global mouse
|
|
|
// coordinates and map them to the current render area
|
|
|
// coordinates and map them to the current render area
|
|
|
const auto pos = mapFromGlobal(QCursor::pos()); |
|
|
const auto pos = mapFromGlobal(QCursor::pos()); |
|
|
const auto [x, y] = ScaleTouch(pos); |
|
|
|
|
|
const auto [touch_x, touch_y] = MapToTouchScreen(x, y); |
|
|
|
|
|
|
|
|
const auto [touch_x, touch_y] = MapToTouchScreen(pos.x(), pos.y()); |
|
|
const int center_x = width() / 2; |
|
|
const int center_x = width() / 2; |
|
|
const int center_y = height() / 2; |
|
|
const int center_y = height() / 2; |
|
|
input_subsystem->GetMouse()->MouseMove(x, y, touch_x, touch_y, center_x, center_y); |
|
|
|
|
|
|
|
|
input_subsystem->GetMouse()->MouseMove(pos.x(), pos.y(), touch_x, touch_y, center_x, center_y); |
|
|
|
|
|
|
|
|
if (Settings::values.mouse_panning && !Settings::values.mouse_enabled) { |
|
|
if (Settings::values.mouse_panning && !Settings::values.mouse_enabled) { |
|
|
QCursor::setPos(mapToGlobal(QPoint{center_x, center_y})); |
|
|
QCursor::setPos(mapToGlobal(QPoint{center_x, center_y})); |
|
|
@ -697,8 +689,8 @@ void GRenderWindow::wheelEvent(QWheelEvent* event) { |
|
|
void GRenderWindow::TouchBeginEvent(const QTouchEvent* event) { |
|
|
void GRenderWindow::TouchBeginEvent(const QTouchEvent* event) { |
|
|
QList<QTouchEvent::TouchPoint> touch_points = event->touchPoints(); |
|
|
QList<QTouchEvent::TouchPoint> touch_points = event->touchPoints(); |
|
|
for (const auto& touch_point : touch_points) { |
|
|
for (const auto& touch_point : touch_points) { |
|
|
const auto [x, y] = ScaleTouch(touch_point.pos()); |
|
|
|
|
|
const auto [touch_x, touch_y] = MapToTouchScreen(x, y); |
|
|
|
|
|
|
|
|
const auto pos = touch_point.pos(); |
|
|
|
|
|
const auto [touch_x, touch_y] = MapToTouchScreen(pos.x(), pos.y()); |
|
|
input_subsystem->GetTouchScreen()->TouchPressed(touch_x, touch_y, touch_point.id()); |
|
|
input_subsystem->GetTouchScreen()->TouchPressed(touch_x, touch_y, touch_point.id()); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -707,8 +699,8 @@ void GRenderWindow::TouchUpdateEvent(const QTouchEvent* event) { |
|
|
QList<QTouchEvent::TouchPoint> touch_points = event->touchPoints(); |
|
|
QList<QTouchEvent::TouchPoint> touch_points = event->touchPoints(); |
|
|
input_subsystem->GetTouchScreen()->ClearActiveFlag(); |
|
|
input_subsystem->GetTouchScreen()->ClearActiveFlag(); |
|
|
for (const auto& touch_point : touch_points) { |
|
|
for (const auto& touch_point : touch_points) { |
|
|
const auto [x, y] = ScaleTouch(touch_point.pos()); |
|
|
|
|
|
const auto [touch_x, touch_y] = MapToTouchScreen(x, y); |
|
|
|
|
|
|
|
|
const auto pos = touch_point.pos(); |
|
|
|
|
|
const auto [touch_x, touch_y] = MapToTouchScreen(pos.x(), pos.y()); |
|
|
input_subsystem->GetTouchScreen()->TouchMoved(touch_x, touch_y, touch_point.id()); |
|
|
input_subsystem->GetTouchScreen()->TouchMoved(touch_x, touch_y, touch_point.id()); |
|
|
} |
|
|
} |
|
|
input_subsystem->GetTouchScreen()->ReleaseInactiveTouch(); |
|
|
input_subsystem->GetTouchScreen()->ReleaseInactiveTouch(); |
|
|
|