From 9309b3be61bb1e7d4ef3f9350b2646413850119b Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Wed, 1 May 2024 19:02:22 +0400 Subject: Split rendering between popups and window surface --- src/render_helpers/mod.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/render_helpers') diff --git a/src/render_helpers/mod.rs b/src/render_helpers/mod.rs index 0be48bc6..16abe1ae 100644 --- a/src/render_helpers/mod.rs +++ b/src/render_helpers/mod.rs @@ -49,6 +49,13 @@ pub struct BakedBuffer { pub dst: Option>, } +/// Render elements split into normal and popup. +#[derive(Debug)] +pub struct SplitElements { + pub normal: Vec, + pub popups: Vec, +} + pub trait ToRenderElement { type RenderElement; @@ -61,6 +68,36 @@ pub trait ToRenderElement { ) -> Self::RenderElement; } +impl Default for SplitElements { + fn default() -> Self { + Self { + normal: Vec::new(), + popups: Vec::new(), + } + } +} + +impl IntoIterator for SplitElements { + type Item = E; + type IntoIter = std::iter::Chain, std::vec::IntoIter>; + + fn into_iter(self) -> Self::IntoIter { + self.popups.into_iter().chain(self.normal) + } +} + +impl SplitElements { + pub fn iter(&self) -> std::iter::Chain, std::slice::Iter> { + self.popups.iter().chain(&self.normal) + } + + pub fn into_vec(self) -> Vec { + let Self { normal, mut popups } = self; + popups.extend(normal); + popups + } +} + impl ToRenderElement for BakedBuffer> { type RenderElement = PrimaryGpuTextureRenderElement; -- cgit