///|
// Layout tree debug printing helpers.
///|
/// Print layout tree for debugging
pub fn print_layout_tree(layout : @layout_types.Layout, indent : Int) -> Unit {
print_layout_tree_with_options(layout, indent, false)
}
///|
/// Print layout tree with optional detailed box model info
pub fn print_layout_tree_with_options(
layout : @layout_types.Layout,
indent : Int,
show_box_model : Bool,
) -> Unit {
let prefix = " ".repeat(indent)
let basic_info = prefix +
layout.id +
" (" +
layout.x.to_string() +
", " +
layout.y.to_string() +
") " +
layout.width.to_string() +
"x" +
layout.height.to_string()
if show_box_model {
let m = layout.margin
let p = layout.padding
let b = layout.border
let margin_info = if m.top != 0.0 ||
m.right != 0.0 ||
m.bottom != 0.0 ||
m.left != 0.0 {
" m[" +
m.top.to_string() +
"," +
m.right.to_string() +
"," +
m.bottom.to_string() +
"," +
m.left.to_string() +
"]"
} else {
""
}
let padding_info = if p.top != 0.0 ||
p.right != 0.0 ||
p.bottom != 0.0 ||
p.left != 0.0 {
" p[" +
p.top.to_string() +
"," +
p.right.to_string() +
"," +
p.bottom.to_string() +
"," +
p.left.to_string() +
"]"
} else {
""
}
let border_info = if b.top != 0.0 ||
b.right != 0.0 ||
b.bottom != 0.0 ||
b.left != 0.0 {
" b[" +
b.top.to_string() +
"," +
b.right.to_string() +
"," +
b.bottom.to_string() +
"," +
b.left.to_string() +
"]"
} else {
""
}
println(basic_info + margin_info + padding_info + border_info)
} else {
println(basic_info)
}
for child in layout.children {
print_layout_tree_with_options(child, indent + 1, show_box_model)
}
}