wayland: implement wl_surface v6
This commit is contained in:
parent
0bd61bc242
commit
bf1bb58c5b
3 changed files with 23 additions and 6 deletions
|
|
@ -80,7 +80,7 @@ impl Global for WlCompositorGlobal {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn version(&self) -> u32 {
|
fn version(&self) -> u32 {
|
||||||
5
|
6
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ const INVALID_TRANSFORM: u32 = 1;
|
||||||
const INVALID_SIZE: u32 = 2;
|
const INVALID_SIZE: u32 = 2;
|
||||||
|
|
||||||
const OFFSET_SINCE: u32 = 5;
|
const OFFSET_SINCE: u32 = 5;
|
||||||
|
const BUFFER_SCALE_SINCE: u32 = 6;
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||||
enum Transform {
|
enum Transform {
|
||||||
|
|
@ -211,7 +212,7 @@ impl SurfaceRole {
|
||||||
pub struct SurfaceSendPreferredScaleVisitor;
|
pub struct SurfaceSendPreferredScaleVisitor;
|
||||||
impl NodeVisitorBase for SurfaceSendPreferredScaleVisitor {
|
impl NodeVisitorBase for SurfaceSendPreferredScaleVisitor {
|
||||||
fn visit_surface(&mut self, node: &Rc<WlSurface>) {
|
fn visit_surface(&mut self, node: &Rc<WlSurface>) {
|
||||||
node.send_preferred_scale();
|
node.on_scale_change();
|
||||||
node.node_visit_children(self);
|
node.node_visit_children(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -432,9 +433,7 @@ impl WlSurface {
|
||||||
output.global.send_enter(self);
|
output.global.send_enter(self);
|
||||||
old.global.send_leave(self);
|
old.global.send_leave(self);
|
||||||
if old.preferred_scale.get() != output.preferred_scale.get() {
|
if old.preferred_scale.get() != output.preferred_scale.get() {
|
||||||
if let Some(fs) = self.fractional_scale.get() {
|
self.on_scale_change();
|
||||||
fs.send_preferred_scale();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
let children = self.children.borrow_mut();
|
let children = self.children.borrow_mut();
|
||||||
if let Some(children) = &*children {
|
if let Some(children) = &*children {
|
||||||
|
|
@ -444,10 +443,11 @@ impl WlSurface {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_preferred_scale(&self) {
|
fn on_scale_change(&self) {
|
||||||
if let Some(fs) = self.fractional_scale.get() {
|
if let Some(fs) = self.fractional_scale.get() {
|
||||||
fs.send_preferred_scale();
|
fs.send_preferred_scale();
|
||||||
}
|
}
|
||||||
|
self.send_preferred_buffer_scale();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_toplevel(&self) -> Option<Rc<dyn ToplevelNode>> {
|
pub fn get_toplevel(&self) -> Option<Rc<dyn ToplevelNode>> {
|
||||||
|
|
@ -518,6 +518,15 @@ impl WlSurface {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn send_preferred_buffer_scale(&self) {
|
||||||
|
if self.version >= BUFFER_SCALE_SINCE {
|
||||||
|
self.client.event(PreferredBufferScale {
|
||||||
|
self_id: self.id,
|
||||||
|
factor: self.output.get().global.legacy_scale.get() as _,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn set_toplevel(&self, tl: Option<Rc<dyn ToplevelNode>>) {
|
fn set_toplevel(&self, tl: Option<Rc<dyn ToplevelNode>>) {
|
||||||
let ch = self.children.borrow();
|
let ch = self.children.borrow();
|
||||||
if let Some(ch) = &*ch {
|
if let Some(ch) = &*ch {
|
||||||
|
|
|
||||||
|
|
@ -60,3 +60,11 @@ msg enter = 0 {
|
||||||
msg leave = 1 {
|
msg leave = 1 {
|
||||||
output: id(wl_output),
|
output: id(wl_output),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
msg preferred_buffer_scale = 2 {
|
||||||
|
factor: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
msg preferred_buffer_transform = 3 {
|
||||||
|
transform: u32,
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue