aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMukilan Thiyagarajan <mukilan@igalia.com>2024-11-01 16:05:43 +0530
committerGitHub <noreply@github.com>2024-11-01 10:35:43 +0000
commitf95c4cfaba1a3ee6e35bd3deac0973895a555598 (patch)
tree4bc73d2ca34eca1d2c93b8b67ffe4ee0a7818a6e
parentcc6f7c5bc42c049302480d42a5ebd70f984a1e8e (diff)
downloadservo-f95c4cfaba1a3ee6e35bd3deac0973895a555598.tar.gz
servo-f95c4cfaba1a3ee6e35bd3deac0973895a555598.zip
servoshell: fix logical screen size calculation (#34096)
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
-rw-r--r--ports/servoshell/desktop/headed_window.rs8
-rw-r--r--ports/servoshell/egl/servo_glue.rs11
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<f64, DevicePixel, DeviceIndependentPixel> =
+ let screen_scale: Scale<f64, DeviceIndependentPixel, DevicePixel> =
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<f64, DevicePixel, DeviceIndependentPixel> =
+ let window_scale: Scale<f64, DeviceIndependentPixel, DevicePixel> =
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<dyn HostTrait>,
coordinates: RefCell<Coordinates>,
- density: f32,
+ hidpi_factor: Scale<f32, DeviceIndependentPixel, DevicePixel>,
rendering_context: RenderingContext,
}
@@ -64,13 +65,13 @@ impl ServoWindowCallbacks {
pub(super) fn new(
host_callbacks: Box<dyn HostTrait>,
coordinates: RefCell<Coordinates>,
- 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,
}
}