all: implement output transforms
This commit is contained in:
parent
79df8d69f4
commit
b7d2964e19
20 changed files with 254 additions and 71 deletions
|
|
@ -81,6 +81,7 @@ const INVALID_SIZE: u32 = 2;
|
|||
|
||||
const OFFSET_SINCE: u32 = 5;
|
||||
const BUFFER_SCALE_SINCE: u32 = 6;
|
||||
const TRANSFORM_SINCE: u32 = 6;
|
||||
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||
pub enum SurfaceRole {
|
||||
|
|
@ -117,6 +118,14 @@ impl NodeVisitorBase for SurfaceSendPreferredScaleVisitor {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct SurfaceSendPreferredTransformVisitor;
|
||||
impl NodeVisitorBase for SurfaceSendPreferredTransformVisitor {
|
||||
fn visit_surface(&mut self, node: &Rc<WlSurface>) {
|
||||
node.send_preferred_buffer_transform();
|
||||
node.node_visit_children(self);
|
||||
}
|
||||
}
|
||||
|
||||
pub struct WlSurface {
|
||||
pub id: WlSurfaceId,
|
||||
pub node_id: SurfaceNodeId,
|
||||
|
|
@ -350,6 +359,9 @@ impl WlSurface {
|
|||
if old.global.preferred_scale.get() != output.global.preferred_scale.get() {
|
||||
self.on_scale_change();
|
||||
}
|
||||
if old.global.transform.get() != output.global.transform.get() {
|
||||
self.send_preferred_buffer_transform();
|
||||
}
|
||||
let children = self.children.borrow_mut();
|
||||
if let Some(children) = &*children {
|
||||
for ss in children.subsurfaces.values() {
|
||||
|
|
@ -442,6 +454,15 @@ impl WlSurface {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn send_preferred_buffer_transform(&self) {
|
||||
if self.version >= TRANSFORM_SINCE {
|
||||
self.client.event(PreferredBufferTransform {
|
||||
self_id: self.id,
|
||||
transform: self.output.get().global.transform.get().to_wl() as _,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fn set_toplevel(&self, tl: Option<Rc<dyn ToplevelNode>>) {
|
||||
let ch = self.children.borrow();
|
||||
if let Some(ch) = &*ch {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue