Files
servo/ports/servoshell/main.rs
Martin Robinson 824f551f03 Rename IOCompositor to Paint (#41176)
For a long time, the "Compositor" hasn't done any compositing. This is
handled by WebRender. In addition the "Compositor" does many other
tasks. This change renames `IOCompositor` to `Paint`.

`Paint` is Servo's paint subsystem and contains multiple `Painter`s.
This change does not rename the crate; that will be done in a
followup change.

Testing: This just renames types and updates comments, so no new tests
are necessary.

---------

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2025-12-10 15:09:49 +00:00

53 lines
2.3 KiB
Rust

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
//! The `servoshell` test application.
//!
//! Creates a `Servo` instance with a example implementation of a working
//! web browser.
//!
//! This browser's implementation of `WindowMethods` is built on top
//! of [winit], the cross-platform windowing library.
//!
//! For the engine itself look next door in `components/servo/lib.rs`.
//!
//! [winit]: https://github.com/rust-windowing/winit
// Normally, rust uses the "Console" Windows subsystem, which pops up a console
// when running an application. Switching to the "Windows" subsystem prevents
// this, but also hides debugging output. We mitigate this by attempting to
// attach to the console of the parent process.
#![windows_subsystem = "windows"]
#[cfg(target_os = "windows")]
use windows_sys::Win32::System::Console;
fn main() {
#[cfg(target_os = "windows")]
// SAFETY: No safety related side effects or requirements.
unsafe {
// When servo is started from the commandline, we still want output
// to be printed. Due to us using the `windows` subsystem, this doesn't
// work out-of-the-box, and we need to manually attempt to attach to
// the console of the parent process. If servo was not started from
// the commandline, then the call will fail, which we can ignore.
let _result = Console::AttachConsole(Console::ATTACH_PARENT_PROCESS);
}
cfg_if::cfg_if! {
if #[cfg(not(any(target_os = "android", target_env = "ohos")))] {
servoshell::main()
} else {
// Android: see ports/servoshell/egl/android/mod.rs.
// OpenHarmony: see ports/servoshell/egl/ohos/mod.rs.
println!(
"Cannot run the servoshell `bin` executable on platforms such as \
Android or OpenHarmony. On these platforms you need to compile \
the servoshell library as a `cdylib` and integrate it with the \
platform app code into an `apk` (android) or `hap` (OpenHarmony).\
For Android `mach build` will do these steps automatically for you."
);
}
}
}