mirror of
https://github.com/servo/servo.git
synced 2025-07-25 08:10:21 +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
|
@ -18,8 +18,8 @@ use app_units::Au;
|
|||
use atomic_refcell::AtomicRefCell;
|
||||
use base::Epoch;
|
||||
use base::id::{BrowsingContextId, PipelineId, WebViewId};
|
||||
use constellation_traits::{ScrollState, UntrustedNodeAddress, WindowSizeData};
|
||||
use euclid::Size2D;
|
||||
use constellation_traits::{ScrollState, UntrustedNodeAddress};
|
||||
use embedder_traits::ViewportDetails;
|
||||
use euclid::default::{Point2D, Rect};
|
||||
use fnv::FnvHashMap;
|
||||
use fonts::{FontContext, SystemFontServiceProxy};
|
||||
|
@ -47,7 +47,6 @@ use style::properties::style_structs::Font;
|
|||
use style::queries::values::PrefersColorScheme;
|
||||
use style::selector_parser::{PseudoElement, RestyleDamage, Snapshot};
|
||||
use style::stylesheets::Stylesheet;
|
||||
use style_traits::CSSPixel;
|
||||
use webrender_api::ImageKey;
|
||||
use webrender_traits::CrossProcessCompositorApi;
|
||||
|
||||
|
@ -185,7 +184,7 @@ pub struct LayoutConfig {
|
|||
pub font_context: Arc<FontContext>,
|
||||
pub time_profiler_chan: time::ProfilerChan,
|
||||
pub compositor_api: CrossProcessCompositorApi,
|
||||
pub window_size: WindowSizeData,
|
||||
pub viewport_details: ViewportDetails,
|
||||
}
|
||||
|
||||
pub trait LayoutFactory: Send + Sync {
|
||||
|
@ -386,7 +385,7 @@ pub struct Reflow {
|
|||
pub struct IFrameSize {
|
||||
pub browsing_context_id: BrowsingContextId,
|
||||
pub pipeline_id: PipelineId,
|
||||
pub size: Size2D<f32, CSSPixel>,
|
||||
pub viewport_details: ViewportDetails,
|
||||
}
|
||||
|
||||
pub type IFrameSizes = FnvHashMap<BrowsingContextId, IFrameSize>;
|
||||
|
@ -415,8 +414,8 @@ pub struct ReflowRequest {
|
|||
pub dirty_root: Option<TrustedNodeAddress>,
|
||||
/// Whether the document's stylesheets have changed since the last script reflow.
|
||||
pub stylesheets_changed: bool,
|
||||
/// The current window size.
|
||||
pub window_size: WindowSizeData,
|
||||
/// The current [`ViewportDetails`] to use for this reflow.
|
||||
pub viewport_details: ViewportDetails,
|
||||
/// The goal of this reflow.
|
||||
pub reflow_goal: ReflowGoal,
|
||||
/// The number of objects in the dom #10110
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue