fret_runtime/capabilities/
leaf.rs1use super::{
2 ExternalDragPayloadKind, ExternalDragPositionQuality, WindowHoverDetectionQuality,
3 WindowSetOuterPositionQuality, WindowZLevelQuality,
4};
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize)]
9pub struct ClipboardTextCapabilities {
10 pub read: bool,
11 pub write: bool,
12}
13
14impl<'de> Deserialize<'de> for ClipboardTextCapabilities {
15 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
16 where
17 D: serde::Deserializer<'de>,
18 {
19 #[derive(Deserialize)]
20 #[serde(untagged)]
21 enum Compat {
22 Bool(bool),
24 Struct {
26 #[serde(default)]
27 read: bool,
28 #[serde(default)]
29 write: bool,
30 },
31 }
32
33 Ok(match Compat::deserialize(deserializer)? {
34 Compat::Bool(v) => Self { read: v, write: v },
35 Compat::Struct { read, write } => Self { read, write },
36 })
37 }
38}
39
40#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
41#[serde(default)]
42pub struct UiCapabilities {
43 pub multi_window: bool,
44 pub window_tear_off: bool,
45 pub cursor_icons: bool,
46
47 pub window_hover_detection: WindowHoverDetectionQuality,
48 pub window_set_outer_position: WindowSetOuterPositionQuality,
49 pub window_z_level: WindowZLevelQuality,
50
51 pub window_decorations: bool,
53 pub window_resizable: bool,
54 pub window_transparent: bool,
55 pub window_skip_taskbar: bool,
56 pub window_non_activating: bool,
57 pub window_hit_test_passthrough_all: bool,
58 pub window_hit_test_passthrough_regions: bool,
59 pub window_set_visible: bool,
60 pub window_begin_drag: bool,
61 pub window_begin_resize: bool,
62
63 pub window_background_material_system_default: bool,
65 pub window_background_material_mica: bool,
66 pub window_background_material_acrylic: bool,
67 pub window_background_material_vibrancy: bool,
68
69 pub native_window_handle: bool,
71}
72
73#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
74#[serde(default)]
75pub struct ClipboardCapabilities {
76 pub text: ClipboardTextCapabilities,
77 pub files: bool,
78 pub primary_text: bool,
84}
85
86#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
87#[serde(default)]
88pub struct DndCapabilities {
89 pub external: bool,
90 pub external_payload: ExternalDragPayloadKind,
91 pub external_position: ExternalDragPositionQuality,
92}
93
94#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
95#[serde(default)]
96pub struct ImeCapabilities {
97 pub enabled: bool,
98 pub set_cursor_area: bool,
99}
100
101#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
102#[serde(default)]
103pub struct FsCapabilities {
104 pub real_paths: bool,
105 pub file_dialogs: bool,
106}
107
108#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
109#[serde(default)]
110pub struct ShellCapabilities {
111 pub open_url: bool,
112 pub share_sheet: bool,
113 pub incoming_open: bool,
114}
115
116#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
117#[serde(default)]
118pub struct GfxCapabilities {
119 pub webgpu: bool,
120 pub native_gpu: bool,
121}