forked from eden-emu/eden
yuzu: Constrain mouse in render window when emulated
This commit is contained in:
parent
91c12db070
commit
f61cf14646
5 changed files with 65 additions and 54 deletions
|
@ -185,7 +185,6 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
|
|||
#endif
|
||||
|
||||
constexpr int default_mouse_hide_timeout = 2500;
|
||||
constexpr int default_mouse_center_timeout = 10;
|
||||
constexpr int default_input_update_timeout = 1;
|
||||
|
||||
constexpr size_t CopyBufferSize = 1_MiB;
|
||||
|
@ -435,9 +434,6 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan
|
|||
connect(&mouse_hide_timer, &QTimer::timeout, this, &GMainWindow::HideMouseCursor);
|
||||
connect(ui->menubar, &QMenuBar::hovered, this, &GMainWindow::ShowMouseCursor);
|
||||
|
||||
mouse_center_timer.setInterval(default_mouse_center_timeout);
|
||||
connect(&mouse_center_timer, &QTimer::timeout, this, &GMainWindow::CenterMouseCursor);
|
||||
|
||||
update_input_timer.setInterval(default_input_update_timeout);
|
||||
connect(&update_input_timer, &QTimer::timeout, this, &GMainWindow::UpdateInputDrivers);
|
||||
update_input_timer.start();
|
||||
|
@ -1366,14 +1362,6 @@ void GMainWindow::InitializeHotkeys() {
|
|||
}
|
||||
});
|
||||
connect_shortcut(QStringLiteral("Toggle Mouse Panning"), [&] {
|
||||
if (Settings::values.mouse_enabled) {
|
||||
Settings::values.mouse_panning = false;
|
||||
QMessageBox::warning(
|
||||
this, tr("Emulated mouse is enabled"),
|
||||
tr("Real mouse input and mouse panning are incompatible. Please disable the "
|
||||
"emulated mouse in input advanced settings to allow mouse panning."));
|
||||
return;
|
||||
}
|
||||
Settings::values.mouse_panning = !Settings::values.mouse_panning;
|
||||
if (Settings::values.mouse_panning) {
|
||||
render_window->installEventFilter(render_window);
|
||||
|
@ -4693,26 +4681,10 @@ void GMainWindow::ShowMouseCursor() {
|
|||
}
|
||||
}
|
||||
|
||||
void GMainWindow::CenterMouseCursor() {
|
||||
if (emu_thread == nullptr || !Settings::values.mouse_panning) {
|
||||
mouse_center_timer.stop();
|
||||
return;
|
||||
}
|
||||
if (!this->isActiveWindow()) {
|
||||
mouse_center_timer.stop();
|
||||
return;
|
||||
}
|
||||
const int center_x = render_window->width() / 2;
|
||||
const int center_y = render_window->height() / 2;
|
||||
|
||||
QCursor::setPos(mapToGlobal(QPoint{center_x, center_y}));
|
||||
}
|
||||
|
||||
void GMainWindow::OnMouseActivity() {
|
||||
if (!Settings::values.mouse_panning) {
|
||||
ShowMouseCursor();
|
||||
}
|
||||
mouse_center_timer.stop();
|
||||
}
|
||||
|
||||
void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) {
|
||||
|
@ -4988,22 +4960,6 @@ void GMainWindow::dragMoveEvent(QDragMoveEvent* event) {
|
|||
AcceptDropEvent(event);
|
||||
}
|
||||
|
||||
void GMainWindow::leaveEvent(QEvent* event) {
|
||||
if (Settings::values.mouse_panning) {
|
||||
const QRect& rect = geometry();
|
||||
QPoint position = QCursor::pos();
|
||||
|
||||
qint32 x = qBound(rect.left(), position.x(), rect.right());
|
||||
qint32 y = qBound(rect.top(), position.y(), rect.bottom());
|
||||
// Only start the timer if the mouse has left the window bound.
|
||||
// The leave event is also triggered when the window looses focus.
|
||||
if (x != position.x() || y != position.y()) {
|
||||
mouse_center_timer.start();
|
||||
}
|
||||
event->accept();
|
||||
}
|
||||
}
|
||||
|
||||
bool GMainWindow::ConfirmChangeGame() {
|
||||
if (emu_thread == nullptr)
|
||||
return true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue