mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
servoshell: fix logical screen size calculation (#34096)
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
This commit is contained in:
parent
cc6f7c5bc4
commit
f95c4cfaba
2 changed files with 10 additions and 9 deletions
|
@ -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();
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue