From fff45a41144e894ad11b046c6bedb720848f3f7a Mon Sep 17 00:00:00 2001 From: Matt Gajownik Date: Sun, 6 Dec 2020 14:23:55 +1100 Subject: [PATCH] UI: Scale Interact cursor position based on display DPI --- UI/window-basic-interaction.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/UI/window-basic-interaction.cpp b/UI/window-basic-interaction.cpp index 333a2638..ed3519c8 100644 --- a/UI/window-basic-interaction.cpp +++ b/UI/window-basic-interaction.cpp @@ -218,6 +218,14 @@ static int TranslateQtMouseEventModifiers(QMouseEvent *event) bool OBSBasicInteraction::GetSourceRelativeXY(int mouseX, int mouseY, int &relX, int &relY) { +#ifdef SUPPORTS_FRACTIONAL_SCALING + float pixelRatio = devicePixelRatioF(); +#else + float pixelRatio = devicePixelRatio(); +#endif + int mouseXscaled = (int)roundf(mouseX * pixelRatio); + int mouseYscaled = (int)roundf(mouseY * pixelRatio); + QSize size = GetPixelSize(ui->preview); uint32_t sourceCX = max(obs_source_get_width(source), 1u); @@ -230,11 +238,11 @@ bool OBSBasicInteraction::GetSourceRelativeXY(int mouseX, int mouseY, int &relX, y, scale); if (x > 0) { - relX = int(float(mouseX - x) / scale); - relY = int(float(mouseY / scale)); + relX = int(float(mouseXscaled - x) / scale); + relY = int(float(mouseYscaled / scale)); } else { - relX = int(float(mouseX / scale)); - relY = int(float(mouseY - y) / scale); + relX = int(float(mouseXscaled / scale)); + relY = int(float(mouseYscaled - y) / scale); } // Confirm mouse is inside the source -- GitLab