aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-08-10 09:57:13 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-08-10 14:50:51 +0400
commit746840a11913222052081210dc99c2082100da4c (patch)
tree5b96eaf8424c3391e7258178777206a7374accd4 /src
parent9a5f8910021a7c3f0a54d907044be8ad0d47a199 (diff)
downloadniri-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.rs7
-rw-r--r--src/niri.rs35
-rw-r--r--src/tty.rs7
-rw-r--r--src/winit.rs7
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,
diff --git a/src/tty.rs b/src/tty.rs
index b2a7e61a..b286bd36 100644
--- a/src/tty.rs
+++ b/src/tty.rs
@@ -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);