# deliasama/linux-wallpaperengine architecture

> Architecture diagram of the GitHub repository deliasama/linux-wallpaperengine, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/deliasama/linux-wallpaperengine
- Repository: https://github.com/deliasama/linux-wallpaperengine

## Overview

linux-wallpaperengine reproduces Wallpaper Engine backgrounds on Linux and adds a Qt wallpaper-selection GUI. The GUI startup discovers installed Steam Workshop wallpapers; the separate command-line path parses runtime settings and starts the wallpaper application, which coordinates rendering to desktop outputs. Wallpaper content includes scene, video, and web types, with audio, mouse input, scaling, fullscreen pausing, and screenshot capabilities represented in the runtime. The tree and README establish these product areas, but unsampled implementations limit certainty about several internal call paths.

Main entry points: [`src/main.cpp`](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/main.cpp) (Program entry), [`src/WallpaperEngine/Application/CWallpaperApplication.cpp`](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Application/CWallpaperApplication.cpp) (Wallpaper application), [`src/WallpaperEngine/Core/CWallpaper.cpp`](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/CWallpaper.cpp) (Wallpaper model), [`src/Qt/UIWindow.cpp`](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/UIWindow.cpp) (Wallpaper selector)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_main["Program entry<br/>[main.cpp]"]
  node_cli["Runtime settings"]
  node_app["Wallpaper application"]
  node_context["Application context"]
end

subgraph group_content["Wallpaper content"]
  node_project["Wallpaper project<br/>[CProject.cpp]"]
  node_wallpaper["Wallpaper model<br/>[CWallpaper.cpp]"]
  node_scene["Scene content<br/>[CScene.cpp]"]
  node_video["Video content<br/>[CVideo.cpp]"]
  node_web["Web content<br/>[CWeb.cpp]"]
end

subgraph group_render["Rendering"]
  node_rendercontext["Render context<br/>[CRenderContext.cpp]"]
  node_renderer["Wallpaper renderer<br/>[CWallpaper.cpp]"]
  node_outputs["Display outputs<br/>[COutput.cpp]"]
  node_videooutput["Video driver<br/>[CVideoDriver.cpp]"]
end

subgraph group_integrations["System integrations"]
  node_filesystem["Workshop lookup<br/>[FileSystem.cpp]"]
  node_audio["Audio subsystem<br/>[CAudioContext.cpp]"]
  node_input["Mouse input<br/>[CInputContext.cpp]"]
  node_fullscreen["Fullscreen detection"]
  node_browser["CEF browser"]
  node_scheme["Wallpaper asset scheme"]
end

subgraph group_gui["Selection GUI"]
  node_ui["Wallpaper selector<br/>[UIWindow.cpp]"]
  node_settingsui["Wallpaper settings"]
  node_button["Wallpaper button"]
  node_single["Single instance"]
end

node_user(("User"))
node_steam[("Steam Workshop")]
node_assets[("Steam wallpaper assets")]

node_user -->|"starts"| node_main
node_main -->|"checks instance"| node_single
node_main -->|"finds workshop"| node_filesystem
node_filesystem -->|"searches install"| node_steam
node_main -->|"opens selector"| node_ui
node_main -->|"parses options"| node_cli
node_cli -->|"sets runtime state"| node_context
node_main -->|"starts runtime"| node_app
node_ui -->|"displays wallpapers"| node_button
node_ui -->|"configures wallpaper"| node_settingsui
node_user -->|"selects wallpaper"| node_ui
node_steam -->|"provides assets"| node_assets
node_app -->|"coordinates rendering"| node_rendercontext
node_rendercontext -->|"renders wallpaper"| node_renderer
node_rendercontext -->|"uses driver"| node_videooutput
node_videooutput -->|"manages outputs"| node_outputs
node_project -->|"describes content"| node_wallpaper
node_wallpaper -->|"supports scene"| node_scene
node_wallpaper -->|"supports video"| node_video
node_wallpaper -->|"supports web"| node_web
node_web -.->|"renders web content"| node_browser
node_scheme -->|"reads project files"| node_assets
node_app -->|"coordinates audio"| node_audio
node_app -->|"coordinates input"| node_input
node_app -->|"checks fullscreen"| node_fullscreen

click node_main "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/main.cpp"
click node_cli "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Application/CApplicationContext.cpp"
click node_app "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Application/CWallpaperApplication.cpp"
click node_context "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Application/CApplicationContext.cpp"
click node_filesystem "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Steam/FileSystem/FileSystem.cpp"
click node_ui "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/UIWindow.cpp"
click node_settingsui "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/WallpaperSettingsWidget.cpp"
click node_button "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/WallpaperButton.cpp"
click node_single "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/SingleInstanceManager.cpp"
click node_project "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/CProject.cpp"
click node_wallpaper "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/CWallpaper.cpp"
click node_scene "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/Wallpapers/CScene.cpp"
click node_video "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/Wallpapers/CVideo.cpp"
click node_web "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/Wallpapers/CWeb.cpp"
click node_rendercontext "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/CRenderContext.cpp"
click node_renderer "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/CWallpaper.cpp"
click node_outputs "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/Drivers/Output/COutput.cpp"
click node_videooutput "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/Drivers/CVideoDriver.cpp"
click node_audio "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Audio/CAudioContext.cpp"
click node_input "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Input/CInputContext.cpp"
click node_fullscreen "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/Drivers/Detectors/CFullScreenDetector.cpp"
click node_browser "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/WebBrowser/CWebBrowserContext.cpp"
click node_scheme "https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/WebBrowser/CEF/CWPSchemeHandler.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_cli,node_app,node_context,node_user toneBlue
class node_project,node_wallpaper,node_scene,node_video,node_web,node_steam,node_assets toneAmber
class node_rendercontext,node_renderer,node_outputs,node_videooutput toneMint
class node_filesystem,node_audio,node_input,node_fullscreen,node_browser,node_scheme toneRose
class node_ui,node_settingsui,node_button,node_single toneIndigo
```

## Components

### Application entry

- [Program entry](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/main.cpp): `src/main.cpp`
- [Runtime settings](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Application/CApplicationContext.cpp): `src/WallpaperEngine/Application/CApplicationContext.cpp`
- [Wallpaper application](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Application/CWallpaperApplication.cpp): `src/WallpaperEngine/Application/CWallpaperApplication.cpp`
- [Application context](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Application/CApplicationContext.cpp): `src/WallpaperEngine/Application/CApplicationContext.cpp`

### Wallpaper content

- [Wallpaper project](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/CProject.cpp): `src/WallpaperEngine/Core/CProject.cpp`
- [Wallpaper model](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/CWallpaper.cpp): `src/WallpaperEngine/Core/CWallpaper.cpp`
- [Scene content](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/Wallpapers/CScene.cpp): `src/WallpaperEngine/Core/Wallpapers/CScene.cpp`
- [Video content](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/Wallpapers/CVideo.cpp): `src/WallpaperEngine/Core/Wallpapers/CVideo.cpp`
- [Web content](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Core/Wallpapers/CWeb.cpp): `src/WallpaperEngine/Core/Wallpapers/CWeb.cpp`

### Rendering

- [Render context](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/CRenderContext.cpp): `src/WallpaperEngine/Render/CRenderContext.cpp`
- [Wallpaper renderer](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/CWallpaper.cpp): `src/WallpaperEngine/Render/CWallpaper.cpp`
- [Display outputs](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/Drivers/Output/COutput.cpp): `src/WallpaperEngine/Render/Drivers/Output/COutput.cpp`
- [Video driver](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/Drivers/CVideoDriver.cpp): `src/WallpaperEngine/Render/Drivers/CVideoDriver.cpp`

### System integrations

- [Workshop lookup](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Steam/FileSystem/FileSystem.cpp): `src/Steam/FileSystem/FileSystem.cpp`
- [Audio subsystem](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Audio/CAudioContext.cpp): `src/WallpaperEngine/Audio/CAudioContext.cpp`
- [Mouse input](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Input/CInputContext.cpp): `src/WallpaperEngine/Input/CInputContext.cpp`
- [Fullscreen detection](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/Render/Drivers/Detectors/CFullScreenDetector.cpp): `src/WallpaperEngine/Render/Drivers/Detectors/CFullScreenDetector.cpp`
- [CEF browser](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/WebBrowser/CWebBrowserContext.cpp): `src/WallpaperEngine/WebBrowser/CWebBrowserContext.cpp`
- [Wallpaper asset scheme](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/WallpaperEngine/WebBrowser/CEF/CWPSchemeHandler.cpp): `src/WallpaperEngine/WebBrowser/CEF/CWPSchemeHandler.cpp`

### Selection GUI

- [Wallpaper selector](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/UIWindow.cpp): `src/Qt/UIWindow.cpp`
- [Wallpaper settings](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/WallpaperSettingsWidget.cpp): `src/Qt/WallpaperSettingsWidget.cpp`
- [Wallpaper button](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/WallpaperButton.cpp): `src/Qt/WallpaperButton.cpp`
- [Single instance](https://github.com/deliasama/linux-wallpaperengine/blob/main/src/Qt/SingleInstanceManager.cpp): `src/Qt/SingleInstanceManager.cpp`

### Other components

- **User**
- **Steam Workshop**
- **Steam wallpaper assets**

## Connections

- User → Program entry: starts
- Program entry → Single instance: checks instance
- Program entry → Workshop lookup: finds workshop
- Workshop lookup → Steam Workshop: searches install
- Program entry → Wallpaper selector: opens selector
- Program entry → Runtime settings: parses options
- Runtime settings → Application context: sets runtime state
- Program entry → Wallpaper application: starts runtime
- Wallpaper selector → Wallpaper button: displays wallpapers
- Wallpaper selector → Wallpaper settings: configures wallpaper
- User → Wallpaper selector: selects wallpaper
- Steam Workshop → Steam wallpaper assets: provides assets
- Wallpaper application → Render context: coordinates rendering
- Render context → Wallpaper renderer: renders wallpaper
- Render context → Video driver: uses driver
- Video driver → Display outputs: manages outputs
- Wallpaper project → Wallpaper model: describes content
- Wallpaper model → Scene content: supports scene
- Wallpaper model → Video content: supports video
- Wallpaper model → Web content: supports web
- Web content → CEF browser: renders web content
- Wallpaper asset scheme → Steam wallpaper assets: reads project files
- Wallpaper application → Audio subsystem: coordinates audio
- Wallpaper application → Mouse input: coordinates input
- Wallpaper application → Fullscreen detection: checks fullscreen
