From f95c4cfaba1a3ee6e35bd3deac0973895a555598 Mon Sep 17 00:00:00 2001 From: Mukilan Thiyagarajan Date: Fri, 1 Nov 2024 16:05:43 +0530 Subject: [PATCH] servoshell: fix logical screen size calculation (#34096) Signed-off-by: Mukilan Thiyagarajan --- ports/servoshell/desktop/headed_window.rs | 8 ++++---- ports/servoshell/egl/servo_glue.rs | 11 ++++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ports/servoshell/desktop/headed_window.rs b/ports/servoshell/desktop/headed_window.rs index 70dc1d480e5..8d71fce5e44 100644 --- a/ports/servoshell/desktop/headed_window.rs +++ b/ports/servoshell/desktop/headed_window.rs @@ -99,9 +99,9 @@ impl Window { || (monitor.size(), monitor.scale_factor()), |size| (PhysicalSize::new(size.width, size.height), 1.0), ); - let screen_scale: Scale = + let screen_scale: Scale = Scale::new(screen_scale); - let screen_size = (winit_size_to_euclid_size(screen_size).to_f64() * screen_scale).to_u32(); + let screen_size = (winit_size_to_euclid_size(screen_size).to_f64() / screen_scale).to_u32(); // Initialize surfman let display_handle = winit_window @@ -534,9 +534,9 @@ impl WindowMethods for Window { let window_origin = self.winit_window.outer_position().unwrap_or_default(); let window_origin = winit_position_to_euclid_point(window_origin).to_i32(); let window_rect = DeviceIntRect::from_origin_and_size(window_origin, window_size); - let window_scale: Scale = + let window_scale: Scale = Scale::new(self.winit_window.scale_factor()); - let window_rect = (window_rect.to_f64() * window_scale).to_i32(); + let window_rect = (window_rect.to_f64() / window_scale).to_i32(); let viewport_origin = DeviceIntPoint::zero(); // bottom left let viewport_size = winit_size_to_euclid_size(self.winit_window.inner_size()).to_f32(); diff --git a/ports/servoshell/egl/servo_glue.rs b/ports/servoshell/egl/servo_glue.rs index d9b32401c34..9674e357aae 100644 --- a/ports/servoshell/egl/servo_glue.rs +++ b/ports/servoshell/egl/servo_glue.rs @@ -23,6 +23,7 @@ use servo::keyboard_types::{Key, KeyState, KeyboardEvent}; use servo::script_traits::{ MediaSessionActionType, MouseButton, TouchEventType, TouchId, TraversalDirection, }; +use servo::servo_geometry::DeviceIndependentPixel; use servo::style_traits::DevicePixel; use servo::webrender_api::units::DeviceIntRect; use servo::webrender_api::ScrollLocation; @@ -56,7 +57,7 @@ impl Coordinates { pub(super) struct ServoWindowCallbacks { host_callbacks: Box, coordinates: RefCell, - density: f32, + hidpi_factor: Scale, rendering_context: RenderingContext, } @@ -64,13 +65,13 @@ impl ServoWindowCallbacks { pub(super) fn new( host_callbacks: Box, coordinates: RefCell, - density: f32, + hidpi_factor: f32, rendering_context: RenderingContext, ) -> Self { Self { host_callbacks, coordinates, - density, + hidpi_factor: Scale::new(hidpi_factor), rendering_context, } } @@ -690,14 +691,14 @@ impl EmbedderMethods for ServoEmbedderCallbacks { impl WindowMethods for ServoWindowCallbacks { fn get_coordinates(&self) -> EmbedderCoordinates { let coords = self.coordinates.borrow(); - let screen_size = (coords.viewport.size.to_f32() * Scale::new(self.density)).to_i32(); + let screen_size = (coords.viewport.size.to_f32() / self.hidpi_factor).to_i32(); EmbedderCoordinates { viewport: coords.viewport.to_box2d(), framebuffer: coords.framebuffer, window_rect: Box2D::from_origin_and_size(Point2D::zero(), screen_size), screen_size, available_screen_size: screen_size, - hidpi_factor: Scale::new(self.density), + hidpi_factor: self.hidpi_factor, } }