aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/debug.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-05-02 17:52:06 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-02 17:52:06 +0400
commitc6d64dae7aae12379d25b2e90630d19aeef5444b (patch)
tree2df6f7ad0d298838f0549ff54746f22837de3304 /src/render_helpers/debug.rs
parent5dddc850fcae23289d40623b6c060b88233bf57f (diff)
downloadniri-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.rs58
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;
+ }
+ }
+}