Skip to main content

winit/platform_impl/linux/wayland/types/
wp_viewporter.rs

1//! Handling of the wp-viewporter.
2
3use sctk::reexports::client::globals::{BindError, GlobalList};
4use sctk::reexports::client::protocol::wl_surface::WlSurface;
5use sctk::reexports::client::{delegate_dispatch, Connection, Dispatch, Proxy, QueueHandle};
6use sctk::reexports::protocols::wp::viewporter::client::wp_viewport::WpViewport;
7use sctk::reexports::protocols::wp::viewporter::client::wp_viewporter::WpViewporter;
8
9use sctk::globals::GlobalData;
10
11use crate::platform_impl::wayland::state::WinitState;
12
13/// Viewporter.
14#[derive(Debug)]
15pub struct ViewporterState {
16    viewporter: WpViewporter,
17}
18
19impl ViewporterState {
20    /// Create new viewporter.
21    pub fn new(
22        globals: &GlobalList,
23        queue_handle: &QueueHandle<WinitState>,
24    ) -> Result<Self, BindError> {
25        let viewporter = globals.bind(queue_handle, 1..=1, GlobalData)?;
26        Ok(Self { viewporter })
27    }
28
29    /// Get the viewport for the given object.
30    pub fn get_viewport(
31        &self,
32        surface: &WlSurface,
33        queue_handle: &QueueHandle<WinitState>,
34    ) -> WpViewport {
35        self.viewporter.get_viewport(surface, queue_handle, GlobalData)
36    }
37}
38
39impl Dispatch<WpViewporter, GlobalData, WinitState> for ViewporterState {
40    fn event(
41        _: &mut WinitState,
42        _: &WpViewporter,
43        _: <WpViewporter as Proxy>::Event,
44        _: &GlobalData,
45        _: &Connection,
46        _: &QueueHandle<WinitState>,
47    ) {
48        // No events.
49    }
50}
51impl Dispatch<WpViewport, GlobalData, WinitState> for ViewporterState {
52    fn event(
53        _: &mut WinitState,
54        _: &WpViewport,
55        _: <WpViewport as Proxy>::Event,
56        _: &GlobalData,
57        _: &Connection,
58        _: &QueueHandle<WinitState>,
59    ) {
60        // No events.
61    }
62}
63
64delegate_dispatch!(WinitState: [WpViewporter: GlobalData] => ViewporterState);
65delegate_dispatch!(WinitState: [WpViewport: GlobalData] => ViewporterState);