mirror of
https://github.com/servo/servo.git
synced 2025-08-12 08:55:32 +01:00
servoshell: Use DeviceIndependentPixel for WebDriver Rect related requests (#37893)
[Spec](https://w3c.github.io/webdriver/#set-window-rect) expects CSS pixel for input and output. Previously, we use Device Pixel for them instead. Testing: Tested manually with different screen DPR and compared with other browsers. Fixes: Task 4 of https://github.com/servo/servo/issues/37804 --------- Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
This commit is contained in:
parent
0db02702e7
commit
3526b7e86e
8 changed files with 66 additions and 269 deletions
|
@ -20,9 +20,11 @@ use log::{info, trace, warn};
|
|||
use net::protocols::ProtocolRegistry;
|
||||
use servo::config::opts::Opts;
|
||||
use servo::config::prefs::Preferences;
|
||||
use servo::servo_geometry::DeviceIndependentIntSize;
|
||||
use servo::servo_url::ServoUrl;
|
||||
use servo::user_content_manager::{UserContentManager, UserScript};
|
||||
use servo::webrender_api::ScrollLocation;
|
||||
use servo::webrender_api::units::DeviceIntSize;
|
||||
use servo::{
|
||||
EventLoopWaker, InputEvent, KeyboardEvent, MouseButtonEvent, MouseMoveEvent,
|
||||
WebDriverCommandMsg, WheelDelta, WheelEvent, WheelMode,
|
||||
|
@ -403,13 +405,31 @@ impl App {
|
|||
.values()
|
||||
.next()
|
||||
.expect("Should have at least one window in servoshell");
|
||||
|
||||
let scale = window.hidpi_scale_factor().get() as f64;
|
||||
// TODO: Find a universal way to convert.
|
||||
// See https://github.com/servo/servo/issues/37937
|
||||
let requested_physical_size = DeviceIntSize::new(
|
||||
(requested_size.width as f64 * scale).round() as i32,
|
||||
(requested_size.height as f64 * scale).round() as i32,
|
||||
);
|
||||
// When None is returned, it means that the request went to the display system,
|
||||
// and the actual size will be delivered later with the WindowEvent::Resized.
|
||||
let returned_size = window.request_resize(&webview, requested_size);
|
||||
let returned_size = window.request_resize(&webview, requested_physical_size);
|
||||
// TODO: Handle None case. For now, we assume always succeed.
|
||||
// In reality, the request may exceed available screen size.
|
||||
if let Err(error) = size_sender.send(returned_size.unwrap_or(requested_size)) {
|
||||
|
||||
// TODO: Find a universal way to convert.
|
||||
// See https://github.com/servo/servo/issues/37937
|
||||
if let Err(error) = size_sender.send(
|
||||
returned_size
|
||||
.map(|size| {
|
||||
DeviceIndependentIntSize::new(
|
||||
(size.width as f64 / scale).round() as i32,
|
||||
(size.height as f64 / scale).round() as i32,
|
||||
)
|
||||
})
|
||||
.unwrap_or(requested_size),
|
||||
) {
|
||||
warn!("Failed to send window size: {error}");
|
||||
}
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue