mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +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
|
@ -19,9 +19,9 @@ use base::id::{
|
|||
use bluetooth_traits::BluetoothRequest;
|
||||
use canvas_traits::webgl::WebGLPipeline;
|
||||
use compositing_traits::{CompositionPipeline, CompositorMsg, CompositorProxy};
|
||||
use constellation_traits::WindowSizeData;
|
||||
use crossbeam_channel::{Sender, unbounded};
|
||||
use devtools_traits::{DevtoolsControlMsg, ScriptToDevtoolsControlMsg};
|
||||
use embedder_traits::ViewportDetails;
|
||||
use embedder_traits::user_content_manager::UserContentManager;
|
||||
use fonts::{SystemFontServiceProxy, SystemFontServiceProxySender};
|
||||
use ipc_channel::Error;
|
||||
|
@ -161,8 +161,8 @@ pub struct InitialPipelineState {
|
|||
/// A channel to the memory profiler thread.
|
||||
pub mem_profiler_chan: profile_mem::ProfilerChan,
|
||||
|
||||
/// Information about the initial window size.
|
||||
pub window_size: WindowSizeData,
|
||||
/// The initial [`ViewportDetails`] to use when starting this new [`Pipeline`].
|
||||
pub viewport_details: ViewportDetails,
|
||||
|
||||
/// The ID of the pipeline namespace for this script thread.
|
||||
pub pipeline_namespace_id: PipelineNamespaceId,
|
||||
|
@ -219,7 +219,7 @@ impl Pipeline {
|
|||
webview_id: state.webview_id,
|
||||
opener: state.opener,
|
||||
load_data: state.load_data.clone(),
|
||||
window_size: state.window_size,
|
||||
viewport_details: state.viewport_details,
|
||||
};
|
||||
|
||||
if let Err(e) = script_chan.send(ScriptThreadMessage::AttachLayout(new_layout_info))
|
||||
|
@ -275,7 +275,7 @@ impl Pipeline {
|
|||
resource_threads: state.resource_threads,
|
||||
time_profiler_chan: state.time_profiler_chan,
|
||||
mem_profiler_chan: state.mem_profiler_chan,
|
||||
window_size: state.window_size,
|
||||
viewport_details: state.viewport_details,
|
||||
script_chan: script_chan.clone(),
|
||||
load_data: state.load_data.clone(),
|
||||
script_port,
|
||||
|
@ -484,7 +484,7 @@ pub struct UnprivilegedPipelineContent {
|
|||
resource_threads: ResourceThreads,
|
||||
time_profiler_chan: time::ProfilerChan,
|
||||
mem_profiler_chan: profile_mem::ProfilerChan,
|
||||
window_size: WindowSizeData,
|
||||
viewport_details: ViewportDetails,
|
||||
script_chan: IpcSender<ScriptThreadMessage>,
|
||||
load_data: LoadData,
|
||||
script_port: IpcReceiver<ScriptThreadMessage>,
|
||||
|
@ -534,7 +534,7 @@ impl UnprivilegedPipelineContent {
|
|||
time_profiler_sender: self.time_profiler_chan.clone(),
|
||||
memory_profiler_sender: self.mem_profiler_chan.clone(),
|
||||
devtools_server_sender: self.devtools_ipc_sender,
|
||||
window_size: self.window_size,
|
||||
viewport_details: self.viewport_details,
|
||||
pipeline_namespace_id: self.pipeline_namespace_id,
|
||||
content_process_shutdown_sender: content_process_shutdown_chan,
|
||||
webgl_chan: self.webgl_chan,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue