1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//! Wallpaper management via awww with cycling and theming support.
//!
//! # Quick Start
//!
//! ```rust,no_run
//! use wayle_wallpaper::WallpaperService;
//! use std::path::PathBuf;
//!
//! # async fn example() -> Result<(), wayle_wallpaper::Error> {
//! let wp = WallpaperService::new().await?;
//!
//! // Set wallpaper on all monitors
//! wp.set_wallpaper(PathBuf::from("/path/to/image.jpg"), None).await?;
//!
//! // Check current state
//! for (monitor, state) in wp.monitors.get().iter() {
//! println!("{}: {:?} (fit: {})", monitor, state.wallpaper, state.fit_mode);
//! }
//! # Ok(())
//! # }
//! ```
//!
//! # Directory Cycling
//!
//! ```rust,no_run
//! # use wayle_wallpaper::{WallpaperService, CyclingMode};
//! # use std::path::PathBuf;
//! # use std::time::Duration;
//! # async fn example() -> Result<(), wayle_wallpaper::Error> {
//! # let wp = WallpaperService::new().await?;
//! // Cycle through a directory
//! wp.start_cycling(
//! PathBuf::from("/path/to/wallpapers"),
//! Duration::from_secs(300),
//! CyclingMode::Sequential,
//! )?;
//!
//! // Manual navigation
//! wp.advance_cycle().await?;
//! wp.rewind_cycle().await?;
//!
//! wp.stop_cycling();
//! # Ok(())
//! # }
//! ```
//!
//! # Configuration
//!
//! | Method | Effect |
//! |--------|--------|
//! | `transition(TransitionConfig)` | Animation when changing wallpapers |
//! | `color_extractor(ColorExtractorConfig)` | Tool and parameters for extracting dominant colors |
//! | `theming_monitor(Option<String>)` | Which monitor drives color extraction |
//! | `shared_cycle(bool)` | Sync cycling across monitors in shuffle mode |
//! | `engine_active(bool)` | Toggle awww rendering (state tracking continues) |
//!
//! ```rust,no_run
//! use wayle_wallpaper::{WallpaperService, TransitionConfig, TransitionType};
//!
//! # async fn example() -> Result<(), wayle_wallpaper::Error> {
//! let wp = WallpaperService::builder()
//! .transition(TransitionConfig {
//! transition_type: TransitionType::Left,
//! ..Default::default()
//! })
//! .build()
//! .await?;
//! # Ok(())
//! # }
//! ```
//!
//! # Reactive Properties
//!
//! All fields are [`Property<T>`](wayle_core::Property):
//! - `.get()` - Current value snapshot
//! - `.watch()` - Stream yielding on changes
//!
//! # Service Fields
//!
//! | Field | Type | Description |
//! |-------|------|-------------|
//! | `cycling` | `Option<CyclingConfig>` | Active cycling state |
//! | `monitors` | `HashMap<String, MonitorState>` | Per-monitor wallpaper and fit mode |
//! | `transition` | [`TransitionConfig`] | Animation settings |
//!
//! # Control Methods
//!
//! - `set_wallpaper()` - Apply wallpaper to one or all monitors
//! - `start_cycling()` / `stop_cycling()` - Directory cycling
//! - `advance_cycle()` / `rewind_cycle()` - Manual navigation
//! - `set_fit_mode()` - Change scaling mode per monitor or globally
//! - `set_transition()` - Configure animations
//!
//! # D-Bus Interface
//!
//! When `with_daemon()` is enabled, the service registers on the session bus.
//!
//! - **Service:** `com.wayle.Wallpaper1`
//! - **Path:** `/com/wayle/Wallpaper`
//! - **Interface:** `com.wayle.Wallpaper1`
//!
//! See [`dbus.md`](https://github.com/wayle-rs/wayle/blob/master/crates/wayle-wallpaper/dbus.md) for the full interface specification.
pub use ;
pub use WallpaperServiceBuilder;
pub use ;
pub use Error;
pub use WallpaperService;
pub use ;
;