mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-24 02:01:18 +07:00
Make debug_draw_opaque_regions work in screencasts again
This commit is contained in:
+10
-7
@@ -148,7 +148,7 @@ use crate::protocols::mutter_x11_interop::MutterX11InteropManagerState;
|
|||||||
use crate::protocols::output_management::OutputManagementManagerState;
|
use crate::protocols::output_management::OutputManagementManagerState;
|
||||||
use crate::protocols::screencopy::{Screencopy, ScreencopyBuffer, ScreencopyManagerState};
|
use crate::protocols::screencopy::{Screencopy, ScreencopyBuffer, ScreencopyManagerState};
|
||||||
use crate::protocols::virtual_pointer::VirtualPointerManagerState;
|
use crate::protocols::virtual_pointer::VirtualPointerManagerState;
|
||||||
use crate::render_helpers::debug::draw_opaque_regions;
|
use crate::render_helpers::debug::push_opaque_regions;
|
||||||
use crate::render_helpers::primary_gpu_texture::PrimaryGpuTextureRenderElement;
|
use crate::render_helpers::primary_gpu_texture::PrimaryGpuTextureRenderElement;
|
||||||
use crate::render_helpers::renderer::NiriRenderer;
|
use crate::render_helpers::renderer::NiriRenderer;
|
||||||
use crate::render_helpers::solid_color::{SolidColorBuffer, SolidColorRenderElement};
|
use crate::render_helpers::solid_color::{SolidColorBuffer, SolidColorRenderElement};
|
||||||
@@ -4036,12 +4036,6 @@ impl Niri {
|
|||||||
self.render_inner(renderer, output, include_pointer, target, &mut |elem| {
|
self.render_inner(renderer, output, include_pointer, target, &mut |elem| {
|
||||||
elements.push(elem)
|
elements.push(elem)
|
||||||
});
|
});
|
||||||
|
|
||||||
if self.debug_draw_opaque_regions {
|
|
||||||
let output_scale = Scale::from(output.current_scale().fractional_scale());
|
|
||||||
draw_opaque_regions(&mut elements, output_scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
elements
|
elements
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4066,6 +4060,15 @@ impl Niri {
|
|||||||
|
|
||||||
let output_scale = Scale::from(output.current_scale().fractional_scale());
|
let output_scale = Scale::from(output.current_scale().fractional_scale());
|
||||||
|
|
||||||
|
let push = if self.debug_draw_opaque_regions {
|
||||||
|
&mut move |elem| {
|
||||||
|
push_opaque_regions(&elem, output_scale, push);
|
||||||
|
push(elem);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
push
|
||||||
|
};
|
||||||
|
|
||||||
// The pointer goes on the top.
|
// The pointer goes on the top.
|
||||||
if include_pointer && self.pointer_visibility.is_visible() {
|
if include_pointer && self.pointer_visibility.is_visible() {
|
||||||
self.render_pointer(renderer, output, &mut |elem| push(elem.into()));
|
self.render_pointer(renderer, output, &mut |elem| push(elem.into()));
|
||||||
|
|||||||
@@ -8,20 +8,14 @@ use super::renderer::NiriRenderer;
|
|||||||
use super::solid_color::SolidColorRenderElement;
|
use super::solid_color::SolidColorRenderElement;
|
||||||
use crate::niri::OutputRenderElements;
|
use crate::niri::OutputRenderElements;
|
||||||
|
|
||||||
pub fn draw_opaque_regions<R: NiriRenderer>(
|
pub fn push_opaque_regions<R: NiriRenderer>(
|
||||||
elements: &mut Vec<OutputRenderElements<R>>,
|
elem: &OutputRenderElements<R>,
|
||||||
scale: Scale<f64>,
|
scale: Scale<f64>,
|
||||||
|
push: &mut dyn FnMut(OutputRenderElements<R>),
|
||||||
) {
|
) {
|
||||||
let _span = tracy_client::span!("draw_opaque_regions");
|
|
||||||
|
|
||||||
let mut i = 0;
|
|
||||||
while i < elements.len() {
|
|
||||||
let elem = &elements[i];
|
|
||||||
i += 1;
|
|
||||||
|
|
||||||
// HACK
|
// HACK
|
||||||
if format!("{elem:?}").contains("ExtraDamage") {
|
if format!("{elem:?}").contains("ExtraDamage") {
|
||||||
continue;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let geo = elem.geometry(scale);
|
let geo = elem.geometry(scale);
|
||||||
@@ -41,8 +35,7 @@ pub fn draw_opaque_regions<R: NiriRenderer>(
|
|||||||
Color32F::from([0., 0., 0.2, 0.2]),
|
Color32F::from([0., 0., 0.2, 0.2]),
|
||||||
Kind::Unspecified,
|
Kind::Unspecified,
|
||||||
);
|
);
|
||||||
elements.insert(i - 1, OutputRenderElements::SolidColor(color));
|
push(color.into());
|
||||||
i += 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for rect in semitransparent {
|
for rect in semitransparent {
|
||||||
@@ -53,9 +46,7 @@ pub fn draw_opaque_regions<R: NiriRenderer>(
|
|||||||
Color32F::from([0.3, 0., 0., 0.3]),
|
Color32F::from([0.3, 0., 0., 0.3]),
|
||||||
Kind::Unspecified,
|
Kind::Unspecified,
|
||||||
);
|
);
|
||||||
elements.insert(i - 1, OutputRenderElements::SolidColor(color));
|
push(color.into());
|
||||||
i += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user