diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-02 17:52:06 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-02 17:52:06 +0400 |
| commit | c6d64dae7aae12379d25b2e90630d19aeef5444b (patch) | |
| tree | 2df6f7ad0d298838f0549ff54746f22837de3304 /src/render_helpers/debug.rs | |
| parent | 5dddc850fcae23289d40623b6c060b88233bf57f (diff) | |
| download | niri-c6d64dae7aae12379d25b2e90630d19aeef5444b.tar.gz niri-c6d64dae7aae12379d25b2e90630d19aeef5444b.tar.bz2 niri-c6d64dae7aae12379d25b2e90630d19aeef5444b.zip | |
Add debug-toggle-opaque-regions
Diffstat (limited to 'src/render_helpers/debug.rs')
| -rw-r--r-- | src/render_helpers/debug.rs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/render_helpers/debug.rs b/src/render_helpers/debug.rs new file mode 100644 index 00000000..f67abdb3 --- /dev/null +++ b/src/render_helpers/debug.rs @@ -0,0 +1,58 @@ +use smithay::backend::renderer::element::solid::SolidColorRenderElement; +use smithay::backend::renderer::element::{Element, Id, Kind}; +use smithay::backend::renderer::utils::CommitCounter; +use smithay::utils::Scale; + +use super::renderer::NiriRenderer; +use crate::niri::OutputRenderElements; + +pub fn draw_opaque_regions<R: NiriRenderer>( + elements: &mut Vec<OutputRenderElements<R>>, + scale: Scale<f64>, +) { + let _span = tracy_client::span!("draw_opaque_regions"); + + let mut i = 0; + while i < elements.len() { + let elem = &elements[i]; + i += 1; + + // HACK + if format!("{elem:?}").contains("ExtraDamage") { + continue; + } + + let geo = elem.geometry(scale); + let mut opaque = elem.opaque_regions(scale); + + for rect in &mut opaque { + rect.loc += geo.loc; + } + + let semitransparent = geo.subtract_rects(opaque.iter().copied()); + + for rect in opaque { + let color = SolidColorRenderElement::new( + Id::new(), + rect, + CommitCounter::default(), + [0., 0., 0.2, 0.2], + Kind::Unspecified, + ); + elements.insert(i - 1, OutputRenderElements::SolidColor(color)); + i += 1; + } + + for rect in semitransparent { + let color = SolidColorRenderElement::new( + Id::new(), + rect, + CommitCounter::default(), + [0.3, 0., 0., 0.3], + Kind::Unspecified, + ); + elements.insert(i - 1, OutputRenderElements::SolidColor(color)); + i += 1; + } + } +} |
