element: Refactor element acquisition to be push based
This commit is contained in:
parent
178c6593dc
commit
e4c0716951
18 changed files with 1096 additions and 1137 deletions
|
|
@ -35,7 +35,7 @@ use smithay::{
|
|||
renderer::{
|
||||
ImportMem, Renderer,
|
||||
element::{
|
||||
AsRenderElements, Kind,
|
||||
Kind,
|
||||
memory::{MemoryRenderBuffer, MemoryRenderBufferRenderElement},
|
||||
},
|
||||
},
|
||||
|
|
@ -910,21 +910,18 @@ impl<P: Program + Send + 'static> SpaceElement for IcedElement<P> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<P, R> AsRenderElements<R> for IcedElement<P>
|
||||
where
|
||||
P: Program + Send + 'static,
|
||||
R: Renderer + ImportMem,
|
||||
R::TextureId: Send + Clone + 'static,
|
||||
{
|
||||
type RenderElement = MemoryRenderBufferRenderElement<R>;
|
||||
|
||||
fn render_elements<C: From<Self::RenderElement>>(
|
||||
impl<P: Program + Send + 'static> IcedElement<P> {
|
||||
pub fn push_render_elements<R>(
|
||||
&self,
|
||||
renderer: &mut R,
|
||||
location: Point<i32, Physical>,
|
||||
mut scale: Scale<f64>,
|
||||
alpha: f32,
|
||||
) -> Vec<C> {
|
||||
push: &mut dyn FnMut(MemoryRenderBufferRenderElement<R>),
|
||||
) where
|
||||
R: Renderer + ImportMem,
|
||||
R::TextureId: Send + Clone + 'static,
|
||||
{
|
||||
let mut internal = self.0.lock().unwrap();
|
||||
// makes partial borrows easier
|
||||
let internal_ref = &mut *internal;
|
||||
|
|
@ -1055,11 +1052,10 @@ where
|
|||
Kind::Unspecified,
|
||||
) {
|
||||
Ok(buffer) => {
|
||||
return vec![C::from(buffer)];
|
||||
push(buffer);
|
||||
}
|
||||
Err(err) => tracing::warn!("What? {:?}", err),
|
||||
}
|
||||
}
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ use smithay::{
|
|||
use tracing::warn;
|
||||
|
||||
use crate::{
|
||||
backend::render::{RendererRef, element::AsGlowRenderer, wayland::SurfaceRenderElement},
|
||||
backend::render::{RendererRef, element::AsGlowRenderer},
|
||||
shell::element::CosmicSurface,
|
||||
state::{State, advertised_node_for_surface},
|
||||
};
|
||||
|
|
@ -27,7 +27,8 @@ pub fn screenshot_window(state: &mut State, surface: &CosmicSurface) {
|
|||
R::Error: Send + Sync + 'static,
|
||||
{
|
||||
let bbox = bbox_from_surface_tree(&window.wl_surface().unwrap(), (0, 0));
|
||||
let elements = window.render_elements::<R, SurfaceRenderElement<R>>(
|
||||
let mut elements = Vec::new();
|
||||
window.push_render_elements(
|
||||
renderer,
|
||||
(-bbox.loc.x, -bbox.loc.y).into(),
|
||||
Scale::from(1.0),
|
||||
|
|
@ -36,6 +37,8 @@ pub fn screenshot_window(state: &mut State, surface: &CosmicSurface) {
|
|||
None,
|
||||
false,
|
||||
[0; 4],
|
||||
&mut |elem| elements.push(elem),
|
||||
None,
|
||||
);
|
||||
|
||||
// TODO: 10-bit
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue