Commit wl_surface, receive and ack configure on layer_surface
This commit is contained in:
@@ -31,10 +31,37 @@ impl WlClient {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn layer_surface_configure(&mut self, event: &Vec<u8>) -> Result<(), Box<dyn Error>> {
|
||||||
|
let mut offset: usize = 0;
|
||||||
|
let serial = event.read_u32(&mut offset);
|
||||||
|
let width = event.read_u32(&mut offset);
|
||||||
|
let height = event.read_u32(&mut offset);
|
||||||
|
|
||||||
|
// TODO: Resize based on configure
|
||||||
|
|
||||||
|
// Ack configure
|
||||||
|
let object = self.layer_surface_id.unwrap();
|
||||||
|
const OPCODE: u16 = 6;
|
||||||
|
const MSG_SIZE: u16 = 12;
|
||||||
|
|
||||||
|
let mut request = vec![0u8; MSG_SIZE as usize];
|
||||||
|
offset = 0;
|
||||||
|
|
||||||
|
request.write_u32(&object, &mut offset);
|
||||||
|
request.write_u16(&OPCODE, &mut offset);
|
||||||
|
request.write_u16(&MSG_SIZE, &mut offset);
|
||||||
|
|
||||||
|
request.write_u32(&serial, &mut offset);
|
||||||
|
|
||||||
|
self.socket.write(&request)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn layer_surface_set_size(&mut self, width: u32, height: u32) -> Result<(), Box<dyn Error>> {
|
pub fn layer_surface_set_size(&mut self, width: u32, height: u32) -> Result<(), Box<dyn Error>> {
|
||||||
let object: u32 = self.layer_surface_id.unwrap();
|
let object: u32 = self.layer_surface_id.unwrap();
|
||||||
const OPCODE: u16 = 0;
|
const OPCODE: u16 = 0;
|
||||||
const MSG_SIZE: u16 = 16;
|
const MSG_SIZE: u16 = 20;
|
||||||
|
|
||||||
let mut request = vec![0u8; MSG_SIZE as usize];
|
let mut request = vec![0u8; MSG_SIZE as usize];
|
||||||
let mut offset: usize = 0;
|
let mut offset: usize = 0;
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ impl WlClient {
|
|||||||
let object = self.surface_id.unwrap();
|
let object = self.surface_id.unwrap();
|
||||||
const OPCODE: u16 = 1;
|
const OPCODE: u16 = 1;
|
||||||
const MSG_SIZE: u16 = 20;
|
const MSG_SIZE: u16 = 20;
|
||||||
|
let buffer = self.buffer_id.unwrap();
|
||||||
const X: u32 = 0;
|
const X: u32 = 0;
|
||||||
const Y: u32 = 0;
|
const Y: u32 = 0;
|
||||||
|
|
||||||
@@ -57,6 +58,7 @@ impl WlClient {
|
|||||||
request.write_u32(&object, &mut offset);
|
request.write_u32(&object, &mut offset);
|
||||||
request.write_u16(&OPCODE, &mut offset);
|
request.write_u16(&OPCODE, &mut offset);
|
||||||
request.write_u16(&MSG_SIZE, &mut offset);
|
request.write_u16(&MSG_SIZE, &mut offset);
|
||||||
|
request.write_u32(&buffer, &mut offset);
|
||||||
request.write_u32(&X, &mut offset);
|
request.write_u32(&X, &mut offset);
|
||||||
request.write_u32(&Y, &mut offset);
|
request.write_u32(&Y, &mut offset);
|
||||||
|
|
||||||
@@ -65,6 +67,23 @@ impl WlClient {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn wl_surface_commit(&mut self) -> Result<(), Box<dyn Error>> {
|
||||||
|
let object = self.surface_id.unwrap();
|
||||||
|
const OPCODE: u16 = 6;
|
||||||
|
const MSG_SIZE: u16 = 8;
|
||||||
|
|
||||||
|
let mut request = vec![0u8; MSG_SIZE as usize];
|
||||||
|
let mut offset: usize = 0;
|
||||||
|
|
||||||
|
request.write_u32(&object, &mut offset);
|
||||||
|
request.write_u16(&OPCODE, &mut offset);
|
||||||
|
request.write_u16(&MSG_SIZE, &mut offset);
|
||||||
|
|
||||||
|
self.socket.write(&request)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn xdg_wm_base_pong(&mut self, event: &Vec<u8>) -> Result<(), Box<dyn Error>> {
|
pub fn xdg_wm_base_pong(&mut self, event: &Vec<u8>) -> Result<(), Box<dyn Error>> {
|
||||||
if self.xdg_wm_base_id.is_none() {
|
if self.xdg_wm_base_id.is_none() {
|
||||||
return Err(Box::new(UnsetErr("xdg_wm_base_id".to_string())));
|
return Err(Box::new(UnsetErr("xdg_wm_base_id".to_string())));
|
||||||
|
|||||||
@@ -74,6 +74,9 @@ impl WlClient {
|
|||||||
else if self.xdg_wm_base_id.is_some() && header.object == self.xdg_wm_base_id.unwrap() && header.opcode == 0 { // xdg_wm_base::ping
|
else if self.xdg_wm_base_id.is_some() && header.object == self.xdg_wm_base_id.unwrap() && header.opcode == 0 { // xdg_wm_base::ping
|
||||||
self.xdg_wm_base_pong(&event)?;
|
self.xdg_wm_base_pong(&event)?;
|
||||||
}
|
}
|
||||||
|
else if Some(header.object) == self.layer_surface_id && header.opcode == 0 { // zwlr_layer_surface::configure
|
||||||
|
self.layer_surface_configure(&event)?;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
println!(
|
println!(
|
||||||
"Received event:\n\tObject: {}\n\tOpcode: {}\n\tSize: {}",
|
"Received event:\n\tObject: {}\n\tOpcode: {}\n\tSize: {}",
|
||||||
|
|||||||
@@ -18,11 +18,15 @@ impl WlClient {
|
|||||||
println!("Initializing toplevel!");
|
println!("Initializing toplevel!");
|
||||||
self.wl_compositor_create_surface()?;
|
self.wl_compositor_create_surface()?;
|
||||||
self.layer_shell_get_layer_surface()?;
|
self.layer_shell_get_layer_surface()?;
|
||||||
|
|
||||||
self.layer_surface_set_size(200, 200)?;
|
self.layer_surface_set_size(200, 200)?;
|
||||||
|
self.layer_surface_set_keyboard_interactivity()?;
|
||||||
|
self.wl_surface_commit()?;
|
||||||
|
|
||||||
self.wl_shm_create_pool()?;
|
self.wl_shm_create_pool()?;
|
||||||
self.wl_shm_pool_create_buffer(0, 200, 200)?;
|
self.wl_shm_pool_create_buffer(0, 200, 200)?;
|
||||||
self.wl_surface_attach()?;
|
self.wl_surface_attach()?;
|
||||||
self.layer_surface_set_keyboard_interactivity()?;
|
// self.wl_surface_commit()?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user