mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-23 02:05:33 +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::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>,
|
||||
>],
|
||||
);
|
||||
}
|
||||
|
||||
+34
-1
@@ -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,
|
||||
|
||||
+5
-2
@@ -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;
|
||||
|
||||
+5
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user