1
0
Fork 0
forked from wry/wry

wayland: implement wl_surface v6

This commit is contained in:
Julian Orth 2024-02-06 10:36:55 +01:00
parent 0bd61bc242
commit bf1bb58c5b
3 changed files with 23 additions and 6 deletions

View file

@ -80,7 +80,7 @@ impl Global for WlCompositorGlobal {
} }
fn version(&self) -> u32 { fn version(&self) -> u32 {
5 6
} }
} }

View file

@ -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 {

View file

@ -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,
}