running_process_platform_internal/platform/window_icon/
mod.rs1use std::path::PathBuf;
4
5pub mod ico;
6
7#[derive(Clone, Copy, Debug, PartialEq, Eq)]
8pub enum IconScope {
9 Host,
10 Child { pid: u32 },
11}
12
13#[derive(Clone, Copy, Debug, PartialEq, Eq)]
14pub enum StockIcon {
15 Application,
16 Warning,
17 Error,
18 Information,
19 Shield,
20}
21
22#[derive(Clone, Debug, PartialEq, Eq)]
23pub enum IconSource {
24 Path(PathBuf),
25 Bytes(Vec<u8>),
26 Stock(StockIcon),
27}
28
29#[derive(Clone, Copy, Debug, PartialEq, Eq)]
30pub enum IconDegradedReason {
31 WindowsTerminal,
32 NonClassicWindowsHost,
33 LinuxNameOnly,
34}
35
36#[derive(Clone, Copy, Debug, PartialEq, Eq)]
37pub enum IconUnsupportedReason {
38 ChildHasNoConsole,
39 NoConsole,
40 MacTerminalOwnsWindow,
41 Wayland,
42 NoBackend,
43 LinuxChildScope,
44 LinuxNoDisplay,
45 TargetDisappeared,
46 UnknownImageFormat,
47 StockNeedsPixels,
48 OversizedIcon,
49 UnsupportedPngColorType,
50 UnsupportedPngBitDepth,
51 UnsupportedX11VisualDepth,
52}
53
54#[derive(Clone, Copy, Debug, PartialEq, Eq)]
55pub enum IconSupport {
56 Available,
57 Degraded(IconDegradedReason),
58 Unsupported(IconUnsupportedReason),
59}
60
61#[derive(Debug, thiserror::Error)]
62pub enum IconError {
63 #[error("window-icon operation is unsupported: {0:?}")]
64 Unsupported(IconUnsupportedReason),
65 #[error("cannot load icon from {path}: {source}")]
66 Load {
67 path: PathBuf,
68 #[source]
69 source: std::io::Error,
70 },
71 #[error("the host refused the icon data: {0}")]
72 Apply(#[source] std::io::Error),
73 #[error("supplied icon data is unusable: {0}")]
74 Decode(ico::IcoError),
75}
76
77pub fn icon_support(scope: IconScope) -> IconSupport {
78 crate::window_icon_support_impl(scope)
79}
80
81pub fn set_icon(scope: IconScope, source: &IconSource) -> Result<(), IconError> {
82 crate::set_window_icon_impl(scope, source)
83}