Fix incorrect scaling of absolute mouse coordinates (again)

This commit is contained in:
loki 2021-07-10 23:49:04 +02:00
parent 61be0eb051
commit d55c6ee84c
3 changed files with 22 additions and 9 deletions

View File

@ -222,14 +222,20 @@ void passthrough(std::shared_ptr<input_t> &input, PNV_ABS_MOUSE_MOVE_PACKET pack
return;
}
int width = util::endian::big(packet->width);
int height = util::endian::big(packet->height);
auto width = (float)util::endian::big(packet->width);
auto height = (float)util::endian::big(packet->height);
auto offsetX = (width - (float)touch_port.width) * 0.5f;
auto offsetY = (height - (float)touch_port.height) * 0.5f;
auto scalarX = touch_port.width / width;
auto scalarY = touch_port.height / height;
x *= scalarX;
y *= scalarY;
auto offsetX = touch_port.client_offsetX;
auto offsetY = touch_port.client_offsetY;
std::clamp(x, offsetX, width - offsetX);
std::clamp(y, offsetX, height - offsetY);
std::clamp(y, offsetY, height - offsetY);
platf::touch_port_t abs_port {
touch_port.offset_x, touch_port.offset_y,

View File

@ -24,7 +24,9 @@ std::shared_ptr<input_t> alloc(safe::mail_t mail);
struct touch_port_t : public platf::touch_port_t {
int env_width, env_height;
// inverse of scalar used for aspect ratio
// Offset x and y coordinates of the client
float client_offsetX, client_offsetY;
float scalar_inv;
};
} // namespace input

View File

@ -1071,13 +1071,18 @@ input::touch_port_t make_port(platf::display_t *display, const config_t &config)
auto w2 = scalar * wd;
auto h2 = scalar * hd;
auto offsetX = (config.width - w2) * 0.5f;
auto offsetY = (config.height - h2) * 0.5f;
return input::touch_port_t {
display->offset_x,
display->offset_y,
(int)w2,
(int)h2,
config.width,
config.height,
display->env_width,
display->env_height,
offsetX,
offsetY,
1.0f / scalar,
};
}
@ -1794,4 +1799,4 @@ color_t colors[] {
make_color_matrix(0.2126f, 0.0722f, 0.436f, 0.615f, 0.0625, 0.5f, { 16.0f, 235.0f }, { 16.0f, 240.0f }), // BT701 MPEG
make_color_matrix(0.2126f, 0.0722f, 0.5f, 0.5f, 0.0f, 0.5f, { 0.0f, 255.0f }, { 0.0f, 255.0f }), // BT701 JPEG
};
}
} // namespace video