diff --git a/src/platform/common.h b/src/platform/common.h index 830c466252e..9f11b8473e3 100644 --- a/src/platform/common.h +++ b/src/platform/common.h @@ -485,10 +485,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. @@ -538,16 +535,16 @@ namespace platf { virtual ~display_t() = default; // Offsets for when streaming a specific monitor. By default, they are 0. - int offset_x; - int offset_y; - int env_width; - int env_height; - int env_logical_width; - int env_logical_height; - int width; - int height; - int logical_width; - int 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 28fe6fa5749..f7fb328504e 100644 --- a/src/platform/windows/input.cpp +++ b/src/platform/windows/input.cpp @@ -513,8 +513,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 d8c9dde3125..00af66c3a69 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -2139,7 +2139,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);