mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Move non-gfx things out of gfx_traits
and create a base
crate (#32296)
For a long time, `gfx_traits` has held a lot of things unrelated to graphics and also unrelated to the `gfx` crate (which is mostly about fonts). This is a cleanup which does a few things: 1. Move non `gfx` crate things out of `gfx_traits`. This is important in order to prevent dependency cycles with a different integration between layout, script, and fonts. 2. Rename the `msg` crate to `base`. It didn't really contain anything to do with messages and instead mostly holds ids, which are used across many different crates in Servo. This new crate will hold the *rare* data types that are widely used. Details: - All BackgroundHangMonitor-related things from base to a new `background_hang_monitor_api` crate. - Moved `TraversalDirection` to `script_traits` - Moved `Epoch`-related things from `gfx_traits` to `base`. - Moved `PrintTree` to base. This should be widely useful in Servo. - Moved `WebrenderApi` from `base` to `webrender_traits` and renamed it to `WebRenderFontApi`.
This commit is contained in:
parent
1017533297
commit
3398fc017b
163 changed files with 709 additions and 632 deletions
89
components/shared/base/print_tree.rs
Normal file
89
components/shared/base/print_tree.rs
Normal file
|
@ -0,0 +1,89 @@
|
|||
/* 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/. */
|
||||
|
||||
/// A struct that makes it easier to print out a pretty tree of data, which
|
||||
/// can be visually scanned more easily.
|
||||
pub struct PrintTree {
|
||||
/// The current level of recursion.
|
||||
level: u32,
|
||||
|
||||
/// An item which is queued up, so that we can determine if we need
|
||||
/// a mid-tree prefix or a branch ending prefix.
|
||||
queued_item: Option<String>,
|
||||
}
|
||||
|
||||
impl PrintTree {
|
||||
pub fn new(title: String) -> PrintTree {
|
||||
println!("\u{250c} {}", title);
|
||||
PrintTree {
|
||||
level: 1,
|
||||
queued_item: None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Descend one level in the tree with the given title string.
|
||||
pub fn new_level(&mut self, queued_title: String) {
|
||||
self.flush_queued_item("\u{251C}\u{2500}");
|
||||
|
||||
self.print_level_prefix();
|
||||
|
||||
let items: Vec<&str> = queued_title.split('\n').collect();
|
||||
println!("\u{251C}\u{2500} {}", items[0]);
|
||||
for i in 1..items.len() {
|
||||
self.print_level_child_indentation();
|
||||
print!("{}", items[i]);
|
||||
if i < items.len() {
|
||||
println!();
|
||||
}
|
||||
}
|
||||
|
||||
self.level += 1;
|
||||
}
|
||||
|
||||
/// Ascend one level in the tree.
|
||||
pub fn end_level(&mut self) {
|
||||
self.flush_queued_item("\u{2514}\u{2500}");
|
||||
self.level -= 1;
|
||||
}
|
||||
|
||||
/// Add an item to the current level in the tree.
|
||||
pub fn add_item(&mut self, text: String) {
|
||||
self.flush_queued_item("\u{251C}\u{2500}");
|
||||
self.queued_item = Some(text);
|
||||
}
|
||||
|
||||
fn print_level_prefix(&self) {
|
||||
for _ in 0..self.level {
|
||||
print!("\u{2502} ");
|
||||
}
|
||||
}
|
||||
|
||||
fn print_level_child_indentation(&self) {
|
||||
for _ in 0..(self.level + 1) {
|
||||
print!("\u{2502} ");
|
||||
}
|
||||
print!("{}", " ".repeat(7));
|
||||
}
|
||||
|
||||
fn flush_queued_item(&mut self, prefix: &str) {
|
||||
if let Some(queued_item) = self.queued_item.take() {
|
||||
self.print_level_prefix();
|
||||
let items: Vec<&str> = queued_item.split('\n').collect();
|
||||
println!("{} {}", prefix, items[0]);
|
||||
for i in 1..items.len() {
|
||||
self.print_level_child_indentation();
|
||||
print!("{}", items[i]);
|
||||
if i < items.len() {
|
||||
println!();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for PrintTree {
|
||||
fn drop(&mut self) {
|
||||
self.flush_queued_item("\u{2514}\u{2500}");
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue