rdesktop_core/
renderer.rs1use crate::config::{RendererConfig, RendererKind as ConfigRendererKind, WindowConfig};
2use crate::ipc::IpcHandler;
3use crate::window::WindowHandle;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum RendererKind {
8 WebView,
10 Chrome,
12}
13
14impl From<&ConfigRendererKind> for RendererKind {
15 fn from(kind: &ConfigRendererKind) -> Self {
16 match kind {
17 ConfigRendererKind::WebView => Self::WebView,
18 ConfigRendererKind::Chrome => Self::Chrome,
19 }
20 }
21}
22
23impl From<&RendererConfig> for RendererKind {
24 fn from(config: &RendererConfig) -> Self {
25 Self::from(&config.kind)
26 }
27}
28
29pub trait Renderer {
35 fn init(&mut self) -> crate::Result<()>;
37
38 fn create_window(&mut self, config: &WindowConfig) -> crate::Result<WindowHandle>;
40
41 fn load_url(&self, window: WindowHandle, url: &str) -> crate::Result<()>;
43
44 fn load_html(&self, window: WindowHandle, html: &str) -> crate::Result<()>;
46
47 fn eval_script(&self, window: WindowHandle, script: &str) -> crate::Result<()>;
49
50 fn set_ipc_handler(&mut self, handler: Box<dyn IpcHandler>);
52
53 fn send_to_frontend(&self, window: WindowHandle, message: &str) -> crate::Result<()>;
55
56 fn set_title(&self, window: WindowHandle, title: &str) -> crate::Result<()>;
58
59 fn set_size(&self, window: WindowHandle, width: u32, height: u32) -> crate::Result<()>;
61
62 fn set_resizable(&self, window: WindowHandle, resizable: bool) -> crate::Result<()>;
64
65 fn set_visible(&self, window: WindowHandle, visible: bool) -> crate::Result<()>;
67
68 fn close_window(&mut self, window: WindowHandle) -> crate::Result<()>;
70
71 fn minimize_window(&self, window: WindowHandle) -> crate::Result<()>;
75
76 fn maximize_window(&self, window: WindowHandle) -> crate::Result<()>;
78
79 fn is_maximized(&self, window: WindowHandle) -> crate::Result<bool>;
81
82 fn set_fullscreen(&self, window: WindowHandle, fullscreen: bool) -> crate::Result<()>;
84
85 fn is_fullscreen(&self, window: WindowHandle) -> crate::Result<bool>;
87
88 fn start_drag(&self, window: WindowHandle) -> crate::Result<()>;
93
94 fn start_resize(&self, window: WindowHandle, edge: ResizeEdge) -> crate::Result<()>;
98
99 fn set_decorations(&self, window: WindowHandle, decorations: bool) -> crate::Result<()>;
101
102 fn set_always_on_top(&self, window: WindowHandle, always: bool) -> crate::Result<()>;
104
105 fn set_click_through(&self, _window: WindowHandle, _enabled: bool) -> crate::Result<()> {
113 Ok(())
114 }
115
116 fn run(self: Box<Self>) -> crate::Result<()>;
120
121 fn kind(&self) -> RendererKind;
123}
124
125#[derive(Debug, Clone, Copy, PartialEq, Eq)]
127pub enum ResizeEdge {
128 Top,
129 Bottom,
130 Left,
131 Right,
132 TopLeft,
133 TopRight,
134 BottomLeft,
135 BottomRight,
136}