diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-08-10 09:57:13 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-08-10 14:50:51 +0400 |
| commit | 746840a11913222052081210dc99c2082100da4c (patch) | |
| tree | 5b96eaf8424c3391e7258178777206a7374accd4 /src | |
| parent | 9a5f8910021a7c3f0a54d907044be8ad0d47a199 (diff) | |
| download | niri-746840a11913222052081210dc99c2082100da4c.tar.gz niri-746840a11913222052081210dc99c2082100da4c.tar.bz2 niri-746840a11913222052081210dc99c2082100da4c.zip | |
Add cursor drawing with a colored rectangle
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend.rs | 7 | ||||
| -rw-r--r-- | src/niri.rs | 35 | ||||
| -rw-r--r-- | src/tty.rs | 7 | ||||
| -rw-r--r-- | src/winit.rs | 7 |
4 files changed, 49 insertions, 7 deletions
diff --git a/src/backend.rs b/src/backend.rs index e190ed05..7dcc0121 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -1,7 +1,7 @@ use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement; use smithay::backend::renderer::gles::GlesRenderer; -use smithay::desktop::space::SpaceRenderElements; +use crate::niri::OutputRenderElements; use crate::Niri; pub trait Backend { @@ -10,6 +10,9 @@ pub trait Backend { fn render( &mut self, niri: &mut Niri, - elements: &[SpaceRenderElements<GlesRenderer, WaylandSurfaceRenderElement<GlesRenderer>>], + elements: &[OutputRenderElements< + GlesRenderer, + WaylandSurfaceRenderElement<GlesRenderer>, + >], ); } diff --git a/src/niri.rs b/src/niri.rs index 6318fd95..8a0d0f03 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -2,7 +2,11 @@ use std::os::unix::io::AsRawFd; use std::sync::Arc; use std::time::Duration; -use smithay::desktop::space::space_render_elements; +use smithay::backend::renderer::element::render_elements; +use smithay::backend::renderer::element::solid::SolidColorRenderElement; +use smithay::backend::renderer::utils::CommitCounter; +use smithay::backend::renderer::ImportAll; +use smithay::desktop::space::{space_render_elements, SpaceRenderElements}; use smithay::desktop::{Space, Window, WindowSurfaceType}; use smithay::input::keyboard::XkbConfig; use smithay::input::{Seat, SeatState}; @@ -139,6 +143,29 @@ impl Niri { 1., ) .unwrap(); + + let mut elements: Vec<_> = elements + .into_iter() + .map(OutputRenderElements::from) + .collect(); + elements.insert( + 0, + OutputRenderElements::Pointer(SolidColorRenderElement::new( + smithay::backend::renderer::element::Id::new(), + smithay::utils::Rectangle { + loc: self + .seat + .get_pointer() + .unwrap() + .current_location() + .to_physical_precise_round(1.), + size: (16, 16).into(), + }, + CommitCounter::default(), + [1., 0.5, 0., 1.], + )), + ); + backend.render(self, &elements); let output = self.output.as_ref().unwrap(); @@ -155,6 +182,12 @@ impl Niri { } } +render_elements! { + pub OutputRenderElements<R, E> where R: ImportAll; + Space=SpaceRenderElements<R, E>, + Pointer = SolidColorRenderElement, +} + #[derive(Default)] pub struct ClientState { pub compositor_state: CompositorClientState, @@ -16,7 +16,6 @@ use smithay::backend::renderer::{Bind, ImportEgl}; use smithay::backend::session::libseat::LibSeatSession; use smithay::backend::session::{Event as SessionEvent, Session}; use smithay::backend::udev::{self, UdevBackend, UdevEvent}; -use smithay::desktop::space::SpaceRenderElements; use smithay::output::{Mode, Output, OutputModeSource, PhysicalProperties, Subpixel}; use smithay::reexports::calloop::timer::{TimeoutAction, Timer}; use smithay::reexports::calloop::{LoopHandle, RegistrationToken}; @@ -31,6 +30,7 @@ use smithay::utils::DeviceFd; use smithay_drm_extras::edid::EdidInfo; use crate::backend::Backend; +use crate::niri::OutputRenderElements; use crate::{LoopData, Niri}; const BACKGROUND_COLOR: [f32; 4] = [0.1, 0.1, 0.1, 1.]; @@ -66,7 +66,10 @@ impl Backend for Tty { fn render( &mut self, niri: &mut Niri, - elements: &[SpaceRenderElements<GlesRenderer, WaylandSurfaceRenderElement<GlesRenderer>>], + elements: &[OutputRenderElements< + GlesRenderer, + WaylandSurfaceRenderElement<GlesRenderer>, + >], ) { let output_device = self.output_device.as_mut().unwrap(); let drm_compositor = &mut output_device.drm_compositor; diff --git a/src/winit.rs b/src/winit.rs index b1e9bf65..65ce5b3c 100644 --- a/src/winit.rs +++ b/src/winit.rs @@ -4,13 +4,13 @@ use smithay::backend::renderer::damage::OutputDamageTracker; use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement; use smithay::backend::renderer::gles::GlesRenderer; use smithay::backend::winit::{self, WinitError, WinitEvent, WinitEventLoop, WinitGraphicsBackend}; -use smithay::desktop::space::SpaceRenderElements; use smithay::output::{Mode, Output, PhysicalProperties, Subpixel}; use smithay::reexports::calloop::timer::{TimeoutAction, Timer}; use smithay::reexports::calloop::LoopHandle; use smithay::utils::{Rectangle, Transform}; use crate::backend::Backend; +use crate::niri::OutputRenderElements; use crate::{LoopData, Niri}; pub struct Winit { @@ -32,7 +32,10 @@ impl Backend for Winit { fn render( &mut self, _niri: &mut Niri, - elements: &[SpaceRenderElements<GlesRenderer, WaylandSurfaceRenderElement<GlesRenderer>>], + elements: &[OutputRenderElements< + GlesRenderer, + WaylandSurfaceRenderElement<GlesRenderer>, + >], ) { let size = self.backend.window_size().physical_size; let damage = Rectangle::from_loc_and_size((0, 0), size); |
