aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-08-22 07:58:37 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-08-22 08:51:33 +0300
commit7aba44a0199f5cb9f9bd1cc5bc66b6b0e752aa1e (patch)
treedb897805cdd6494eadca9f3b25530b9ac465b0bc /src/ui
parentd662811bf6d004382061380f537ffdeb0bffe892 (diff)
downloadniri-7aba44a0199f5cb9f9bd1cc5bc66b6b0e752aa1e.tar.gz
niri-7aba44a0199f5cb9f9bd1cc5bc66b6b0e752aa1e.tar.bz2
niri-7aba44a0199f5cb9f9bd1cc5bc66b6b0e752aa1e.zip
exit_confirm_dialog: Return ArrayVec and add render elements
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/exit_confirm_dialog.rs27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/ui/exit_confirm_dialog.rs b/src/ui/exit_confirm_dialog.rs
index 11c9a9e2..d9e93ae8 100644
--- a/src/ui/exit_confirm_dialog.rs
+++ b/src/ui/exit_confirm_dialog.rs
@@ -1,6 +1,7 @@
use std::cell::RefCell;
use std::collections::HashMap;
+use arrayvec::ArrayVec;
use ordered_float::NotNan;
use pangocairo::cairo::{self, ImageSurface};
use pangocairo::pango::{Alignment, FontDescription};
@@ -9,6 +10,7 @@ use smithay::output::Output;
use smithay::reexports::gbm::Format as Fourcc;
use smithay::utils::Transform;
+use crate::niri_render_elements;
use crate::render_helpers::memory::MemoryBuffer;
use crate::render_helpers::primary_gpu_texture::PrimaryGpuTextureRenderElement;
use crate::render_helpers::renderer::NiriRenderer;
@@ -26,6 +28,12 @@ pub struct ExitConfirmDialog {
buffers: RefCell<HashMap<NotNan<f64>, Option<MemoryBuffer>>>,
}
+niri_render_elements! {
+ ExitConfirmDialogRenderElement => {
+ Texture = PrimaryGpuTextureRenderElement,
+ }
+}
+
impl ExitConfirmDialog {
pub fn new() -> Self {
let buffer = match render(1.) {
@@ -74,9 +82,11 @@ impl ExitConfirmDialog {
&self,
renderer: &mut R,
output: &Output,
- ) -> Option<PrimaryGpuTextureRenderElement> {
+ ) -> ArrayVec<ExitConfirmDialogRenderElement, 1> {
+ let mut rv = ArrayVec::new();
+
if !self.is_open {
- return None;
+ return rv;
}
let scale = output.current_scale().fractional_scale();
@@ -85,7 +95,7 @@ impl ExitConfirmDialog {
let mut buffers = self.buffers.borrow_mut();
let Some(fallback) = buffers[&NotNan::new(1.).unwrap()].clone() else {
error!("exit confirm dialog opened without fallback buffer");
- return None;
+ return rv;
};
let buffer = buffers
@@ -94,7 +104,10 @@ impl ExitConfirmDialog {
let buffer = buffer.as_ref().unwrap_or(&fallback);
let size = buffer.logical_size();
- let buffer = TextureBuffer::from_memory_buffer(renderer.as_gles_renderer(), buffer).ok()?;
+ let Ok(buffer) = TextureBuffer::from_memory_buffer(renderer.as_gles_renderer(), buffer)
+ else {
+ return rv;
+ };
let location = (output_size.to_f64().to_point() - size.to_point()).downscale(2.);
let mut location = location.to_physical_precise_round(scale).to_logical(scale);
@@ -109,7 +122,11 @@ impl ExitConfirmDialog {
None,
Kind::Unspecified,
);
- Some(PrimaryGpuTextureRenderElement(elem))
+ rv.push(ExitConfirmDialogRenderElement::Texture(
+ PrimaryGpuTextureRenderElement(elem),
+ ));
+
+ rv
}
}