mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
constellation: Stop assuming that the viewport is shared by all WebViews (#36312)
The `Constellation` previously held a `window_size` member, but this assumes that all `WebView`s have the same size. This change removes that assumption as well as making sure that all `WebView`s pass their size and HiDIP scaling to the `Constellation` when they are created. In addition - `WindowSizeData` is renamed to `ViewportDetails`, as it was holding more than just the size and it didn't necessarily correspond to a "window." It's used for tracking viewport data, whether for an `<iframe>` or the main `WebView` viewport. - `ViewportDetails` is stored more consistently so that conceptually an `<iframe>` can also have its own HiDPI scaling. This isn't something we necessarily want, but it makes everything conceptually simpler. The goal with this change is to work toward allowing per-`WebView` HiDPI scaling and sizing. There are still some corresponding changes in the compositor to make that happen, but they will in a subsequent change. Testing: This is covered by existing tests. There should be no behavior changes. Fixes: This is part of #36232. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
7c89e24f34
commit
fb344ba4e9
26 changed files with 272 additions and 256 deletions
|
@ -9,7 +9,8 @@ use std::sync::Arc;
|
|||
use app_units::Au;
|
||||
use base::id::{BrowsingContextId, PipelineId};
|
||||
use data_url::DataUrl;
|
||||
use euclid::Size2D;
|
||||
use embedder_traits::ViewportDetails;
|
||||
use euclid::{Scale, Size2D};
|
||||
use net_traits::image_cache::{ImageOrMetadataAvailable, UsePlaceholder};
|
||||
use pixels::Image;
|
||||
use script_layout_interface::IFrameSize;
|
||||
|
@ -358,12 +359,17 @@ impl ReplacedContents {
|
|||
},
|
||||
ReplacedContentKind::IFrame(iframe) => {
|
||||
let size = Size2D::new(rect.size.width.to_f32_px(), rect.size.height.to_f32_px());
|
||||
let hidpi_scale_factor = layout_context.shared_context().device_pixel_ratio();
|
||||
|
||||
layout_context.iframe_sizes.lock().insert(
|
||||
iframe.browsing_context_id,
|
||||
IFrameSize {
|
||||
browsing_context_id: iframe.browsing_context_id,
|
||||
pipeline_id: iframe.pipeline_id,
|
||||
size,
|
||||
viewport_details: ViewportDetails {
|
||||
size,
|
||||
hidpi_scale_factor: Scale::new(hidpi_scale_factor.0),
|
||||
},
|
||||
},
|
||||
);
|
||||
vec![Fragment::IFrame(ArcRefCell::new(IFrameFragment {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue