mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-24 02:01:18 +07:00
Add cursor drawing with a colored rectangle
This commit is contained in:
+5
-2
@@ -1,7 +1,7 @@
|
|||||||
use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement;
|
use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement;
|
||||||
use smithay::backend::renderer::gles::GlesRenderer;
|
use smithay::backend::renderer::gles::GlesRenderer;
|
||||||
use smithay::desktop::space::SpaceRenderElements;
|
|
||||||
|
|
||||||
|
use crate::niri::OutputRenderElements;
|
||||||
use crate::Niri;
|
use crate::Niri;
|
||||||
|
|
||||||
pub trait Backend {
|
pub trait Backend {
|
||||||
@@ -10,6 +10,9 @@ pub trait Backend {
|
|||||||
fn render(
|
fn render(
|
||||||
&mut self,
|
&mut self,
|
||||||
niri: &mut Niri,
|
niri: &mut Niri,
|
||||||
elements: &[SpaceRenderElements<GlesRenderer, WaylandSurfaceRenderElement<GlesRenderer>>],
|
elements: &[OutputRenderElements<
|
||||||
|
GlesRenderer,
|
||||||
|
WaylandSurfaceRenderElement<GlesRenderer>,
|
||||||
|
>],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+34
-1
@@ -2,7 +2,11 @@ use std::os::unix::io::AsRawFd;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
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::desktop::{Space, Window, WindowSurfaceType};
|
||||||
use smithay::input::keyboard::XkbConfig;
|
use smithay::input::keyboard::XkbConfig;
|
||||||
use smithay::input::{Seat, SeatState};
|
use smithay::input::{Seat, SeatState};
|
||||||
@@ -139,6 +143,29 @@ impl Niri {
|
|||||||
1.,
|
1.,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.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);
|
backend.render(self, &elements);
|
||||||
|
|
||||||
let output = self.output.as_ref().unwrap();
|
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)]
|
#[derive(Default)]
|
||||||
pub struct ClientState {
|
pub struct ClientState {
|
||||||
pub compositor_state: CompositorClientState,
|
pub compositor_state: CompositorClientState,
|
||||||
|
|||||||
+5
-2
@@ -16,7 +16,6 @@ use smithay::backend::renderer::{Bind, ImportEgl};
|
|||||||
use smithay::backend::session::libseat::LibSeatSession;
|
use smithay::backend::session::libseat::LibSeatSession;
|
||||||
use smithay::backend::session::{Event as SessionEvent, Session};
|
use smithay::backend::session::{Event as SessionEvent, Session};
|
||||||
use smithay::backend::udev::{self, UdevBackend, UdevEvent};
|
use smithay::backend::udev::{self, UdevBackend, UdevEvent};
|
||||||
use smithay::desktop::space::SpaceRenderElements;
|
|
||||||
use smithay::output::{Mode, Output, OutputModeSource, PhysicalProperties, Subpixel};
|
use smithay::output::{Mode, Output, OutputModeSource, PhysicalProperties, Subpixel};
|
||||||
use smithay::reexports::calloop::timer::{TimeoutAction, Timer};
|
use smithay::reexports::calloop::timer::{TimeoutAction, Timer};
|
||||||
use smithay::reexports::calloop::{LoopHandle, RegistrationToken};
|
use smithay::reexports::calloop::{LoopHandle, RegistrationToken};
|
||||||
@@ -31,6 +30,7 @@ use smithay::utils::DeviceFd;
|
|||||||
use smithay_drm_extras::edid::EdidInfo;
|
use smithay_drm_extras::edid::EdidInfo;
|
||||||
|
|
||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
|
use crate::niri::OutputRenderElements;
|
||||||
use crate::{LoopData, Niri};
|
use crate::{LoopData, Niri};
|
||||||
|
|
||||||
const BACKGROUND_COLOR: [f32; 4] = [0.1, 0.1, 0.1, 1.];
|
const BACKGROUND_COLOR: [f32; 4] = [0.1, 0.1, 0.1, 1.];
|
||||||
@@ -66,7 +66,10 @@ impl Backend for Tty {
|
|||||||
fn render(
|
fn render(
|
||||||
&mut self,
|
&mut self,
|
||||||
niri: &mut Niri,
|
niri: &mut Niri,
|
||||||
elements: &[SpaceRenderElements<GlesRenderer, WaylandSurfaceRenderElement<GlesRenderer>>],
|
elements: &[OutputRenderElements<
|
||||||
|
GlesRenderer,
|
||||||
|
WaylandSurfaceRenderElement<GlesRenderer>,
|
||||||
|
>],
|
||||||
) {
|
) {
|
||||||
let output_device = self.output_device.as_mut().unwrap();
|
let output_device = self.output_device.as_mut().unwrap();
|
||||||
let drm_compositor = &mut output_device.drm_compositor;
|
let drm_compositor = &mut output_device.drm_compositor;
|
||||||
|
|||||||
+5
-2
@@ -4,13 +4,13 @@ use smithay::backend::renderer::damage::OutputDamageTracker;
|
|||||||
use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement;
|
use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement;
|
||||||
use smithay::backend::renderer::gles::GlesRenderer;
|
use smithay::backend::renderer::gles::GlesRenderer;
|
||||||
use smithay::backend::winit::{self, WinitError, WinitEvent, WinitEventLoop, WinitGraphicsBackend};
|
use smithay::backend::winit::{self, WinitError, WinitEvent, WinitEventLoop, WinitGraphicsBackend};
|
||||||
use smithay::desktop::space::SpaceRenderElements;
|
|
||||||
use smithay::output::{Mode, Output, PhysicalProperties, Subpixel};
|
use smithay::output::{Mode, Output, PhysicalProperties, Subpixel};
|
||||||
use smithay::reexports::calloop::timer::{TimeoutAction, Timer};
|
use smithay::reexports::calloop::timer::{TimeoutAction, Timer};
|
||||||
use smithay::reexports::calloop::LoopHandle;
|
use smithay::reexports::calloop::LoopHandle;
|
||||||
use smithay::utils::{Rectangle, Transform};
|
use smithay::utils::{Rectangle, Transform};
|
||||||
|
|
||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
|
use crate::niri::OutputRenderElements;
|
||||||
use crate::{LoopData, Niri};
|
use crate::{LoopData, Niri};
|
||||||
|
|
||||||
pub struct Winit {
|
pub struct Winit {
|
||||||
@@ -32,7 +32,10 @@ impl Backend for Winit {
|
|||||||
fn render(
|
fn render(
|
||||||
&mut self,
|
&mut self,
|
||||||
_niri: &mut Niri,
|
_niri: &mut Niri,
|
||||||
elements: &[SpaceRenderElements<GlesRenderer, WaylandSurfaceRenderElement<GlesRenderer>>],
|
elements: &[OutputRenderElements<
|
||||||
|
GlesRenderer,
|
||||||
|
WaylandSurfaceRenderElement<GlesRenderer>,
|
||||||
|
>],
|
||||||
) {
|
) {
|
||||||
let size = self.backend.window_size().physical_size;
|
let size = self.backend.window_size().physical_size;
|
||||||
let damage = Rectangle::from_loc_and_size((0, 0), size);
|
let damage = Rectangle::from_loc_and_size((0, 0), size);
|
||||||
|
|||||||
Reference in New Issue
Block a user