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: as Try>::Output = globals.bind(qh:queue_handle, version:1..=1, udata: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);
66