pub struct OutputNode {
pub id: u32,
pub output: Output,
pub global: GlobalId,
pub pos: (i32, i32),
pub damage_tracker: OutputDamageTracker,
pub frame_buffer: Vec<u8>,
pub offscreen_buffer: Option<(BufferObject<()>, Dmabuf)>,
pub overlay_state: OverlayState,
pub capture: Option<WlCapture>,
pub frame_seq: u64,
pub target_seeded: bool,
pub content_hold_until: Option<Instant>,
}Expand description
One virtual output and everything sized to it: the Smithay Output + its advertised
global, its layout position, the damage tracker, render targets, and the (at most one)
capture bound to it. id is the Python-facing display key; id 0 is the primary
HEADLESS-1 output, which is never destroyed.
Fields§
§id: u32§output: Output§global: GlobalId§pos: (i32, i32)Layout offset: the output’s logical position in the Space AND its physical offset for absolute input injection. The two coincide at scale 1; with mixed scales the caller must place outputs so neither the logical nor the physical rectangles overlap.
damage_tracker: OutputDamageTracker§frame_buffer: Vec<u8>Host-side scratch target: pixman throttle path renders here, GLES screenshots read back here.
offscreen_buffer: Option<(BufferObject<()>, Dmabuf)>GPU render target for this output (GLES mode): the GBM BO and its dmabuf export.
overlay_state: OverlayStateWatermark overlay for THIS output: loaded at the output’s scale, positioned (and, for the bouncing anchor, animated) against the output’s own frame dimensions.
capture: Option<WlCapture>§frame_seq: u64Monotonic count of frames reported presented through wp_presentation.
target_seeded: boolWhether the render target already holds a fully composited frame, so a capture-less render (screenshot, copy-capture client) may use buffer age instead of redrawing everything. Cleared whenever the target is replaced.
content_hold_until: Option<Instant>Deadline for this output’s post-reconfigure content hold. While it is set, the display composites but does not publish: a resized or freshly created output paints its clear colour wherever a client has not yet answered the new size, and that grey must not reach the stream. Cleared by the first tick a client covers the output, and by the deadline for one that never does.
Implementations§
Source§impl OutputNode
impl OutputNode
Sourcepub fn logical_geometry(&self) -> Option<Rectangle<i32, Logical>>
pub fn logical_geometry(&self) -> Option<Rectangle<i32, Logical>>
The output’s logical geometry in layout coordinates: origin plus mode/scale-derived logical size.
Auto Trait Implementations§
impl !RefUnwindSafe for OutputNode
impl !Sync for OutputNode
impl !UnwindSafe for OutputNode
impl Freeze for OutputNode
impl Send for OutputNode
impl Unpin for OutputNode
impl UnsafeUnpin for OutputNode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more