diff --git a/src/platform/common.h b/src/platform/common.h index 274bbbdc8d1..2fdb383396a 100644 --- a/src/platform/common.h +++ b/src/platform/common.h @@ -481,10 +481,7 @@ namespace platf { */ using pull_free_image_cb_t = std::function &img_out)>; - display_t() noexcept: - offset_x {0}, - offset_y {0} { - } + display_t() noexcept = default; /** * @brief Capture a frame. @@ -534,12 +531,18 @@ namespace platf { virtual ~display_t() = default; // Offsets for when streaming a specific monitor. By default, they are 0. - int offset_x, offset_y; - int env_width, env_height; - int env_logical_width, env_logical_height; - - int width, height; - int logical_width, logical_height; + int offset_x {0}; + int offset_y {0}; + + int env_width {0}; + int env_height {0}; + int env_logical_width {0}; + int env_logical_height {0}; + + int width {0}; + int height {0}; + int logical_width {0}; + int logical_height {0}; protected: // collect capture timing data (at loglevel debug) diff --git a/src/platform/windows/input.cpp b/src/platform/windows/input.cpp index 533e3790013..e708beab03c 100644 --- a/src/platform/windows/input.cpp +++ b/src/platform/windows/input.cpp @@ -511,8 +511,10 @@ namespace platf { // MOUSEEVENTF_VIRTUALDESK maps to the entirety of the desktop rather than the primary desktop MOUSEEVENTF_VIRTUALDESK; - auto scaled_x = std::lround((x + touch_port.offset_x) * ((float) target_touch_port.width / (float) touch_port.width)); - auto scaled_y = std::lround((y + touch_port.offset_y) * ((float) target_touch_port.height / (float) touch_port.height)); + // Note: x and y already include the display offset (offset_x/offset_y) from client_to_touchport(), + // so we must not add offset_x/offset_y again here to avoid double-offsetting on multi-monitor setups. + auto scaled_x = std::lround(x * ((float) target_touch_port.width / (float) touch_port.width)); + auto scaled_y = std::lround(y * ((float) target_touch_port.height / (float) touch_port.height)); mi.dx = scaled_x; mi.dy = scaled_y; diff --git a/src/video.cpp b/src/video.cpp index 7487e1278e6..5542b9ccd97 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -2063,7 +2063,7 @@ namespace video { float scalar_tpcoords = 1.0f; int display_env_logical_width = 0; int display_env_logical_height = 0; - if (display->logical_width && display->logical_height && display->env_logical_width && display->env_logical_height) { + if (display->logical_width > 0 && display->logical_height > 0 && display->env_logical_width > 0 && display->env_logical_height > 0) { float lwd = display->logical_width; float lhd = display->logical_height; scalar_tpcoords = std::fminf(wd / lwd, hd / lhd);