mirror of
				https://github.com/lelgenio/wl-crosshair.git
				synced 2025-10-31 16:19:41 -03:00 
			
		
		
		
	Compare commits
	
		
			4 commits
		
	
	
		
			57d0908e10
			...
			081f6bed69
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 081f6bed69 | |||
| effbf9ebc8 | |||
| 2f8e211f25 | |||
|  | 1f13ba2b94 | 
					 3 changed files with 23 additions and 36 deletions
				
			
		|  | @ -8,5 +8,9 @@ Currently has no support for command line arguments or any customization. | |||
| ### Preview: | ||||
|  | ||||
| 
 | ||||
| ### Why is it flickering when I put my cursor over it? | ||||
| In wayland, windows cannot be "click-through", so in order to still send events we "close" the window when you hover it and show it in the next frame. | ||||
| ## TODO | ||||
| - [x] Make the crosshair Click-through https://github.com/lelgenio/wl-crosshair/pull/1 | ||||
| - [ ] Option to control size of crosshair | ||||
| - [ ] Option to offset crosshair | ||||
| - [ ] Configuratin file | ||||
| - [ ] Support for loading custom crosshair images | ||||
|  |  | |||
							
								
								
									
										12
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										12
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -5,11 +5,11 @@ | |||
|         "systems": "systems" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1681202837, | ||||
|         "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", | ||||
|         "lastModified": 1710146030, | ||||
|         "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "rev": "cfacdce06f30d2b68473a46042957675eebb3401", | ||||
|         "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -20,11 +20,11 @@ | |||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1684242266, | ||||
|         "narHash": "sha256-uaCQ2k1bmojHKjWQngvnnnxQJMY8zi1zq527HdWgQf8=", | ||||
|         "lastModified": 1714091391, | ||||
|         "narHash": "sha256-68n3GBvlm1MIeJXadPzQ3v8Y9sIW3zmv8gI5w5sliC8=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "7e0743a5aea1dc755d4b761daf75b20aa486fdad", | ||||
|         "rev": "4c86138ce486d601d956a165e2f7a0fc029a03c1", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  |  | |||
							
								
								
									
										39
									
								
								src/main.rs
									
										
									
									
									
								
							
							
						
						
									
										39
									
								
								src/main.rs
									
										
									
									
									
								
							|  | @ -2,8 +2,7 @@ use std::{fs::File, io::Write, os::unix::prelude::AsRawFd}; | |||
| 
 | ||||
| use wayland_client::{ | ||||
|     protocol::{ | ||||
|         wl_buffer, wl_compositor, wl_keyboard, wl_pointer, wl_registry, wl_seat, wl_shm, | ||||
|         wl_shm_pool, wl_surface, | ||||
|         wl_buffer, wl_compositor, wl_keyboard, wl_region::WlRegion, wl_registry, wl_seat, wl_shm, wl_shm_pool, wl_surface | ||||
|     }, | ||||
|     Connection, Dispatch, Proxy, QueueHandle, | ||||
| }; | ||||
|  | @ -26,7 +25,6 @@ struct State { | |||
|     layer_surface: Option<zwlr_layer_surface_v1::ZwlrLayerSurfaceV1>, | ||||
|     buffer: Option<wl_buffer::WlBuffer>, | ||||
|     wm_base: Option<xdg_wm_base::XdgWmBase>, | ||||
|     pointer: Option<wl_pointer::WlPointer>, | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
|  | @ -47,7 +45,6 @@ fn main() { | |||
|         layer_surface: None, | ||||
|         buffer: None, | ||||
|         wm_base: None, | ||||
|         pointer: None, | ||||
|     }; | ||||
| 
 | ||||
|     event_queue.blocking_dispatch(&mut state).unwrap(); | ||||
|  | @ -109,9 +106,6 @@ impl Dispatch<wl_registry::WlRegistry, ()> for State { | |||
|                     (), | ||||
|                 ); | ||||
|                 state.buffer = Some(buffer); | ||||
|             } else if interface == wl_seat::WlSeat::interface().name { | ||||
|                 let seat = registry.bind::<wl_seat::WlSeat, _, _>(name, version, qh, ()); | ||||
|                 state.pointer = Some(seat.get_pointer(qh, ())); | ||||
|             } else if interface == xdg_wm_base::XdgWmBase::interface().name { | ||||
|                 let wm_base = registry.bind::<xdg_wm_base::XdgWmBase, _, _>(name, 1, qh, ()); | ||||
|                 state.wm_base = Some(wm_base); | ||||
|  | @ -120,31 +114,15 @@ impl Dispatch<wl_registry::WlRegistry, ()> for State { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Dispatch<wl_pointer::WlPointer, ()> for State { | ||||
| impl Dispatch<WlRegion, ()> for State { | ||||
|     fn event( | ||||
|         state: &mut Self, | ||||
|         _: &wl_pointer::WlPointer, | ||||
|         event: wl_pointer::Event, | ||||
|         _: &mut Self, | ||||
|         _: &WlRegion, | ||||
|         _: <WlRegion as Proxy>::Event, | ||||
|         _: &(), | ||||
|         _: &Connection, | ||||
|         qh: &QueueHandle<Self>, | ||||
|         _: &QueueHandle<Self>, | ||||
|     ) { | ||||
|         eprintln!("WlPointer event {event:#?}"); | ||||
|         match event { | ||||
|             wl_pointer::Event::Enter { .. } => { | ||||
|                 if let Some(surface) = &state.base_surface { | ||||
|                     surface.destroy(); | ||||
|                 } | ||||
|                 state.base_surface = None; | ||||
|             } | ||||
|             wl_pointer::Event::Leave { .. } => { | ||||
|                 let surface = state.compositor.as_ref().unwrap().create_surface(qh, ()); | ||||
|                 state.base_surface = Some(surface); | ||||
| 
 | ||||
|                 state.init_layer_surface(qh); | ||||
|             } | ||||
|             _ => {} | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -197,6 +175,11 @@ impl State { | |||
|         // A negative value means we will be centered on the screen
 | ||||
|         // independently of any other xdg_layer_shell
 | ||||
|         layer.set_exclusive_zone(-1); | ||||
|         // Set empty input region to allow clicking through the window.
 | ||||
|         if let Some(compositor) = &self.compositor { | ||||
|             let region = compositor.create_region(qh, ()); | ||||
|             self.base_surface.as_ref().unwrap().set_input_region(Some(®ion)); | ||||
|         } | ||||
|         self.base_surface.as_ref().unwrap().commit(); | ||||
| 
 | ||||
|         self.layer_surface = Some(layer); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue