The open source OpenXR runtime

doc: Add doxygen-awesome theme

authored by

Mateo de Mayo and committed by
Jakob Bornecrantz
600a3793 4bb2a618

+3441 -1
+5
.reuse/dep5
··· 17 17 License: CC0-1.0 18 18 Comment: Prevents needing a license header per fragment between releases. 19 19 20 + Files: doc/doxygen-awesome-css/* 21 + Copyright: 2021-2023, jothepro 22 + License: MIT 23 + Comment: SPDX-License-Identifier missing. 24 + 20 25 Files: src/external/cjson/* 21 26 Copyright: 2009-2017, Dave Gamble and cJSON contributors 22 27 License: MIT
+16
doc/Doxyfile.in
··· 95 95 GENERATE_LATEX = NO 96 96 97 97 USE_MATHJAX = YES 98 + 99 + # Doxygen Awesome theme settings 100 + GENERATE_TREEVIEW = YES # required! 101 + DISABLE_INDEX = NO 102 + FULL_SIDEBAR = NO 103 + HTML_COLORSTYLE = LIGHT # required with Doxygen >= 1.9.5 104 + HTML_HEADER = @SRCDIR@/doc/header.html 105 + HTML_EXTRA_STYLESHEET = @SRCDIR@/doc/doxygen-awesome-css/doxygen-awesome.css \ 106 + @SRCDIR@/doc/doxygen-awesome-css/doxygen-awesome-sidebar-only.css \ 107 + @SRCDIR@/doc/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css 108 + HTML_EXTRA_FILES = @SRCDIR@/doc/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js \ 109 + @SRCDIR@/doc/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js \ 110 + @SRCDIR@/doc/doxygen-awesome-css/doxygen-awesome-paragraph-link.js \ 111 + @SRCDIR@/doc/doxygen-awesome-css/doxygen-custom/toggle-alternative-theme.js \ 112 + @SRCDIR@/doc/doxygen-awesome-css/doxygen-awesome-interactive-toc.js \ 113 + @SRCDIR@/doc/doxygen-awesome-css/doxygen-awesome-tabs.js
+2
doc/conventions.md
··· 14 14 15 15 --> 16 16 17 + [TOC] 18 + 17 19 Here are some general code style guidelines we follow. 18 20 19 21 Note that we aim to "code with respect", to avoid terminology that may limit our
+21
doc/doxygen-awesome-css/LICENSE
··· 1 + MIT License 2 + 3 + Copyright (c) 2021 - 2023 jothepro 4 + 5 + Permission is hereby granted, free of charge, to any person obtaining a copy 6 + of this software and associated documentation files (the "Software"), to deal 7 + in the Software without restriction, including without limitation the rights 8 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 + copies of the Software, and to permit persons to whom the Software is 10 + furnished to do so, subject to the following conditions: 11 + 12 + The above copyright notice and this permission notice shall be included in all 13 + copies or substantial portions of the Software. 14 + 15 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 + SOFTWARE.
+166
doc/doxygen-awesome-css/README.md
··· 1 + # Doxygen Awesome 2 + 3 + [![GitHub release (latest by date)](https://img.shields.io/github/v/release/jothepro/doxygen-awesome-css)](https://github.com/jothepro/doxygen-awesome-css/releases/latest) 4 + [![GitHub](https://img.shields.io/github/license/jothepro/doxygen-awesome-css)](https://github.com/jothepro/doxygen-awesome-css/blob/main/LICENSE) 5 + ![GitHub Repo stars](https://img.shields.io/github/stars/jothepro/doxygen-awesome-css) 6 + 7 + <div class="title_screenshot"> 8 + 9 + ![Screenshot of Doxygen Awesome CSS](img/screenshot.png) 10 + 11 + </div> 12 + 13 + **Doxygen Awesome** is a custom **CSS theme for Doxygen HTML-documentation** with lots of customization parameters. 14 + 15 + ## Motivation 16 + 17 + I really like how the Doxygen HTML-documentation is structured! But IMHO it looks a bit outdated. 18 + 19 + This theme is an attempt to update the visuals of Doxygen without changing its overall layout too much. 20 + 21 + ## Features 22 + 23 + - 🌈 Clean, modern design 24 + - 🚀 Heavily customizable by adjusting CSS-variables 25 + - 🧩 No changes to the HTML structure of Doxygen required 26 + - 📱 Improved mobile usability 27 + - 🌘 Dark mode support! 28 + - 🥇 Works best with **doxygen 1.9.1** - **1.9.4** and **1.9.6** - **1.9.7** 29 + 30 + ## Examples 31 + 32 + Some websites using this theme: 33 + 34 + - [Documentation of this repository](https://jothepro.github.io/doxygen-awesome-css/) 35 + - [wxWidgets](https://docs.wxwidgets.org/3.2/) 36 + - [OpenCV 5.x](https://docs.opencv.org/5.x/) 37 + - [Zephyr](https://docs.zephyrproject.org/latest/doxygen/html/index.html) 38 + - [FELTOR](https://mwiesenberger.github.io/feltor/dg/html/modules.html) 39 + - [Spatial Audio Framework (SAF)](https://leomccormack.github.io/Spatial_Audio_Framework/index.html) 40 + - [libCloudSync](https://jothepro.github.io/libCloudSync/) 41 + - [libsl3](https://a4z.github.io/libsl3/) 42 + 43 + ## Installation 44 + 45 + To use the theme when generating your documentation, bring the required CSS and JS files from this repository into your project. 46 + 47 + This can be done in several ways: 48 + 49 + - manually copying the files 50 + - adding the project as a Git submodule 51 + - adding the project as a npm/xpm dependency 52 + - installing the theme system wide 53 + 54 + All theme files are located in the root of this repository and start with the prefix `doxygen-awesome-`. You may not need all of them. Follow the install instructions to figure out what files are required for your setup. 55 + 56 + ### Git submodule 57 + 58 + For projects which use git, add the repository as a submodule and check out the desired release: 59 + 60 + ```sh 61 + git submodule add https://github.com/jothepro/doxygen-awesome-css.git 62 + cd doxygen-awesome-css 63 + git checkout v2.2.1 64 + ``` 65 + 66 + ### npm/xpm dependency 67 + 68 + In the npm ecosystem, this project can be added as a development dependency 69 + to your project: 70 + 71 + ```sh 72 + cd your-project 73 + npm install https://github.com/jothepro/doxygen-awesome-css#v2.2.1 --save-dev 74 + 75 + ls -l node_module/@jothepro/doxygen-awesome-css 76 + ``` 77 + 78 + Similarly, in the [xPack](https://xpack.github.io) ecosystem, this project can be added 79 + as a development dependency to an [`xpm`](https://xpack.github.io/xpm/) 80 + managed project. 81 + 82 + ### System-wide 83 + 84 + You can even install the theme system-wide by running `make install`. The files will be installed to `/usr/local/share/` by default, but you can customize the install location with `make PREFIX=/my/custom/path install`. 85 + 86 + ### Choosing a layout 87 + 88 + There is two layout options. Choose one of them and configure Doxygen accordingly: 89 + 90 + <div class="darkmode_inverted_image"> 91 + 92 + ![Available theme variants](img/theme-variants.drawio.svg) 93 + 94 + </div> 95 + 96 + <div class="tabbed"> 97 + 98 + - <b class="tab-title">1️⃣ Base Theme </b> 99 + Comes with the typical Doxygen titlebar. Optionally the treeview in the sidebar can be enabled. 100 + 101 + Required files: `doxygen-awesome.css` 102 + 103 + Required `Doxyfile` configuration: 104 + ``` 105 + GENERATE_TREEVIEW = YES # optional. Also works without treeview 106 + DISABLE_INDEX = NO 107 + FULL_SIDEBAR = NO 108 + HTML_EXTRA_STYLESHEET = doxygen-awesome-css/doxygen-awesome.css 109 + HTML_COLORSTYLE = LIGHT # required with Doxygen >= 1.9.5 110 + ``` 111 + 112 + - <b class="tab-title">2️⃣ Sidebar-Only Theme </b> 113 + Hides the top titlebar to give more space to the content. The treeview must be enabled in order for this theme to work. 114 + 115 + Required files: `doxygen-awesome.css`, `doxygen-awesome-sidebar-only.css` 116 + 117 + Required `Doxyfile` configuration: 118 + ``` 119 + 120 + GENERATE_TREEVIEW = YES # required! 121 + DISABLE_INDEX = NO 122 + FULL_SIDEBAR = NO 123 + HTML_EXTRA_STYLESHEET = doxygen-awesome-css/doxygen-awesome.css \ 124 + doxygen-awesome-css/doxygen-awesome-sidebar-only.css 125 + HTML_COLORSTYLE = LIGHT # required with Doxygen >= 1.9.5 126 + ``` 127 + 128 + </div> 129 + 130 + **Caution**: 131 + - This theme is not compatible with the `FULL_SIDEBAR = YES` option provided by Doxygen! 132 + - `HTML_COLORSTYLE` must be set to `LIGHT` since Doxygen 1.9.5! 133 + 134 + ### Further installation instructions: 135 + 136 + - [Installing extensions](docs/extensions.md) 137 + - [Customizing the theme (colors, spacing, border-radius, ...)](docs/customization.md) 138 + - [Tips and Tricks for further configuration](docs/tricks.md) 139 + 140 + ## Browser support 141 + 142 + Tested with 143 + 144 + - Chrome 110, Chrome 109 for Android, Chrome 110 for iOS 145 + - Safari 16, Safari for iOS 16 146 + - Firefox 110, Firefox 110 for Android, Firefox 109 for iOS 147 + - Edge 110 148 + 149 + 150 + The theme does not strive to be backwards compatible to (significantly) older browser versions. 151 + 152 + 153 + ## Credits 154 + 155 + Thanks for all the bug reports and inspiring feedback on github! 156 + 157 + Special thanks to all the contributors: 158 + <br><br> 159 + <a href="https://github.com/jothepro/doxygen-awesome-css/graphs/contributors"> 160 + <img src="https://contrib.rocks/image?repo=jothepro/doxygen-awesome-css" /> 161 + </a> 162 + 163 + <span class="next_section_button"> 164 + 165 + Read Next: [Extensions](docs/extensions.md) 166 + </span>
+157
doc/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js
··· 1 + /** 2 + 3 + Doxygen Awesome 4 + https://github.com/jothepro/doxygen-awesome-css 5 + 6 + MIT License 7 + 8 + Copyright (c) 2021 - 2023 jothepro 9 + 10 + Permission is hereby granted, free of charge, to any person obtaining a copy 11 + of this software and associated documentation files (the "Software"), to deal 12 + in the Software without restriction, including without limitation the rights 13 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 + copies of the Software, and to permit persons to whom the Software is 15 + furnished to do so, subject to the following conditions: 16 + 17 + The above copyright notice and this permission notice shall be included in all 18 + copies or substantial portions of the Software. 19 + 20 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 + SOFTWARE. 27 + 28 + */ 29 + 30 + class DoxygenAwesomeDarkModeToggle extends HTMLElement { 31 + // SVG icons from https://fonts.google.com/icons 32 + // Licensed under the Apache 2.0 license: 33 + // https://www.apache.org/licenses/LICENSE-2.0.html 34 + static lightModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FCBF00"><rect fill="none" height="24" width="24"/><circle cx="12" cy="12" opacity=".3" r="3"/><path d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg>` 35 + static darkModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FE9700"><rect fill="none" height="24" width="24"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27 C17.45,17.19,14.93,19,12,19c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z" opacity=".3"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg>` 36 + static title = "Toggle Light/Dark Mode" 37 + 38 + static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" 39 + static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" 40 + 41 + static _staticConstructor = function() { 42 + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference) 43 + // Update the color scheme when the browsers preference changes 44 + // without user interaction on the website. 45 + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { 46 + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() 47 + }) 48 + // Update the color scheme when the tab is made visible again. 49 + // It is possible that the appearance was changed in another tab 50 + // while this tab was in the background. 51 + document.addEventListener("visibilitychange", visibilityState => { 52 + if (document.visibilityState === 'visible') { 53 + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() 54 + } 55 + }); 56 + }() 57 + 58 + static init() { 59 + $(function() { 60 + $(document).ready(function() { 61 + const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle') 62 + toggleButton.title = DoxygenAwesomeDarkModeToggle.title 63 + toggleButton.updateIcon() 64 + 65 + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { 66 + toggleButton.updateIcon() 67 + }) 68 + document.addEventListener("visibilitychange", visibilityState => { 69 + if (document.visibilityState === 'visible') { 70 + toggleButton.updateIcon() 71 + } 72 + }); 73 + 74 + $(document).ready(function(){ 75 + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) 76 + }) 77 + $(window).resize(function(){ 78 + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) 79 + }) 80 + }) 81 + }) 82 + } 83 + 84 + constructor() { 85 + super(); 86 + this.onclick=this.toggleDarkMode 87 + } 88 + 89 + /** 90 + * @returns `true` for dark-mode, `false` for light-mode system preference 91 + */ 92 + static get systemPreference() { 93 + return window.matchMedia('(prefers-color-scheme: dark)').matches 94 + } 95 + 96 + /** 97 + * @returns `true` for dark-mode, `false` for light-mode user preference 98 + */ 99 + static get userPreference() { 100 + return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) || 101 + (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) 102 + } 103 + 104 + static set userPreference(userPreference) { 105 + DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference 106 + if(!userPreference) { 107 + if(DoxygenAwesomeDarkModeToggle.systemPreference) { 108 + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true) 109 + } else { 110 + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) 111 + } 112 + } else { 113 + if(!DoxygenAwesomeDarkModeToggle.systemPreference) { 114 + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true) 115 + } else { 116 + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) 117 + } 118 + } 119 + DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged() 120 + } 121 + 122 + static enableDarkMode(enable) { 123 + if(enable) { 124 + DoxygenAwesomeDarkModeToggle.darkModeEnabled = true 125 + document.documentElement.classList.add("dark-mode") 126 + document.documentElement.classList.remove("light-mode") 127 + } else { 128 + DoxygenAwesomeDarkModeToggle.darkModeEnabled = false 129 + document.documentElement.classList.remove("dark-mode") 130 + document.documentElement.classList.add("light-mode") 131 + } 132 + } 133 + 134 + static onSystemPreferenceChanged() { 135 + DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference 136 + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) 137 + } 138 + 139 + static onUserPreferenceChanged() { 140 + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) 141 + } 142 + 143 + toggleDarkMode() { 144 + DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference 145 + this.updateIcon() 146 + } 147 + 148 + updateIcon() { 149 + if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) { 150 + this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon 151 + } else { 152 + this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon 153 + } 154 + } 155 + } 156 + 157 + customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle);
+85
doc/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js
··· 1 + /** 2 + 3 + Doxygen Awesome 4 + https://github.com/jothepro/doxygen-awesome-css 5 + 6 + MIT License 7 + 8 + Copyright (c) 2022 - 2023 jothepro 9 + 10 + Permission is hereby granted, free of charge, to any person obtaining a copy 11 + of this software and associated documentation files (the "Software"), to deal 12 + in the Software without restriction, including without limitation the rights 13 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 + copies of the Software, and to permit persons to whom the Software is 15 + furnished to do so, subject to the following conditions: 16 + 17 + The above copyright notice and this permission notice shall be included in all 18 + copies or substantial portions of the Software. 19 + 20 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 + SOFTWARE. 27 + 28 + */ 29 + 30 + class DoxygenAwesomeFragmentCopyButton extends HTMLElement { 31 + constructor() { 32 + super(); 33 + this.onclick=this.copyContent 34 + } 35 + static title = "Copy to clipboard" 36 + static copyIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>` 37 + static successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>` 38 + static successDuration = 980 39 + static init() { 40 + $(function() { 41 + $(document).ready(function() { 42 + if(navigator.clipboard) { 43 + const fragments = document.getElementsByClassName("fragment") 44 + for(const fragment of fragments) { 45 + const fragmentWrapper = document.createElement("div") 46 + fragmentWrapper.className = "doxygen-awesome-fragment-wrapper" 47 + const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button") 48 + fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon 49 + fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title 50 + 51 + fragment.parentNode.replaceChild(fragmentWrapper, fragment) 52 + fragmentWrapper.appendChild(fragment) 53 + fragmentWrapper.appendChild(fragmentCopyButton) 54 + 55 + } 56 + } 57 + }) 58 + }) 59 + } 60 + 61 + 62 + copyContent() { 63 + const content = this.previousSibling.cloneNode(true) 64 + // filter out line number from file listings 65 + content.querySelectorAll(".lineno, .ttc").forEach((node) => { 66 + node.remove() 67 + }) 68 + let textContent = content.textContent 69 + // remove trailing newlines that appear in file listings 70 + let numberOfTrailingNewlines = 0 71 + while(textContent.charAt(textContent.length - (numberOfTrailingNewlines + 1)) == '\n') { 72 + numberOfTrailingNewlines++; 73 + } 74 + textContent = textContent.substring(0, textContent.length - numberOfTrailingNewlines) 75 + navigator.clipboard.writeText(textContent); 76 + this.classList.add("success") 77 + this.innerHTML = DoxygenAwesomeFragmentCopyButton.successIcon 78 + window.setTimeout(() => { 79 + this.classList.remove("success") 80 + this.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon 81 + }, DoxygenAwesomeFragmentCopyButton.successDuration); 82 + } 83 + } 84 + 85 + customElements.define("doxygen-awesome-fragment-copy-button", DoxygenAwesomeFragmentCopyButton)
+81
doc/doxygen-awesome-css/doxygen-awesome-interactive-toc.js
··· 1 + /** 2 + 3 + Doxygen Awesome 4 + https://github.com/jothepro/doxygen-awesome-css 5 + 6 + MIT License 7 + 8 + Copyright (c) 2022 - 2023 jothepro 9 + 10 + Permission is hereby granted, free of charge, to any person obtaining a copy 11 + of this software and associated documentation files (the "Software"), to deal 12 + in the Software without restriction, including without limitation the rights 13 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 + copies of the Software, and to permit persons to whom the Software is 15 + furnished to do so, subject to the following conditions: 16 + 17 + The above copyright notice and this permission notice shall be included in all 18 + copies or substantial portions of the Software. 19 + 20 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 + SOFTWARE. 27 + 28 + */ 29 + 30 + class DoxygenAwesomeInteractiveToc { 31 + static topOffset = 38 32 + static hideMobileMenu = true 33 + static headers = [] 34 + 35 + static init() { 36 + window.addEventListener("load", () => { 37 + let toc = document.querySelector(".contents > .toc") 38 + if(toc) { 39 + toc.classList.add("interactive") 40 + if(!DoxygenAwesomeInteractiveToc.hideMobileMenu) { 41 + toc.classList.add("open") 42 + } 43 + document.querySelector(".contents > .toc > h3")?.addEventListener("click", () => { 44 + if(toc.classList.contains("open")) { 45 + toc.classList.remove("open") 46 + } else { 47 + toc.classList.add("open") 48 + } 49 + }) 50 + 51 + document.querySelectorAll(".contents > .toc > ul a").forEach((node) => { 52 + let id = node.getAttribute("href").substring(1) 53 + DoxygenAwesomeInteractiveToc.headers.push({ 54 + node: node, 55 + headerNode: document.getElementById(id) 56 + }) 57 + 58 + document.getElementById("doc-content")?.addEventListener("scroll", () => { 59 + DoxygenAwesomeInteractiveToc.update() 60 + }) 61 + }) 62 + DoxygenAwesomeInteractiveToc.update() 63 + } 64 + }) 65 + } 66 + 67 + static update() { 68 + let active = DoxygenAwesomeInteractiveToc.headers[0]?.node 69 + DoxygenAwesomeInteractiveToc.headers.forEach((header) => { 70 + let position = header.headerNode.getBoundingClientRect().top 71 + header.node.classList.remove("active") 72 + header.node.classList.remove("aboveActive") 73 + if(position < DoxygenAwesomeInteractiveToc.topOffset) { 74 + active = header.node 75 + active?.classList.add("aboveActive") 76 + } 77 + }) 78 + active?.classList.add("active") 79 + active?.classList.remove("aboveActive") 80 + } 81 + }
+51
doc/doxygen-awesome-css/doxygen-awesome-paragraph-link.js
··· 1 + /** 2 + 3 + Doxygen Awesome 4 + https://github.com/jothepro/doxygen-awesome-css 5 + 6 + MIT License 7 + 8 + Copyright (c) 2022 - 2023 jothepro 9 + 10 + Permission is hereby granted, free of charge, to any person obtaining a copy 11 + of this software and associated documentation files (the "Software"), to deal 12 + in the Software without restriction, including without limitation the rights 13 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 + copies of the Software, and to permit persons to whom the Software is 15 + furnished to do so, subject to the following conditions: 16 + 17 + The above copyright notice and this permission notice shall be included in all 18 + copies or substantial portions of the Software. 19 + 20 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 + SOFTWARE. 27 + 28 + */ 29 + 30 + class DoxygenAwesomeParagraphLink { 31 + // Icon from https://fonts.google.com/icons 32 + // Licensed under the Apache 2.0 license: 33 + // https://www.apache.org/licenses/LICENSE-2.0.html 34 + static icon = `<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M17 7h-4v2h4c1.65 0 3 1.35 3 3s-1.35 3-3 3h-4v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-6 8H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-2zm-3-4h8v2H8z"/></svg>` 35 + static title = "Permanent Link" 36 + static init() { 37 + $(function() { 38 + $(document).ready(function() { 39 + document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => { 40 + let anchorlink = document.createElement("a") 41 + anchorlink.setAttribute("href", `#${node.getAttribute("id")}`) 42 + anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title) 43 + anchorlink.classList.add("anchorlink") 44 + node.classList.add("anchor") 45 + anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon 46 + node.parentElement.appendChild(anchorlink) 47 + }) 48 + }) 49 + }) 50 + } 51 + }
+40
doc/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css
··· 1 + 2 + /** 3 + 4 + Doxygen Awesome 5 + https://github.com/jothepro/doxygen-awesome-css 6 + 7 + MIT License 8 + 9 + Copyright (c) 2021 - 2023 jothepro 10 + 11 + Permission is hereby granted, free of charge, to any person obtaining a copy 12 + of this software and associated documentation files (the "Software"), to deal 13 + in the Software without restriction, including without limitation the rights 14 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 + copies of the Software, and to permit persons to whom the Software is 16 + furnished to do so, subject to the following conditions: 17 + 18 + The above copyright notice and this permission notice shall be included in all 19 + copies or substantial portions of the Software. 20 + 21 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 27 + SOFTWARE. 28 + 29 + */ 30 + 31 + @media screen and (min-width: 768px) { 32 + 33 + #MSearchBox { 34 + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 1px); 35 + } 36 + 37 + #MSearchField { 38 + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 66px - var(--searchbar-height)); 39 + } 40 + }
+116
doc/doxygen-awesome-css/doxygen-awesome-sidebar-only.css
··· 1 + /** 2 + 3 + Doxygen Awesome 4 + https://github.com/jothepro/doxygen-awesome-css 5 + 6 + MIT License 7 + 8 + Copyright (c) 2021 - 2023 jothepro 9 + 10 + Permission is hereby granted, free of charge, to any person obtaining a copy 11 + of this software and associated documentation files (the "Software"), to deal 12 + in the Software without restriction, including without limitation the rights 13 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 + copies of the Software, and to permit persons to whom the Software is 15 + furnished to do so, subject to the following conditions: 16 + 17 + The above copyright notice and this permission notice shall be included in all 18 + copies or substantial portions of the Software. 19 + 20 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 + SOFTWARE. 27 + 28 + */ 29 + 30 + html { 31 + /* side nav width. MUST be = `TREEVIEW_WIDTH`. 32 + * Make sure it is wide enough to contain the page title (logo + title + version) 33 + */ 34 + --side-nav-fixed-width: 335px; 35 + --menu-display: none; 36 + 37 + --top-height: 120px; 38 + --toc-sticky-top: -25px; 39 + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); 40 + } 41 + 42 + #projectname { 43 + white-space: nowrap; 44 + } 45 + 46 + 47 + @media screen and (min-width: 768px) { 48 + html { 49 + --searchbar-background: var(--page-background-color); 50 + } 51 + 52 + #side-nav { 53 + min-width: var(--side-nav-fixed-width); 54 + max-width: var(--side-nav-fixed-width); 55 + top: var(--top-height); 56 + overflow: visible; 57 + } 58 + 59 + #nav-tree, #side-nav { 60 + height: calc(100vh - var(--top-height)) !important; 61 + } 62 + 63 + #nav-tree { 64 + padding: 0; 65 + } 66 + 67 + #top { 68 + display: block; 69 + border-bottom: none; 70 + height: var(--top-height); 71 + margin-bottom: calc(0px - var(--top-height)); 72 + max-width: var(--side-nav-fixed-width); 73 + overflow: hidden; 74 + background: var(--side-nav-background); 75 + } 76 + #main-nav { 77 + float: left; 78 + padding-right: 0; 79 + } 80 + 81 + .ui-resizable-handle { 82 + cursor: default; 83 + width: 1px !important; 84 + background: var(--separator-color); 85 + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); 86 + } 87 + 88 + #nav-path { 89 + position: fixed; 90 + right: 0; 91 + left: var(--side-nav-fixed-width); 92 + bottom: 0; 93 + width: auto; 94 + } 95 + 96 + #doc-content { 97 + height: calc(100vh - 31px) !important; 98 + padding-bottom: calc(3 * var(--spacing-large)); 99 + padding-top: calc(var(--top-height) - 80px); 100 + box-sizing: border-box; 101 + margin-left: var(--side-nav-fixed-width) !important; 102 + } 103 + 104 + #MSearchBox { 105 + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); 106 + } 107 + 108 + #MSearchField { 109 + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); 110 + } 111 + 112 + #MSearchResultsWindow { 113 + left: var(--spacing-medium) !important; 114 + right: auto; 115 + } 116 + }
+70
doc/doxygen-awesome-css/doxygen-awesome-tabs.js
··· 1 + /** 2 + 3 + Doxygen Awesome 4 + https://github.com/jothepro/doxygen-awesome-css 5 + 6 + MIT License 7 + 8 + Copyright (c) 2023 jothepro 9 + 10 + Permission is hereby granted, free of charge, to any person obtaining a copy 11 + of this software and associated documentation files (the "Software"), to deal 12 + in the Software without restriction, including without limitation the rights 13 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 + copies of the Software, and to permit persons to whom the Software is 15 + furnished to do so, subject to the following conditions: 16 + 17 + The above copyright notice and this permission notice shall be included in all 18 + copies or substantial portions of the Software. 19 + 20 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 + SOFTWARE. 27 + 28 + */ 29 + 30 + class DoxygenAwesomeTabs { 31 + 32 + static init() { 33 + window.addEventListener("load", () => { 34 + document.querySelectorAll(".tabbed:not(:empty)").forEach((tabbed, tabbedIndex) => { 35 + let tabLinkList = [] 36 + tabbed.querySelectorAll("li").forEach((tab, tabIndex) => { 37 + tab.id = "tab_" + tabbedIndex + "_" + tabIndex 38 + let header = tab.querySelector(".tab-title") 39 + let tabLink = document.createElement("button") 40 + tabLink.classList.add("tab-button") 41 + tabLink.appendChild(header) 42 + tabLink.addEventListener("click", () => { 43 + tabbed.querySelectorAll("li").forEach((tab) => { 44 + tab.classList.remove("selected") 45 + }) 46 + tabLinkList.forEach((tabLink) => { 47 + tabLink.classList.remove("active") 48 + }) 49 + tab.classList.add("selected") 50 + tabLink.classList.add("active") 51 + }) 52 + tabLinkList.push(tabLink) 53 + if(tabIndex == 0) { 54 + tab.classList.add("selected") 55 + tabLink.classList.add("active") 56 + } 57 + }) 58 + let tabsOverview = document.createElement("div") 59 + tabsOverview.classList.add("tabs-overview") 60 + let tabsOverviewContainer = document.createElement("div") 61 + tabsOverviewContainer.classList.add("tabs-overview-container") 62 + tabLinkList.forEach((tabLink) => { 63 + tabsOverview.appendChild(tabLink) 64 + }) 65 + tabsOverviewContainer.appendChild(tabsOverview) 66 + tabbed.before(tabsOverviewContainer) 67 + }) 68 + }) 69 + } 70 + }
+2530
doc/doxygen-awesome-css/doxygen-awesome.css
··· 1 + /** 2 + 3 + Doxygen Awesome 4 + https://github.com/jothepro/doxygen-awesome-css 5 + 6 + MIT License 7 + 8 + Copyright (c) 2021 - 2023 jothepro 9 + 10 + Permission is hereby granted, free of charge, to any person obtaining a copy 11 + of this software and associated documentation files (the "Software"), to deal 12 + in the Software without restriction, including without limitation the rights 13 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 + copies of the Software, and to permit persons to whom the Software is 15 + furnished to do so, subject to the following conditions: 16 + 17 + The above copyright notice and this permission notice shall be included in all 18 + copies or substantial portions of the Software. 19 + 20 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 + SOFTWARE. 27 + 28 + */ 29 + 30 + html { 31 + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ 32 + --primary-color: #1779c4; 33 + --primary-dark-color: #335c80; 34 + --primary-light-color: #70b1e9; 35 + 36 + /* page base colors */ 37 + --page-background-color: #ffffff; 38 + --page-foreground-color: #2f4153; 39 + --page-secondary-foreground-color: #6f7e8e; 40 + 41 + /* color for all separators on the website: hr, borders, ... */ 42 + --separator-color: #dedede; 43 + 44 + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ 45 + --border-radius-large: 8px; 46 + --border-radius-small: 4px; 47 + --border-radius-medium: 6px; 48 + 49 + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ 50 + --spacing-small: 5px; 51 + --spacing-medium: 10px; 52 + --spacing-large: 16px; 53 + 54 + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ 55 + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); 56 + 57 + --odd-color: rgba(0,0,0,.028); 58 + 59 + /* font-families. will affect all text on the website 60 + * font-family: the normal font for text, headlines, menus 61 + * font-family-monospace: used for preformatted text in memtitle, code, fragments 62 + */ 63 + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; 64 + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 65 + 66 + /* font sizes */ 67 + --page-font-size: 15.6px; 68 + --navigation-font-size: 14.4px; 69 + --toc-font-size: 13.4px; 70 + --code-font-size: 14px; /* affects code, fragment */ 71 + --title-font-size: 22px; 72 + 73 + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ 74 + --content-line-height: 27px; 75 + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ 76 + --content-maxwidth: 1050px; 77 + --table-line-height: 24px; 78 + --toc-sticky-top: var(--spacing-medium); 79 + --toc-width: 200px; 80 + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); 81 + 82 + /* colors for various content boxes: @warning, @note, @deprecated @bug */ 83 + --warning-color: #f8d1cc; 84 + --warning-color-dark: #b61825; 85 + --warning-color-darker: #75070f; 86 + --note-color: #faf3d8; 87 + --note-color-dark: #f3a600; 88 + --note-color-darker: #5f4204; 89 + --todo-color: #e4f3ff; 90 + --todo-color-dark: #1879C4; 91 + --todo-color-darker: #274a5c; 92 + --deprecated-color: #ecf0f3; 93 + --deprecated-color-dark: #5b6269; 94 + --deprecated-color-darker: #43454a; 95 + --bug-color: #e4dafd; 96 + --bug-color-dark: #5b2bdd; 97 + --bug-color-darker: #2a0d72; 98 + --invariant-color: #d8f1e3; 99 + --invariant-color-dark: #44b86f; 100 + --invariant-color-darker: #265532; 101 + 102 + /* blockquote colors */ 103 + --blockquote-background: #f8f9fa; 104 + --blockquote-foreground: #636568; 105 + 106 + /* table colors */ 107 + --tablehead-background: #f1f1f1; 108 + --tablehead-foreground: var(--page-foreground-color); 109 + 110 + /* menu-display: block | none 111 + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. 112 + * `GENERATE_TREEVIEW` MUST be enabled! 113 + */ 114 + --menu-display: block; 115 + 116 + --menu-focus-foreground: var(--page-background-color); 117 + --menu-focus-background: var(--primary-color); 118 + --menu-selected-background: rgba(0,0,0,.05); 119 + 120 + 121 + --header-background: var(--page-background-color); 122 + --header-foreground: var(--page-foreground-color); 123 + 124 + /* searchbar colors */ 125 + --searchbar-background: var(--side-nav-background); 126 + --searchbar-foreground: var(--page-foreground-color); 127 + 128 + /* searchbar size 129 + * (`searchbar-width` is only applied on screens >= 768px. 130 + * on smaller screens the searchbar will always fill the entire screen width) */ 131 + --searchbar-height: 33px; 132 + --searchbar-width: 210px; 133 + --searchbar-border-radius: var(--searchbar-height); 134 + 135 + /* code block colors */ 136 + --code-background: #f5f5f5; 137 + --code-foreground: var(--page-foreground-color); 138 + 139 + /* fragment colors */ 140 + --fragment-background: #F8F9FA; 141 + --fragment-foreground: #37474F; 142 + --fragment-keyword: #bb6bb2; 143 + --fragment-keywordtype: #8258b3; 144 + --fragment-keywordflow: #d67c3b; 145 + --fragment-token: #438a59; 146 + --fragment-comment: #969696; 147 + --fragment-link: #5383d6; 148 + --fragment-preprocessor: #46aaa5; 149 + --fragment-linenumber-color: #797979; 150 + --fragment-linenumber-background: #f4f4f5; 151 + --fragment-linenumber-border: #e3e5e7; 152 + --fragment-lineheight: 20px; 153 + 154 + /* sidebar navigation (treeview) colors */ 155 + --side-nav-background: #fbfbfb; 156 + --side-nav-foreground: var(--page-foreground-color); 157 + --side-nav-arrow-opacity: 0; 158 + --side-nav-arrow-hover-opacity: 0.9; 159 + 160 + --toc-background: var(--side-nav-background); 161 + --toc-foreground: var(--side-nav-foreground); 162 + 163 + /* height of an item in any tree / collapsible table */ 164 + --tree-item-height: 30px; 165 + 166 + --memname-font-size: var(--code-font-size); 167 + --memtitle-font-size: 18px; 168 + 169 + --webkit-scrollbar-size: 7px; 170 + --webkit-scrollbar-padding: 4px; 171 + --webkit-scrollbar-color: var(--separator-color); 172 + } 173 + 174 + @media screen and (max-width: 767px) { 175 + html { 176 + --page-font-size: 16px; 177 + --navigation-font-size: 16px; 178 + --toc-font-size: 15px; 179 + --code-font-size: 15px; /* affects code, fragment */ 180 + --title-font-size: 22px; 181 + } 182 + } 183 + 184 + @media (prefers-color-scheme: dark) { 185 + html:not(.light-mode) { 186 + color-scheme: dark; 187 + 188 + --primary-color: #1982d2; 189 + --primary-dark-color: #86a9c4; 190 + --primary-light-color: #4779ac; 191 + 192 + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); 193 + 194 + --odd-color: rgba(100,100,100,.06); 195 + 196 + --menu-selected-background: rgba(0,0,0,.4); 197 + 198 + --page-background-color: #1C1D1F; 199 + --page-foreground-color: #d2dbde; 200 + --page-secondary-foreground-color: #859399; 201 + --separator-color: #38393b; 202 + --side-nav-background: #252628; 203 + 204 + --code-background: #2a2c2f; 205 + 206 + --tablehead-background: #2a2c2f; 207 + 208 + --blockquote-background: #222325; 209 + --blockquote-foreground: #7e8c92; 210 + 211 + --warning-color: #2e1917; 212 + --warning-color-dark: #ad2617; 213 + --warning-color-darker: #f5b1aa; 214 + --note-color: #3b2e04; 215 + --note-color-dark: #f1b602; 216 + --note-color-darker: #ceb670; 217 + --todo-color: #163750; 218 + --todo-color-dark: #1982D2; 219 + --todo-color-darker: #dcf0fa; 220 + --deprecated-color: #2e323b; 221 + --deprecated-color-dark: #738396; 222 + --deprecated-color-darker: #abb0bd; 223 + --bug-color: #2a2536; 224 + --bug-color-dark: #7661b3; 225 + --bug-color-darker: #ae9ed6; 226 + --invariant-color: #303a35; 227 + --invariant-color-dark: #76ce96; 228 + --invariant-color-darker: #cceed5; 229 + 230 + --fragment-background: #282c34; 231 + --fragment-foreground: #dbe4eb; 232 + --fragment-keyword: #cc99cd; 233 + --fragment-keywordtype: #ab99cd; 234 + --fragment-keywordflow: #e08000; 235 + --fragment-token: #7ec699; 236 + --fragment-comment: #999999; 237 + --fragment-link: #98c0e3; 238 + --fragment-preprocessor: #65cabe; 239 + --fragment-linenumber-color: #cccccc; 240 + --fragment-linenumber-background: #35393c; 241 + --fragment-linenumber-border: #1f1f1f; 242 + } 243 + } 244 + 245 + /* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ 246 + html.dark-mode { 247 + color-scheme: dark; 248 + 249 + --primary-color: #1982d2; 250 + --primary-dark-color: #86a9c4; 251 + --primary-light-color: #4779ac; 252 + 253 + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); 254 + 255 + --odd-color: rgba(100,100,100,.06); 256 + 257 + --menu-selected-background: rgba(0,0,0,.4); 258 + 259 + --page-background-color: #1C1D1F; 260 + --page-foreground-color: #d2dbde; 261 + --page-secondary-foreground-color: #859399; 262 + --separator-color: #38393b; 263 + --side-nav-background: #252628; 264 + 265 + --code-background: #2a2c2f; 266 + 267 + --tablehead-background: #2a2c2f; 268 + 269 + --blockquote-background: #222325; 270 + --blockquote-foreground: #7e8c92; 271 + 272 + --warning-color: #2e1917; 273 + --warning-color-dark: #ad2617; 274 + --warning-color-darker: #f5b1aa; 275 + --note-color: #3b2e04; 276 + --note-color-dark: #f1b602; 277 + --note-color-darker: #ceb670; 278 + --todo-color: #163750; 279 + --todo-color-dark: #1982D2; 280 + --todo-color-darker: #dcf0fa; 281 + --deprecated-color: #2e323b; 282 + --deprecated-color-dark: #738396; 283 + --deprecated-color-darker: #abb0bd; 284 + --bug-color: #2a2536; 285 + --bug-color-dark: #7661b3; 286 + --bug-color-darker: #ae9ed6; 287 + --invariant-color: #303a35; 288 + --invariant-color-dark: #76ce96; 289 + --invariant-color-darker: #cceed5; 290 + 291 + --fragment-background: #282c34; 292 + --fragment-foreground: #dbe4eb; 293 + --fragment-keyword: #cc99cd; 294 + --fragment-keywordtype: #ab99cd; 295 + --fragment-keywordflow: #e08000; 296 + --fragment-token: #7ec699; 297 + --fragment-comment: #999999; 298 + --fragment-link: #98c0e3; 299 + --fragment-preprocessor: #65cabe; 300 + --fragment-linenumber-color: #cccccc; 301 + --fragment-linenumber-background: #35393c; 302 + --fragment-linenumber-border: #1f1f1f; 303 + } 304 + 305 + body { 306 + color: var(--page-foreground-color); 307 + background-color: var(--page-background-color); 308 + font-size: var(--page-font-size); 309 + } 310 + 311 + body, table, div, p, dl, #nav-tree .label, .title, 312 + .sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, 313 + .SelectItem, #MSearchField, .navpath li.navelem a, 314 + .navpath li.navelem a:hover, p.reference, p.definition { 315 + font-family: var(--font-family); 316 + } 317 + 318 + h1, h2, h3, h4, h5 { 319 + margin-top: .9em; 320 + font-weight: 600; 321 + line-height: initial; 322 + } 323 + 324 + p, div, table, dl, p.reference, p.definition { 325 + font-size: var(--page-font-size); 326 + } 327 + 328 + p.reference, p.definition { 329 + color: var(--page-secondary-foreground-color); 330 + } 331 + 332 + a:link, a:visited, a:hover, a:focus, a:active { 333 + color: var(--primary-color) !important; 334 + font-weight: 500; 335 + } 336 + 337 + a.anchor { 338 + scroll-margin-top: var(--spacing-large); 339 + display: block; 340 + } 341 + 342 + /* 343 + Title and top navigation 344 + */ 345 + 346 + #top { 347 + background: var(--header-background); 348 + border-bottom: 1px solid var(--separator-color); 349 + } 350 + 351 + @media screen and (min-width: 768px) { 352 + #top { 353 + display: flex; 354 + flex-wrap: wrap; 355 + justify-content: space-between; 356 + align-items: center; 357 + } 358 + } 359 + 360 + #main-nav { 361 + flex-grow: 5; 362 + padding: var(--spacing-small) var(--spacing-medium); 363 + } 364 + 365 + #titlearea { 366 + width: auto; 367 + padding: var(--spacing-medium) var(--spacing-large); 368 + background: none; 369 + color: var(--header-foreground); 370 + border-bottom: none; 371 + } 372 + 373 + @media screen and (max-width: 767px) { 374 + #titlearea { 375 + padding-bottom: var(--spacing-small); 376 + } 377 + } 378 + 379 + #titlearea table tbody tr { 380 + height: auto !important; 381 + } 382 + 383 + #projectname { 384 + font-size: var(--title-font-size); 385 + font-weight: 600; 386 + } 387 + 388 + #projectnumber { 389 + font-family: inherit; 390 + font-size: 60%; 391 + } 392 + 393 + #projectbrief { 394 + font-family: inherit; 395 + font-size: 80%; 396 + } 397 + 398 + #projectlogo { 399 + vertical-align: middle; 400 + } 401 + 402 + #projectlogo img { 403 + max-height: calc(var(--title-font-size) * 2); 404 + margin-right: var(--spacing-small); 405 + } 406 + 407 + .sm-dox, .tabs, .tabs2, .tabs3 { 408 + background: none; 409 + padding: 0; 410 + } 411 + 412 + .tabs, .tabs2, .tabs3 { 413 + border-bottom: 1px solid var(--separator-color); 414 + margin-bottom: -1px; 415 + } 416 + 417 + .main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { 418 + background: var(--page-secondary-foreground-color); 419 + } 420 + 421 + @media screen and (max-width: 767px) { 422 + .sm-dox a span.sub-arrow { 423 + background: var(--code-background); 424 + } 425 + 426 + #main-menu a.has-submenu span.sub-arrow { 427 + color: var(--page-secondary-foreground-color); 428 + border-radius: var(--border-radius-medium); 429 + } 430 + 431 + #main-menu a.has-submenu:hover span.sub-arrow { 432 + color: var(--page-foreground-color); 433 + } 434 + } 435 + 436 + @media screen and (min-width: 768px) { 437 + .sm-dox li, .tablist li { 438 + display: var(--menu-display); 439 + } 440 + 441 + .sm-dox a span.sub-arrow { 442 + border-color: var(--header-foreground) transparent transparent transparent; 443 + } 444 + 445 + .sm-dox a:hover span.sub-arrow { 446 + border-color: var(--menu-focus-foreground) transparent transparent transparent; 447 + } 448 + 449 + .sm-dox ul a span.sub-arrow { 450 + border-color: transparent transparent transparent var(--page-foreground-color); 451 + } 452 + 453 + .sm-dox ul a:hover span.sub-arrow { 454 + border-color: transparent transparent transparent var(--menu-focus-foreground); 455 + } 456 + } 457 + 458 + .sm-dox ul { 459 + background: var(--page-background-color); 460 + box-shadow: var(--box-shadow); 461 + border: 1px solid var(--separator-color); 462 + border-radius: var(--border-radius-medium) !important; 463 + padding: var(--spacing-small); 464 + animation: ease-out 150ms slideInMenu; 465 + } 466 + 467 + @keyframes slideInMenu { 468 + from { 469 + opacity: 0; 470 + transform: translate(0px, -2px); 471 + } 472 + 473 + to { 474 + opacity: 1; 475 + transform: translate(0px, 0px); 476 + } 477 + } 478 + 479 + .sm-dox ul a { 480 + color: var(--page-foreground-color) !important; 481 + background: var(--page-background-color); 482 + font-size: var(--navigation-font-size); 483 + } 484 + 485 + .sm-dox>li>ul:after { 486 + border-bottom-color: var(--page-background-color) !important; 487 + } 488 + 489 + .sm-dox>li>ul:before { 490 + border-bottom-color: var(--separator-color) !important; 491 + } 492 + 493 + .sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { 494 + font-size: var(--navigation-font-size) !important; 495 + color: var(--menu-focus-foreground) !important; 496 + text-shadow: none; 497 + background-color: var(--menu-focus-background); 498 + border-radius: var(--border-radius-small) !important; 499 + } 500 + 501 + .sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { 502 + text-shadow: none; 503 + background: transparent; 504 + background-image: none !important; 505 + color: var(--header-foreground) !important; 506 + font-weight: normal; 507 + font-size: var(--navigation-font-size); 508 + border-radius: var(--border-radius-small) !important; 509 + } 510 + 511 + .sm-dox a:focus { 512 + outline: auto; 513 + } 514 + 515 + .sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { 516 + text-shadow: none; 517 + font-weight: normal; 518 + background: var(--menu-focus-background); 519 + color: var(--menu-focus-foreground) !important; 520 + border-radius: var(--border-radius-small) !important; 521 + font-size: var(--navigation-font-size); 522 + } 523 + 524 + .tablist li.current { 525 + border-radius: var(--border-radius-small); 526 + background: var(--menu-selected-background); 527 + } 528 + 529 + .tablist li { 530 + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); 531 + } 532 + 533 + .tablist a { 534 + padding: 0 var(--spacing-large); 535 + } 536 + 537 + 538 + /* 539 + Search box 540 + */ 541 + 542 + #MSearchBox { 543 + height: var(--searchbar-height); 544 + background: var(--searchbar-background); 545 + border-radius: var(--searchbar-border-radius); 546 + border: 1px solid var(--separator-color); 547 + overflow: hidden; 548 + width: var(--searchbar-width); 549 + position: relative; 550 + box-shadow: none; 551 + display: block; 552 + margin-top: 0; 553 + } 554 + 555 + /* until Doxygen 1.9.4 */ 556 + .left img#MSearchSelect { 557 + left: 0; 558 + user-select: none; 559 + padding-left: 8px; 560 + } 561 + 562 + /* Doxygen 1.9.5 */ 563 + .left span#MSearchSelect { 564 + left: 0; 565 + user-select: none; 566 + margin-left: 8px; 567 + padding: 0; 568 + } 569 + 570 + .left #MSearchSelect[src$=".png"] { 571 + padding-left: 0 572 + } 573 + 574 + .SelectionMark { 575 + user-select: none; 576 + } 577 + 578 + .tabs .left #MSearchSelect { 579 + padding-left: 0; 580 + } 581 + 582 + .tabs #MSearchBox { 583 + position: absolute; 584 + right: var(--spacing-medium); 585 + } 586 + 587 + @media screen and (max-width: 767px) { 588 + .tabs #MSearchBox { 589 + position: relative; 590 + right: 0; 591 + margin-left: var(--spacing-medium); 592 + margin-top: 0; 593 + } 594 + } 595 + 596 + #MSearchSelectWindow, #MSearchResultsWindow { 597 + z-index: 9999; 598 + } 599 + 600 + #MSearchBox.MSearchBoxActive { 601 + border-color: var(--primary-color); 602 + box-shadow: inset 0 0 0 1px var(--primary-color); 603 + } 604 + 605 + #main-menu > li:last-child { 606 + margin-right: 0; 607 + } 608 + 609 + @media screen and (max-width: 767px) { 610 + #main-menu > li:last-child { 611 + height: 50px; 612 + } 613 + } 614 + 615 + #MSearchField { 616 + font-size: var(--navigation-font-size); 617 + height: calc(var(--searchbar-height) - 2px); 618 + background: transparent; 619 + width: calc(var(--searchbar-width) - 64px); 620 + } 621 + 622 + .MSearchBoxActive #MSearchField { 623 + color: var(--searchbar-foreground); 624 + } 625 + 626 + #MSearchSelect { 627 + top: calc(calc(var(--searchbar-height) / 2) - 11px); 628 + } 629 + 630 + #MSearchBox span.left, #MSearchBox span.right { 631 + background: none; 632 + background-image: none; 633 + } 634 + 635 + #MSearchBox span.right { 636 + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); 637 + position: absolute; 638 + right: var(--spacing-small); 639 + } 640 + 641 + .tabs #MSearchBox span.right { 642 + top: calc(calc(var(--searchbar-height) / 2) - 12px); 643 + } 644 + 645 + @keyframes slideInSearchResults { 646 + from { 647 + opacity: 0; 648 + transform: translate(0, 15px); 649 + } 650 + 651 + to { 652 + opacity: 1; 653 + transform: translate(0, 20px); 654 + } 655 + } 656 + 657 + #MSearchResultsWindow { 658 + left: auto !important; 659 + right: var(--spacing-medium); 660 + border-radius: var(--border-radius-large); 661 + border: 1px solid var(--separator-color); 662 + transform: translate(0, 20px); 663 + box-shadow: var(--box-shadow); 664 + animation: ease-out 280ms slideInSearchResults; 665 + background: var(--page-background-color); 666 + } 667 + 668 + iframe#MSearchResults { 669 + margin: 4px; 670 + } 671 + 672 + iframe { 673 + color-scheme: normal; 674 + } 675 + 676 + @media (prefers-color-scheme: dark) { 677 + html:not(.light-mode) iframe#MSearchResults { 678 + filter: invert() hue-rotate(180deg); 679 + } 680 + } 681 + 682 + html.dark-mode iframe#MSearchResults { 683 + filter: invert() hue-rotate(180deg); 684 + } 685 + 686 + #MSearchResults .SRPage { 687 + background-color: transparent; 688 + } 689 + 690 + #MSearchResults .SRPage .SREntry { 691 + font-size: 10pt; 692 + padding: var(--spacing-small) var(--spacing-medium); 693 + } 694 + 695 + #MSearchSelectWindow { 696 + border: 1px solid var(--separator-color); 697 + border-radius: var(--border-radius-medium); 698 + box-shadow: var(--box-shadow); 699 + background: var(--page-background-color); 700 + padding-top: var(--spacing-small); 701 + padding-bottom: var(--spacing-small); 702 + } 703 + 704 + #MSearchSelectWindow a.SelectItem { 705 + font-size: var(--navigation-font-size); 706 + line-height: var(--content-line-height); 707 + margin: 0 var(--spacing-small); 708 + border-radius: var(--border-radius-small); 709 + color: var(--page-foreground-color) !important; 710 + font-weight: normal; 711 + } 712 + 713 + #MSearchSelectWindow a.SelectItem:hover { 714 + background: var(--menu-focus-background); 715 + color: var(--menu-focus-foreground) !important; 716 + } 717 + 718 + @media screen and (max-width: 767px) { 719 + #MSearchBox { 720 + margin-top: var(--spacing-medium); 721 + margin-bottom: var(--spacing-medium); 722 + width: calc(100vw - 30px); 723 + } 724 + 725 + #main-menu > li:last-child { 726 + float: none !important; 727 + } 728 + 729 + #MSearchField { 730 + width: calc(100vw - 110px); 731 + } 732 + 733 + @keyframes slideInSearchResultsMobile { 734 + from { 735 + opacity: 0; 736 + transform: translate(0, 15px); 737 + } 738 + 739 + to { 740 + opacity: 1; 741 + transform: translate(0, 20px); 742 + } 743 + } 744 + 745 + #MSearchResultsWindow { 746 + left: var(--spacing-medium) !important; 747 + right: var(--spacing-medium); 748 + overflow: auto; 749 + transform: translate(0, 20px); 750 + animation: ease-out 280ms slideInSearchResultsMobile; 751 + width: auto !important; 752 + } 753 + 754 + /* 755 + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 756 + */ 757 + label.main-menu-btn ~ #searchBoxPos1 { 758 + top: 3px !important; 759 + right: 6px !important; 760 + left: 45px; 761 + display: flex; 762 + } 763 + 764 + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { 765 + margin-top: 0; 766 + margin-bottom: 0; 767 + flex-grow: 2; 768 + float: left; 769 + } 770 + } 771 + 772 + /* 773 + Tree view 774 + */ 775 + 776 + #side-nav { 777 + padding: 0 !important; 778 + background: var(--side-nav-background); 779 + min-width: 8px; 780 + max-width: 50vw; 781 + } 782 + 783 + @media screen and (max-width: 767px) { 784 + #side-nav { 785 + display: none; 786 + } 787 + 788 + #doc-content { 789 + margin-left: 0 !important; 790 + } 791 + } 792 + 793 + #nav-tree { 794 + background: transparent; 795 + margin-right: 1px; 796 + } 797 + 798 + #nav-tree .label { 799 + font-size: var(--navigation-font-size); 800 + } 801 + 802 + #nav-tree .item { 803 + height: var(--tree-item-height); 804 + line-height: var(--tree-item-height); 805 + } 806 + 807 + #nav-sync { 808 + bottom: 12px; 809 + right: 12px; 810 + top: auto !important; 811 + user-select: none; 812 + } 813 + 814 + #nav-tree .selected { 815 + text-shadow: none; 816 + background-image: none; 817 + background-color: transparent; 818 + position: relative; 819 + } 820 + 821 + #nav-tree .selected::after { 822 + content: ""; 823 + position: absolute; 824 + top: 1px; 825 + bottom: 1px; 826 + left: 0; 827 + width: 4px; 828 + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; 829 + background: var(--primary-color); 830 + } 831 + 832 + 833 + #nav-tree a { 834 + color: var(--side-nav-foreground) !important; 835 + font-weight: normal; 836 + } 837 + 838 + #nav-tree a:focus { 839 + outline-style: auto; 840 + } 841 + 842 + #nav-tree .arrow { 843 + opacity: var(--side-nav-arrow-opacity); 844 + } 845 + 846 + .arrow { 847 + color: inherit; 848 + cursor: pointer; 849 + font-size: 45%; 850 + vertical-align: middle; 851 + margin-right: 2px; 852 + font-family: serif; 853 + height: auto; 854 + text-align: right; 855 + } 856 + 857 + #nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { 858 + opacity: var(--side-nav-arrow-hover-opacity); 859 + } 860 + 861 + #nav-tree .selected a { 862 + color: var(--primary-color) !important; 863 + font-weight: bolder; 864 + font-weight: 600; 865 + } 866 + 867 + .ui-resizable-e { 868 + width: 4px; 869 + background: transparent; 870 + box-shadow: inset -1px 0 0 0 var(--separator-color); 871 + } 872 + 873 + /* 874 + Contents 875 + */ 876 + 877 + div.header { 878 + border-bottom: 1px solid var(--separator-color); 879 + background-color: var(--page-background-color); 880 + background-image: none; 881 + } 882 + 883 + @media screen and (min-width: 1000px) { 884 + #doc-content > div > div.contents, 885 + .PageDoc > div.contents { 886 + display: flex; 887 + flex-direction: row-reverse; 888 + flex-wrap: nowrap; 889 + align-items: flex-start; 890 + } 891 + 892 + div.contents .textblock { 893 + min-width: 200px; 894 + flex-grow: 1; 895 + } 896 + } 897 + 898 + div.contents, div.header .title, div.header .summary { 899 + max-width: var(--content-maxwidth); 900 + } 901 + 902 + div.contents, div.header .title { 903 + line-height: initial; 904 + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; 905 + } 906 + 907 + div.header .summary { 908 + margin: var(--spacing-medium) auto 0 auto; 909 + } 910 + 911 + div.headertitle { 912 + padding: 0; 913 + } 914 + 915 + div.header .title { 916 + font-weight: 600; 917 + font-size: 225%; 918 + padding: var(--spacing-medium) var(--spacing-large); 919 + word-break: break-word; 920 + } 921 + 922 + div.header .summary { 923 + width: auto; 924 + display: block; 925 + float: none; 926 + padding: 0 var(--spacing-large); 927 + } 928 + 929 + td.memSeparator { 930 + border-color: var(--separator-color); 931 + } 932 + 933 + span.mlabel { 934 + background: var(--primary-color); 935 + border: none; 936 + padding: 4px 9px; 937 + border-radius: 12px; 938 + margin-right: var(--spacing-medium); 939 + } 940 + 941 + span.mlabel:last-of-type { 942 + margin-right: 2px; 943 + } 944 + 945 + div.contents { 946 + padding: 0 var(--spacing-large); 947 + } 948 + 949 + div.contents p, div.contents li { 950 + line-height: var(--content-line-height); 951 + } 952 + 953 + div.contents div.dyncontent { 954 + margin: var(--spacing-medium) 0; 955 + } 956 + 957 + @media (prefers-color-scheme: dark) { 958 + html:not(.light-mode) div.contents div.dyncontent img, 959 + html:not(.light-mode) div.contents center img, 960 + html:not(.light-mode) div.contents > table img, 961 + html:not(.light-mode) div.contents div.dyncontent iframe, 962 + html:not(.light-mode) div.contents center iframe, 963 + html:not(.light-mode) div.contents table iframe, 964 + html:not(.light-mode) div.contents .dotgraph iframe { 965 + filter: brightness(89%) hue-rotate(180deg) invert(); 966 + } 967 + } 968 + 969 + html.dark-mode div.contents div.dyncontent img, 970 + html.dark-mode div.contents center img, 971 + html.dark-mode div.contents > table img, 972 + html.dark-mode div.contents div.dyncontent iframe, 973 + html.dark-mode div.contents center iframe, 974 + html.dark-mode div.contents table iframe, 975 + html.dark-mode div.contents .dotgraph iframe 976 + { 977 + filter: brightness(89%) hue-rotate(180deg) invert(); 978 + } 979 + 980 + h2.groupheader { 981 + border-bottom: 0px; 982 + color: var(--page-foreground-color); 983 + box-shadow: 984 + 100px 0 var(--page-background-color), 985 + -100px 0 var(--page-background-color), 986 + 100px 0.75px var(--separator-color), 987 + -100px 0.75px var(--separator-color), 988 + 500px 0 var(--page-background-color), 989 + -500px 0 var(--page-background-color), 990 + 500px 0.75px var(--separator-color), 991 + -500px 0.75px var(--separator-color), 992 + 900px 0 var(--page-background-color), 993 + -900px 0 var(--page-background-color), 994 + 900px 0.75px var(--separator-color), 995 + -900px 0.75px var(--separator-color), 996 + 1400px 0 var(--page-background-color), 997 + -1400px 0 var(--page-background-color), 998 + 1400px 0.75px var(--separator-color), 999 + -1400px 0.75px var(--separator-color), 1000 + 1900px 0 var(--page-background-color), 1001 + -1900px 0 var(--page-background-color), 1002 + 1900px 0.75px var(--separator-color), 1003 + -1900px 0.75px var(--separator-color); 1004 + } 1005 + 1006 + blockquote { 1007 + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); 1008 + padding: var(--spacing-small) var(--spacing-large); 1009 + background: var(--blockquote-background); 1010 + color: var(--blockquote-foreground); 1011 + border-left: 0; 1012 + overflow: visible; 1013 + border-radius: var(--border-radius-medium); 1014 + overflow: visible; 1015 + position: relative; 1016 + } 1017 + 1018 + blockquote::before, blockquote::after { 1019 + font-weight: bold; 1020 + font-family: serif; 1021 + font-size: 360%; 1022 + opacity: .15; 1023 + position: absolute; 1024 + } 1025 + 1026 + blockquote::before { 1027 + content: "“"; 1028 + left: -10px; 1029 + top: 4px; 1030 + } 1031 + 1032 + blockquote::after { 1033 + content: "”"; 1034 + right: -8px; 1035 + bottom: -25px; 1036 + } 1037 + 1038 + blockquote p { 1039 + margin: var(--spacing-small) 0 var(--spacing-medium) 0; 1040 + } 1041 + .paramname { 1042 + font-weight: 600; 1043 + color: var(--primary-dark-color); 1044 + } 1045 + 1046 + .paramname > code { 1047 + border: 0; 1048 + } 1049 + 1050 + table.params .paramname { 1051 + font-weight: 600; 1052 + font-family: var(--font-family-monospace); 1053 + font-size: var(--code-font-size); 1054 + padding-right: var(--spacing-small); 1055 + line-height: var(--table-line-height); 1056 + } 1057 + 1058 + h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { 1059 + text-shadow: 0 0 15px var(--primary-light-color); 1060 + } 1061 + 1062 + .alphachar a { 1063 + color: var(--page-foreground-color); 1064 + } 1065 + 1066 + .dotgraph { 1067 + max-width: 100%; 1068 + overflow-x: scroll; 1069 + } 1070 + 1071 + .dotgraph .caption { 1072 + position: sticky; 1073 + left: 0; 1074 + } 1075 + 1076 + /* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ 1077 + .interactive_dotgraph .dotgraph iframe { 1078 + max-width: 100%; 1079 + } 1080 + 1081 + /* 1082 + Table of Contents 1083 + */ 1084 + 1085 + div.contents .toc { 1086 + max-height: var(--toc-max-height); 1087 + min-width: var(--toc-width); 1088 + border: 0; 1089 + border-left: 1px solid var(--separator-color); 1090 + border-radius: 0; 1091 + background-color: transparent; 1092 + box-shadow: none; 1093 + position: sticky; 1094 + top: var(--toc-sticky-top); 1095 + padding: 0 var(--spacing-large); 1096 + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); 1097 + } 1098 + 1099 + div.toc h3 { 1100 + color: var(--toc-foreground); 1101 + font-size: var(--navigation-font-size); 1102 + margin: var(--spacing-large) 0 var(--spacing-medium) 0; 1103 + } 1104 + 1105 + div.toc li { 1106 + padding: 0; 1107 + background: none; 1108 + line-height: var(--toc-font-size); 1109 + margin: var(--toc-font-size) 0 0 0; 1110 + } 1111 + 1112 + div.toc li::before { 1113 + display: none; 1114 + } 1115 + 1116 + div.toc ul { 1117 + margin-top: 0 1118 + } 1119 + 1120 + div.toc li a { 1121 + font-size: var(--toc-font-size); 1122 + color: var(--page-foreground-color) !important; 1123 + text-decoration: none; 1124 + } 1125 + 1126 + div.toc li a:hover, div.toc li a.active { 1127 + color: var(--primary-color) !important; 1128 + } 1129 + 1130 + div.toc li a.aboveActive { 1131 + color: var(--page-secondary-foreground-color) !important; 1132 + } 1133 + 1134 + 1135 + @media screen and (max-width: 999px) { 1136 + div.contents .toc { 1137 + max-height: 45vh; 1138 + float: none; 1139 + width: auto; 1140 + margin: 0 0 var(--spacing-medium) 0; 1141 + position: relative; 1142 + top: 0; 1143 + position: relative; 1144 + border: 1px solid var(--separator-color); 1145 + border-radius: var(--border-radius-medium); 1146 + background-color: var(--toc-background); 1147 + box-shadow: var(--box-shadow); 1148 + } 1149 + 1150 + div.contents .toc.interactive { 1151 + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); 1152 + overflow: hidden; 1153 + } 1154 + 1155 + div.contents .toc > h3 { 1156 + -webkit-tap-highlight-color: transparent; 1157 + cursor: pointer; 1158 + position: sticky; 1159 + top: 0; 1160 + background-color: var(--toc-background); 1161 + margin: 0; 1162 + padding: var(--spacing-large) 0; 1163 + display: block; 1164 + } 1165 + 1166 + div.contents .toc.interactive > h3::before { 1167 + content: ""; 1168 + width: 0; 1169 + height: 0; 1170 + border-left: 4px solid transparent; 1171 + border-right: 4px solid transparent; 1172 + border-top: 5px solid var(--primary-color); 1173 + display: inline-block; 1174 + margin-right: var(--spacing-small); 1175 + margin-bottom: calc(var(--navigation-font-size) / 4); 1176 + transform: rotate(-90deg); 1177 + transition: transform 0.25s ease-out; 1178 + } 1179 + 1180 + div.contents .toc.interactive.open > h3::before { 1181 + transform: rotate(0deg); 1182 + } 1183 + 1184 + div.contents .toc.interactive.open { 1185 + max-height: 45vh; 1186 + overflow: auto; 1187 + transition: max-height 0.2s ease-in-out; 1188 + } 1189 + 1190 + div.contents .toc a, div.contents .toc a.active { 1191 + color: var(--primary-color) !important; 1192 + } 1193 + 1194 + div.contents .toc a:hover { 1195 + text-decoration: underline; 1196 + } 1197 + } 1198 + 1199 + /* 1200 + Code & Fragments 1201 + */ 1202 + 1203 + code, div.fragment, pre.fragment { 1204 + border-radius: var(--border-radius-small); 1205 + border: 1px solid var(--separator-color); 1206 + overflow: hidden; 1207 + } 1208 + 1209 + code { 1210 + display: inline; 1211 + background: var(--code-background); 1212 + color: var(--code-foreground); 1213 + padding: 2px 6px; 1214 + } 1215 + 1216 + div.fragment, pre.fragment { 1217 + margin: var(--spacing-medium) 0; 1218 + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); 1219 + background: var(--fragment-background); 1220 + color: var(--fragment-foreground); 1221 + overflow-x: auto; 1222 + } 1223 + 1224 + @media screen and (max-width: 767px) { 1225 + div.fragment, pre.fragment { 1226 + border-top-right-radius: 0; 1227 + border-bottom-right-radius: 0; 1228 + border-right: 0; 1229 + } 1230 + 1231 + .contents > div.fragment, 1232 + .textblock > div.fragment, 1233 + .textblock > pre.fragment, 1234 + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, 1235 + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, 1236 + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment { 1237 + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); 1238 + border-radius: 0; 1239 + border-left: 0; 1240 + } 1241 + 1242 + .textblock li > .fragment, 1243 + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { 1244 + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); 1245 + } 1246 + 1247 + .memdoc li > .fragment, 1248 + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { 1249 + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); 1250 + } 1251 + 1252 + .textblock ul, .memdoc ul { 1253 + overflow: initial; 1254 + } 1255 + 1256 + .memdoc > div.fragment, 1257 + .memdoc > pre.fragment, 1258 + dl dd > div.fragment, 1259 + dl dd pre.fragment, 1260 + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, 1261 + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, 1262 + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, 1263 + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { 1264 + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); 1265 + border-radius: 0; 1266 + border-left: 0; 1267 + } 1268 + } 1269 + 1270 + code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { 1271 + font-family: var(--font-family-monospace); 1272 + font-size: var(--code-font-size) !important; 1273 + } 1274 + 1275 + div.line:after { 1276 + margin-right: var(--spacing-medium); 1277 + } 1278 + 1279 + div.fragment .line, pre.fragment { 1280 + white-space: pre; 1281 + word-wrap: initial; 1282 + line-height: var(--fragment-lineheight); 1283 + } 1284 + 1285 + div.fragment span.keyword { 1286 + color: var(--fragment-keyword); 1287 + } 1288 + 1289 + div.fragment span.keywordtype { 1290 + color: var(--fragment-keywordtype); 1291 + } 1292 + 1293 + div.fragment span.keywordflow { 1294 + color: var(--fragment-keywordflow); 1295 + } 1296 + 1297 + div.fragment span.stringliteral { 1298 + color: var(--fragment-token) 1299 + } 1300 + 1301 + div.fragment span.comment { 1302 + color: var(--fragment-comment); 1303 + } 1304 + 1305 + div.fragment a.code { 1306 + color: var(--fragment-link) !important; 1307 + } 1308 + 1309 + div.fragment span.preprocessor { 1310 + color: var(--fragment-preprocessor); 1311 + } 1312 + 1313 + div.fragment span.lineno { 1314 + display: inline-block; 1315 + width: 27px; 1316 + border-right: none; 1317 + background: var(--fragment-linenumber-background); 1318 + color: var(--fragment-linenumber-color); 1319 + } 1320 + 1321 + div.fragment span.lineno a { 1322 + background: none; 1323 + color: var(--fragment-link) !important; 1324 + } 1325 + 1326 + div.fragment .line:first-child .lineno { 1327 + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); 1328 + } 1329 + 1330 + div.line { 1331 + border-radius: var(--border-radius-small); 1332 + } 1333 + 1334 + div.line.glow { 1335 + background-color: var(--primary-light-color); 1336 + box-shadow: none; 1337 + } 1338 + 1339 + /* 1340 + dl warning, attention, note, deprecated, bug, ... 1341 + */ 1342 + 1343 + dl.bug dt a, dl.deprecated dt a, dl.todo dt a { 1344 + font-weight: bold !important; 1345 + } 1346 + 1347 + dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { 1348 + padding: var(--spacing-medium); 1349 + margin: var(--spacing-medium) 0; 1350 + color: var(--page-background-color); 1351 + overflow: hidden; 1352 + margin-left: 0; 1353 + border-radius: var(--border-radius-small); 1354 + } 1355 + 1356 + dl.section dd { 1357 + margin-bottom: 2px; 1358 + } 1359 + 1360 + dl.warning, dl.attention { 1361 + background: var(--warning-color); 1362 + border-left: 8px solid var(--warning-color-dark); 1363 + color: var(--warning-color-darker); 1364 + } 1365 + 1366 + dl.warning dt, dl.attention dt { 1367 + color: var(--warning-color-dark); 1368 + } 1369 + 1370 + dl.note, dl.remark { 1371 + background: var(--note-color); 1372 + border-left: 8px solid var(--note-color-dark); 1373 + color: var(--note-color-darker); 1374 + } 1375 + 1376 + dl.note dt, dl.remark dt { 1377 + color: var(--note-color-dark); 1378 + } 1379 + 1380 + dl.todo { 1381 + background: var(--todo-color); 1382 + border-left: 8px solid var(--todo-color-dark); 1383 + color: var(--todo-color-darker); 1384 + } 1385 + 1386 + dl.todo dt { 1387 + color: var(--todo-color-dark); 1388 + } 1389 + 1390 + dl.bug dt a { 1391 + color: var(--todo-color-dark) !important; 1392 + } 1393 + 1394 + dl.bug { 1395 + background: var(--bug-color); 1396 + border-left: 8px solid var(--bug-color-dark); 1397 + color: var(--bug-color-darker); 1398 + } 1399 + 1400 + dl.bug dt a { 1401 + color: var(--bug-color-dark) !important; 1402 + } 1403 + 1404 + dl.deprecated { 1405 + background: var(--deprecated-color); 1406 + border-left: 8px solid var(--deprecated-color-dark); 1407 + color: var(--deprecated-color-darker); 1408 + } 1409 + 1410 + dl.deprecated dt a { 1411 + color: var(--deprecated-color-dark) !important; 1412 + } 1413 + 1414 + dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { 1415 + margin-inline-start: 0px; 1416 + } 1417 + 1418 + dl.invariant, dl.pre, dl.post { 1419 + background: var(--invariant-color); 1420 + border-left: 8px solid var(--invariant-color-dark); 1421 + color: var(--invariant-color-darker); 1422 + } 1423 + 1424 + dl.invariant dt, dl.pre dt, dl.post dt { 1425 + color: var(--invariant-color-dark); 1426 + } 1427 + 1428 + /* 1429 + memitem 1430 + */ 1431 + 1432 + div.memdoc, div.memproto, h2.memtitle { 1433 + box-shadow: none; 1434 + background-image: none; 1435 + border: none; 1436 + } 1437 + 1438 + div.memdoc { 1439 + padding: 0 var(--spacing-medium); 1440 + background: var(--page-background-color); 1441 + } 1442 + 1443 + h2.memtitle, div.memitem { 1444 + border: 1px solid var(--separator-color); 1445 + box-shadow: var(--box-shadow); 1446 + } 1447 + 1448 + h2.memtitle { 1449 + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); 1450 + } 1451 + 1452 + div.memitem { 1453 + transition: none; 1454 + } 1455 + 1456 + div.memproto, h2.memtitle { 1457 + background: var(--fragment-background); 1458 + } 1459 + 1460 + h2.memtitle { 1461 + font-weight: 500; 1462 + font-size: var(--memtitle-font-size); 1463 + font-family: var(--font-family-monospace); 1464 + border-bottom: none; 1465 + border-top-left-radius: var(--border-radius-medium); 1466 + border-top-right-radius: var(--border-radius-medium); 1467 + word-break: break-all; 1468 + position: relative; 1469 + } 1470 + 1471 + h2.memtitle:after { 1472 + content: ""; 1473 + display: block; 1474 + background: var(--fragment-background); 1475 + height: var(--spacing-medium); 1476 + bottom: calc(0px - var(--spacing-medium)); 1477 + left: 0; 1478 + right: -14px; 1479 + position: absolute; 1480 + border-top-right-radius: var(--border-radius-medium); 1481 + } 1482 + 1483 + h2.memtitle > span.permalink { 1484 + font-size: inherit; 1485 + } 1486 + 1487 + h2.memtitle > span.permalink > a { 1488 + text-decoration: none; 1489 + padding-left: 3px; 1490 + margin-right: -4px; 1491 + user-select: none; 1492 + display: inline-block; 1493 + margin-top: -6px; 1494 + } 1495 + 1496 + h2.memtitle > span.permalink > a:hover { 1497 + color: var(--primary-dark-color) !important; 1498 + } 1499 + 1500 + a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { 1501 + border-color: var(--primary-light-color); 1502 + } 1503 + 1504 + div.memitem { 1505 + border-top-right-radius: var(--border-radius-medium); 1506 + border-bottom-right-radius: var(--border-radius-medium); 1507 + border-bottom-left-radius: var(--border-radius-medium); 1508 + overflow: hidden; 1509 + display: block !important; 1510 + } 1511 + 1512 + div.memdoc { 1513 + border-radius: 0; 1514 + } 1515 + 1516 + div.memproto { 1517 + border-radius: 0 var(--border-radius-small) 0 0; 1518 + overflow: auto; 1519 + border-bottom: 1px solid var(--separator-color); 1520 + padding: var(--spacing-medium); 1521 + margin-bottom: -1px; 1522 + } 1523 + 1524 + div.memtitle { 1525 + border-top-right-radius: var(--border-radius-medium); 1526 + border-top-left-radius: var(--border-radius-medium); 1527 + } 1528 + 1529 + div.memproto table.memname { 1530 + font-family: var(--font-family-monospace); 1531 + color: var(--page-foreground-color); 1532 + font-size: var(--memname-font-size); 1533 + text-shadow: none; 1534 + } 1535 + 1536 + div.memproto div.memtemplate { 1537 + font-family: var(--font-family-monospace); 1538 + color: var(--primary-dark-color); 1539 + font-size: var(--memname-font-size); 1540 + margin-left: 2px; 1541 + text-shadow: none; 1542 + } 1543 + 1544 + table.mlabels, table.mlabels > tbody { 1545 + display: block; 1546 + } 1547 + 1548 + td.mlabels-left { 1549 + width: auto; 1550 + } 1551 + 1552 + td.mlabels-right { 1553 + margin-top: 3px; 1554 + position: sticky; 1555 + left: 0; 1556 + } 1557 + 1558 + table.mlabels > tbody > tr:first-child { 1559 + display: flex; 1560 + justify-content: space-between; 1561 + flex-wrap: wrap; 1562 + } 1563 + 1564 + .memname, .memitem span.mlabels { 1565 + margin: 0 1566 + } 1567 + 1568 + /* 1569 + reflist 1570 + */ 1571 + 1572 + dl.reflist { 1573 + box-shadow: var(--box-shadow); 1574 + border-radius: var(--border-radius-medium); 1575 + border: 1px solid var(--separator-color); 1576 + overflow: hidden; 1577 + padding: 0; 1578 + } 1579 + 1580 + 1581 + dl.reflist dt, dl.reflist dd { 1582 + box-shadow: none; 1583 + text-shadow: none; 1584 + background-image: none; 1585 + border: none; 1586 + padding: 12px; 1587 + } 1588 + 1589 + 1590 + dl.reflist dt { 1591 + font-weight: 500; 1592 + border-radius: 0; 1593 + background: var(--code-background); 1594 + border-bottom: 1px solid var(--separator-color); 1595 + color: var(--page-foreground-color) 1596 + } 1597 + 1598 + 1599 + dl.reflist dd { 1600 + background: none; 1601 + } 1602 + 1603 + /* 1604 + Table 1605 + */ 1606 + 1607 + .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), 1608 + .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { 1609 + display: inline-block; 1610 + max-width: 100%; 1611 + } 1612 + 1613 + .contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { 1614 + margin-left: calc(0px - var(--spacing-large)); 1615 + margin-right: calc(0px - var(--spacing-large)); 1616 + max-width: calc(100% + 2 * var(--spacing-large)); 1617 + } 1618 + 1619 + table.fieldtable, 1620 + table.markdownTable tbody, 1621 + table.doxtable tbody { 1622 + border: none; 1623 + margin: var(--spacing-medium) 0; 1624 + box-shadow: 0 0 0 1px var(--separator-color); 1625 + border-radius: var(--border-radius-small); 1626 + } 1627 + 1628 + table.markdownTable, table.doxtable, table.fieldtable { 1629 + padding: 1px; 1630 + } 1631 + 1632 + table.doxtable caption { 1633 + display: block; 1634 + } 1635 + 1636 + table.fieldtable { 1637 + border-collapse: collapse; 1638 + width: 100%; 1639 + } 1640 + 1641 + th.markdownTableHeadLeft, 1642 + th.markdownTableHeadRight, 1643 + th.markdownTableHeadCenter, 1644 + th.markdownTableHeadNone, 1645 + table.doxtable th { 1646 + background: var(--tablehead-background); 1647 + color: var(--tablehead-foreground); 1648 + font-weight: 600; 1649 + font-size: var(--page-font-size); 1650 + } 1651 + 1652 + th.markdownTableHeadLeft:first-child, 1653 + th.markdownTableHeadRight:first-child, 1654 + th.markdownTableHeadCenter:first-child, 1655 + th.markdownTableHeadNone:first-child, 1656 + table.doxtable tr th:first-child { 1657 + border-top-left-radius: var(--border-radius-small); 1658 + } 1659 + 1660 + th.markdownTableHeadLeft:last-child, 1661 + th.markdownTableHeadRight:last-child, 1662 + th.markdownTableHeadCenter:last-child, 1663 + th.markdownTableHeadNone:last-child, 1664 + table.doxtable tr th:last-child { 1665 + border-top-right-radius: var(--border-radius-small); 1666 + } 1667 + 1668 + table.markdownTable td, 1669 + table.markdownTable th, 1670 + table.fieldtable td, 1671 + table.fieldtable th, 1672 + table.doxtable td, 1673 + table.doxtable th { 1674 + border: 1px solid var(--separator-color); 1675 + padding: var(--spacing-small) var(--spacing-medium); 1676 + } 1677 + 1678 + table.markdownTable td:last-child, 1679 + table.markdownTable th:last-child, 1680 + table.fieldtable td:last-child, 1681 + table.fieldtable th:last-child, 1682 + table.doxtable td:last-child, 1683 + table.doxtable th:last-child { 1684 + border-right: none; 1685 + } 1686 + 1687 + table.markdownTable td:first-child, 1688 + table.markdownTable th:first-child, 1689 + table.fieldtable td:first-child, 1690 + table.fieldtable th:first-child, 1691 + table.doxtable td:first-child, 1692 + table.doxtable th:first-child { 1693 + border-left: none; 1694 + } 1695 + 1696 + table.markdownTable tr:first-child td, 1697 + table.markdownTable tr:first-child th, 1698 + table.fieldtable tr:first-child td, 1699 + table.fieldtable tr:first-child th, 1700 + table.doxtable tr:first-child td, 1701 + table.doxtable tr:first-child th { 1702 + border-top: none; 1703 + } 1704 + 1705 + table.markdownTable tr:last-child td, 1706 + table.markdownTable tr:last-child th, 1707 + table.fieldtable tr:last-child td, 1708 + table.fieldtable tr:last-child th, 1709 + table.doxtable tr:last-child td, 1710 + table.doxtable tr:last-child th { 1711 + border-bottom: none; 1712 + } 1713 + 1714 + table.markdownTable tr, table.doxtable tr { 1715 + border-bottom: 1px solid var(--separator-color); 1716 + } 1717 + 1718 + table.markdownTable tr:last-child, table.doxtable tr:last-child { 1719 + border-bottom: none; 1720 + } 1721 + 1722 + .full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { 1723 + display: block; 1724 + } 1725 + 1726 + .full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { 1727 + display: table; 1728 + width: 100%; 1729 + } 1730 + 1731 + table.fieldtable th { 1732 + font-size: var(--page-font-size); 1733 + font-weight: 600; 1734 + background-image: none; 1735 + background-color: var(--tablehead-background); 1736 + color: var(--tablehead-foreground); 1737 + } 1738 + 1739 + table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { 1740 + border-bottom: 1px solid var(--separator-color); 1741 + border-right: 1px solid var(--separator-color); 1742 + } 1743 + 1744 + table.fieldtable tr:last-child td:first-child { 1745 + border-bottom-left-radius: var(--border-radius-small); 1746 + } 1747 + 1748 + table.fieldtable tr:last-child td:last-child { 1749 + border-bottom-right-radius: var(--border-radius-small); 1750 + } 1751 + 1752 + .memberdecls td.glow, .fieldtable tr.glow { 1753 + background-color: var(--primary-light-color); 1754 + box-shadow: none; 1755 + } 1756 + 1757 + table.memberdecls { 1758 + display: block; 1759 + -webkit-tap-highlight-color: transparent; 1760 + } 1761 + 1762 + table.memberdecls tr[class^='memitem'] { 1763 + font-family: var(--font-family-monospace); 1764 + font-size: var(--code-font-size); 1765 + } 1766 + 1767 + table.memberdecls tr[class^='memitem'] .memTemplParams { 1768 + font-family: var(--font-family-monospace); 1769 + font-size: var(--code-font-size); 1770 + color: var(--primary-dark-color); 1771 + white-space: normal; 1772 + } 1773 + 1774 + table.memberdecls .memItemLeft, 1775 + table.memberdecls .memItemRight, 1776 + table.memberdecls .memTemplItemLeft, 1777 + table.memberdecls .memTemplItemRight, 1778 + table.memberdecls .memTemplParams { 1779 + transition: none; 1780 + padding-top: var(--spacing-small); 1781 + padding-bottom: var(--spacing-small); 1782 + border-top: 1px solid var(--separator-color); 1783 + border-bottom: 1px solid var(--separator-color); 1784 + background-color: var(--fragment-background); 1785 + } 1786 + 1787 + table.memberdecls .memTemplItemLeft, 1788 + table.memberdecls .memTemplItemRight { 1789 + padding-top: 2px; 1790 + } 1791 + 1792 + table.memberdecls .memTemplParams { 1793 + border-bottom: 0; 1794 + border-left: 1px solid var(--separator-color); 1795 + border-right: 1px solid var(--separator-color); 1796 + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; 1797 + padding-bottom: var(--spacing-small); 1798 + } 1799 + 1800 + table.memberdecls .memTemplItemLeft { 1801 + border-radius: 0 0 0 var(--border-radius-small); 1802 + border-left: 1px solid var(--separator-color); 1803 + border-top: 0; 1804 + } 1805 + 1806 + table.memberdecls .memTemplItemRight { 1807 + border-radius: 0 0 var(--border-radius-small) 0; 1808 + border-right: 1px solid var(--separator-color); 1809 + padding-left: 0; 1810 + border-top: 0; 1811 + } 1812 + 1813 + table.memberdecls .memItemLeft { 1814 + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); 1815 + border-left: 1px solid var(--separator-color); 1816 + padding-left: var(--spacing-medium); 1817 + padding-right: 0; 1818 + } 1819 + 1820 + table.memberdecls .memItemRight { 1821 + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; 1822 + border-right: 1px solid var(--separator-color); 1823 + padding-right: var(--spacing-medium); 1824 + padding-left: 0; 1825 + 1826 + } 1827 + 1828 + table.memberdecls .mdescLeft, table.memberdecls .mdescRight { 1829 + background: none; 1830 + color: var(--page-foreground-color); 1831 + padding: var(--spacing-small) 0; 1832 + } 1833 + 1834 + table.memberdecls .memItemLeft, 1835 + table.memberdecls .memTemplItemLeft { 1836 + padding-right: var(--spacing-medium); 1837 + } 1838 + 1839 + table.memberdecls .memSeparator { 1840 + background: var(--page-background-color); 1841 + height: var(--spacing-large); 1842 + border: 0; 1843 + transition: none; 1844 + } 1845 + 1846 + table.memberdecls .groupheader { 1847 + margin-bottom: var(--spacing-large); 1848 + } 1849 + 1850 + table.memberdecls .inherit_header td { 1851 + padding: 0 0 var(--spacing-medium) 0; 1852 + text-indent: -12px; 1853 + color: var(--page-secondary-foreground-color); 1854 + } 1855 + 1856 + table.memberdecls img[src="closed.png"], 1857 + table.memberdecls img[src="open.png"], 1858 + div.dynheader img[src="open.png"], 1859 + div.dynheader img[src="closed.png"] { 1860 + width: 0; 1861 + height: 0; 1862 + border-left: 4px solid transparent; 1863 + border-right: 4px solid transparent; 1864 + border-top: 5px solid var(--primary-color); 1865 + margin-top: 8px; 1866 + display: block; 1867 + float: left; 1868 + margin-left: -10px; 1869 + transition: transform 0.25s ease-out; 1870 + } 1871 + 1872 + table.memberdecls img { 1873 + margin-right: 10px; 1874 + } 1875 + 1876 + table.memberdecls img[src="closed.png"], 1877 + div.dynheader img[src="closed.png"] { 1878 + transform: rotate(-90deg); 1879 + 1880 + } 1881 + 1882 + .compoundTemplParams { 1883 + font-family: var(--font-family-monospace); 1884 + color: var(--primary-dark-color); 1885 + font-size: var(--code-font-size); 1886 + } 1887 + 1888 + @media screen and (max-width: 767px) { 1889 + 1890 + table.memberdecls .memItemLeft, 1891 + table.memberdecls .memItemRight, 1892 + table.memberdecls .mdescLeft, 1893 + table.memberdecls .mdescRight, 1894 + table.memberdecls .memTemplItemLeft, 1895 + table.memberdecls .memTemplItemRight, 1896 + table.memberdecls .memTemplParams { 1897 + display: block; 1898 + text-align: left; 1899 + padding-left: var(--spacing-large); 1900 + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); 1901 + border-right: none; 1902 + border-left: none; 1903 + border-radius: 0; 1904 + white-space: normal; 1905 + } 1906 + 1907 + table.memberdecls .memItemLeft, 1908 + table.memberdecls .mdescLeft, 1909 + table.memberdecls .memTemplItemLeft { 1910 + border-bottom: 0; 1911 + padding-bottom: 0; 1912 + } 1913 + 1914 + table.memberdecls .memTemplItemLeft { 1915 + padding-top: 0; 1916 + } 1917 + 1918 + table.memberdecls .mdescLeft { 1919 + margin-bottom: calc(0px - var(--page-font-size)); 1920 + } 1921 + 1922 + table.memberdecls .memItemRight, 1923 + table.memberdecls .mdescRight, 1924 + table.memberdecls .memTemplItemRight { 1925 + border-top: 0; 1926 + padding-top: 0; 1927 + padding-right: var(--spacing-large); 1928 + overflow-x: auto; 1929 + } 1930 + 1931 + table.memberdecls tr[class^='memitem']:not(.inherit) { 1932 + display: block; 1933 + width: calc(100vw - 2 * var(--spacing-large)); 1934 + } 1935 + 1936 + table.memberdecls .mdescRight { 1937 + color: var(--page-foreground-color); 1938 + } 1939 + 1940 + table.memberdecls tr.inherit { 1941 + visibility: hidden; 1942 + } 1943 + 1944 + table.memberdecls tr[style="display: table-row;"] { 1945 + display: block !important; 1946 + visibility: visible; 1947 + width: calc(100vw - 2 * var(--spacing-large)); 1948 + animation: fade .5s; 1949 + } 1950 + 1951 + @keyframes fade { 1952 + 0% { 1953 + opacity: 0; 1954 + max-height: 0; 1955 + } 1956 + 1957 + 100% { 1958 + opacity: 1; 1959 + max-height: 200px; 1960 + } 1961 + } 1962 + } 1963 + 1964 + 1965 + /* 1966 + Horizontal Rule 1967 + */ 1968 + 1969 + hr { 1970 + margin-top: var(--spacing-large); 1971 + margin-bottom: var(--spacing-large); 1972 + height: 1px; 1973 + background-color: var(--separator-color); 1974 + border: 0; 1975 + } 1976 + 1977 + .contents hr { 1978 + box-shadow: 100px 0 0 var(--separator-color), 1979 + -100px 0 0 var(--separator-color), 1980 + 500px 0 0 var(--separator-color), 1981 + -500px 0 0 var(--separator-color), 1982 + 1500px 0 0 var(--separator-color), 1983 + -1500px 0 0 var(--separator-color), 1984 + 2000px 0 0 var(--separator-color), 1985 + -2000px 0 0 var(--separator-color); 1986 + } 1987 + 1988 + .contents img, .contents .center, .contents center, .contents div.image object { 1989 + max-width: 100%; 1990 + overflow: auto; 1991 + } 1992 + 1993 + @media screen and (max-width: 767px) { 1994 + .contents .dyncontent > .center, .contents > center { 1995 + margin-left: calc(0px - var(--spacing-large)); 1996 + margin-right: calc(0px - var(--spacing-large)); 1997 + max-width: calc(100% + 2 * var(--spacing-large)); 1998 + } 1999 + } 2000 + 2001 + /* 2002 + Directories 2003 + */ 2004 + div.directory { 2005 + border-top: 1px solid var(--separator-color); 2006 + border-bottom: 1px solid var(--separator-color); 2007 + width: auto; 2008 + } 2009 + 2010 + table.directory { 2011 + font-family: var(--font-family); 2012 + font-size: var(--page-font-size); 2013 + font-weight: normal; 2014 + width: 100%; 2015 + } 2016 + 2017 + table.directory td.entry, table.directory td.desc { 2018 + padding: calc(var(--spacing-small) / 2) var(--spacing-small); 2019 + line-height: var(--table-line-height); 2020 + } 2021 + 2022 + table.directory tr.even td:last-child { 2023 + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; 2024 + } 2025 + 2026 + table.directory tr.even td:first-child { 2027 + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); 2028 + } 2029 + 2030 + table.directory tr.even:last-child td:last-child { 2031 + border-radius: 0 var(--border-radius-small) 0 0; 2032 + } 2033 + 2034 + table.directory tr.even:last-child td:first-child { 2035 + border-radius: var(--border-radius-small) 0 0 0; 2036 + } 2037 + 2038 + table.directory td.desc { 2039 + min-width: 250px; 2040 + } 2041 + 2042 + table.directory tr.even { 2043 + background-color: var(--odd-color); 2044 + } 2045 + 2046 + table.directory tr.odd { 2047 + background-color: transparent; 2048 + } 2049 + 2050 + .icona { 2051 + width: auto; 2052 + height: auto; 2053 + margin: 0 var(--spacing-small); 2054 + } 2055 + 2056 + .icon { 2057 + background: var(--primary-color); 2058 + border-radius: var(--border-radius-small); 2059 + font-size: var(--page-font-size); 2060 + padding: calc(var(--page-font-size) / 5); 2061 + line-height: var(--page-font-size); 2062 + transform: scale(0.8); 2063 + height: auto; 2064 + width: var(--page-font-size); 2065 + user-select: none; 2066 + } 2067 + 2068 + .iconfopen, .icondoc, .iconfclosed { 2069 + background-position: center; 2070 + margin-bottom: 0; 2071 + height: var(--table-line-height); 2072 + } 2073 + 2074 + .icondoc { 2075 + filter: saturate(0.2); 2076 + } 2077 + 2078 + @media screen and (max-width: 767px) { 2079 + div.directory { 2080 + margin-left: calc(0px - var(--spacing-large)); 2081 + margin-right: calc(0px - var(--spacing-large)); 2082 + } 2083 + } 2084 + 2085 + @media (prefers-color-scheme: dark) { 2086 + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { 2087 + filter: hue-rotate(180deg) invert(); 2088 + } 2089 + } 2090 + 2091 + html.dark-mode .iconfopen, html.dark-mode .iconfclosed { 2092 + filter: hue-rotate(180deg) invert(); 2093 + } 2094 + 2095 + /* 2096 + Class list 2097 + */ 2098 + 2099 + .classindex dl.odd { 2100 + background: var(--odd-color); 2101 + border-radius: var(--border-radius-small); 2102 + } 2103 + 2104 + .classindex dl.even { 2105 + background-color: transparent; 2106 + } 2107 + 2108 + /* 2109 + Class Index Doxygen 1.8 2110 + */ 2111 + 2112 + table.classindex { 2113 + margin-left: 0; 2114 + margin-right: 0; 2115 + width: 100%; 2116 + } 2117 + 2118 + table.classindex table div.ah { 2119 + background-image: none; 2120 + background-color: initial; 2121 + border-color: var(--separator-color); 2122 + color: var(--page-foreground-color); 2123 + box-shadow: var(--box-shadow); 2124 + border-radius: var(--border-radius-large); 2125 + padding: var(--spacing-small); 2126 + } 2127 + 2128 + div.qindex { 2129 + background-color: var(--odd-color); 2130 + border-radius: var(--border-radius-small); 2131 + border: 1px solid var(--separator-color); 2132 + padding: var(--spacing-small) 0; 2133 + } 2134 + 2135 + /* 2136 + Footer and nav-path 2137 + */ 2138 + 2139 + #nav-path { 2140 + width: 100%; 2141 + } 2142 + 2143 + #nav-path ul { 2144 + background-image: none; 2145 + background: var(--page-background-color); 2146 + border: none; 2147 + border-top: 1px solid var(--separator-color); 2148 + border-bottom: 1px solid var(--separator-color); 2149 + border-bottom: 0; 2150 + box-shadow: 0 0.75px 0 var(--separator-color); 2151 + font-size: var(--navigation-font-size); 2152 + } 2153 + 2154 + img.footer { 2155 + width: 60px; 2156 + } 2157 + 2158 + .navpath li.footer { 2159 + color: var(--page-secondary-foreground-color); 2160 + } 2161 + 2162 + address.footer { 2163 + color: var(--page-secondary-foreground-color); 2164 + margin-bottom: var(--spacing-large); 2165 + } 2166 + 2167 + #nav-path li.navelem { 2168 + background-image: none; 2169 + display: flex; 2170 + align-items: center; 2171 + } 2172 + 2173 + .navpath li.navelem a { 2174 + text-shadow: none; 2175 + display: inline-block; 2176 + color: var(--primary-color) !important; 2177 + } 2178 + 2179 + .navpath li.navelem b { 2180 + color: var(--primary-dark-color); 2181 + font-weight: 500; 2182 + } 2183 + 2184 + li.navelem { 2185 + padding: 0; 2186 + margin-left: -8px; 2187 + } 2188 + 2189 + li.navelem:first-child { 2190 + margin-left: var(--spacing-large); 2191 + } 2192 + 2193 + li.navelem:first-child:before { 2194 + display: none; 2195 + } 2196 + 2197 + #nav-path li.navelem:after { 2198 + content: ''; 2199 + border: 5px solid var(--page-background-color); 2200 + border-bottom-color: transparent; 2201 + border-right-color: transparent; 2202 + border-top-color: transparent; 2203 + transform: translateY(-1px) scaleY(4.2); 2204 + z-index: 10; 2205 + margin-left: 6px; 2206 + } 2207 + 2208 + #nav-path li.navelem:before { 2209 + content: ''; 2210 + border: 5px solid var(--separator-color); 2211 + border-bottom-color: transparent; 2212 + border-right-color: transparent; 2213 + border-top-color: transparent; 2214 + transform: translateY(-1px) scaleY(3.2); 2215 + margin-right: var(--spacing-small); 2216 + } 2217 + 2218 + .navpath li.navelem a:hover { 2219 + color: var(--primary-color); 2220 + } 2221 + 2222 + /* 2223 + Scrollbars for Webkit 2224 + */ 2225 + 2226 + #nav-tree::-webkit-scrollbar, 2227 + div.fragment::-webkit-scrollbar, 2228 + pre.fragment::-webkit-scrollbar, 2229 + div.memproto::-webkit-scrollbar, 2230 + .contents center::-webkit-scrollbar, 2231 + .contents .center::-webkit-scrollbar, 2232 + .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, 2233 + div.contents .toc::-webkit-scrollbar, 2234 + .contents .dotgraph::-webkit-scrollbar, 2235 + .contents .tabs-overview-container::-webkit-scrollbar { 2236 + background: transparent; 2237 + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); 2238 + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); 2239 + } 2240 + 2241 + #nav-tree::-webkit-scrollbar-thumb, 2242 + div.fragment::-webkit-scrollbar-thumb, 2243 + pre.fragment::-webkit-scrollbar-thumb, 2244 + div.memproto::-webkit-scrollbar-thumb, 2245 + .contents center::-webkit-scrollbar-thumb, 2246 + .contents .center::-webkit-scrollbar-thumb, 2247 + .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, 2248 + div.contents .toc::-webkit-scrollbar-thumb, 2249 + .contents .dotgraph::-webkit-scrollbar-thumb, 2250 + .contents .tabs-overview-container::-webkit-scrollbar-thumb { 2251 + background-color: transparent; 2252 + border: var(--webkit-scrollbar-padding) solid transparent; 2253 + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); 2254 + background-clip: padding-box; 2255 + } 2256 + 2257 + #nav-tree:hover::-webkit-scrollbar-thumb, 2258 + div.fragment:hover::-webkit-scrollbar-thumb, 2259 + pre.fragment:hover::-webkit-scrollbar-thumb, 2260 + div.memproto:hover::-webkit-scrollbar-thumb, 2261 + .contents center:hover::-webkit-scrollbar-thumb, 2262 + .contents .center:hover::-webkit-scrollbar-thumb, 2263 + .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, 2264 + div.contents .toc:hover::-webkit-scrollbar-thumb, 2265 + .contents .dotgraph:hover::-webkit-scrollbar-thumb, 2266 + .contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { 2267 + background-color: var(--webkit-scrollbar-color); 2268 + } 2269 + 2270 + #nav-tree::-webkit-scrollbar-track, 2271 + div.fragment::-webkit-scrollbar-track, 2272 + pre.fragment::-webkit-scrollbar-track, 2273 + div.memproto::-webkit-scrollbar-track, 2274 + .contents center::-webkit-scrollbar-track, 2275 + .contents .center::-webkit-scrollbar-track, 2276 + .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, 2277 + div.contents .toc::-webkit-scrollbar-track, 2278 + .contents .dotgraph::-webkit-scrollbar-track, 2279 + .contents .tabs-overview-container::-webkit-scrollbar-track { 2280 + background: transparent; 2281 + } 2282 + 2283 + #nav-tree::-webkit-scrollbar-corner { 2284 + background-color: var(--side-nav-background); 2285 + } 2286 + 2287 + #nav-tree, 2288 + div.fragment, 2289 + pre.fragment, 2290 + div.memproto, 2291 + .contents center, 2292 + .contents .center, 2293 + .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, 2294 + div.contents .toc { 2295 + overflow-x: auto; 2296 + overflow-x: overlay; 2297 + } 2298 + 2299 + #nav-tree { 2300 + overflow-x: auto; 2301 + overflow-y: auto; 2302 + overflow-y: overlay; 2303 + } 2304 + 2305 + /* 2306 + Scrollbars for Firefox 2307 + */ 2308 + 2309 + #nav-tree, 2310 + div.fragment, 2311 + pre.fragment, 2312 + div.memproto, 2313 + .contents center, 2314 + .contents .center, 2315 + .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, 2316 + div.contents .toc, 2317 + .contents .dotgraph, 2318 + .contents .tabs-overview-container { 2319 + scrollbar-width: thin; 2320 + } 2321 + 2322 + /* 2323 + Optional Dark mode toggle button 2324 + */ 2325 + 2326 + doxygen-awesome-dark-mode-toggle { 2327 + display: inline-block; 2328 + margin: 0 0 0 var(--spacing-small); 2329 + padding: 0; 2330 + width: var(--searchbar-height); 2331 + height: var(--searchbar-height); 2332 + background: none; 2333 + border: none; 2334 + border-radius: var(--searchbar-height); 2335 + vertical-align: middle; 2336 + text-align: center; 2337 + line-height: var(--searchbar-height); 2338 + font-size: 22px; 2339 + display: flex; 2340 + align-items: center; 2341 + justify-content: center; 2342 + user-select: none; 2343 + cursor: pointer; 2344 + } 2345 + 2346 + doxygen-awesome-dark-mode-toggle > svg { 2347 + transition: transform .1s ease-in-out; 2348 + } 2349 + 2350 + doxygen-awesome-dark-mode-toggle:active > svg { 2351 + transform: scale(.5); 2352 + } 2353 + 2354 + doxygen-awesome-dark-mode-toggle:hover { 2355 + background-color: rgba(0,0,0,.03); 2356 + } 2357 + 2358 + html.dark-mode doxygen-awesome-dark-mode-toggle:hover { 2359 + background-color: rgba(0,0,0,.18); 2360 + } 2361 + 2362 + /* 2363 + Optional fragment copy button 2364 + */ 2365 + .doxygen-awesome-fragment-wrapper { 2366 + position: relative; 2367 + } 2368 + 2369 + doxygen-awesome-fragment-copy-button { 2370 + opacity: 0; 2371 + background: var(--fragment-background); 2372 + width: 28px; 2373 + height: 28px; 2374 + position: absolute; 2375 + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); 2376 + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); 2377 + border: 1px solid var(--fragment-foreground); 2378 + cursor: pointer; 2379 + border-radius: var(--border-radius-small); 2380 + display: flex; 2381 + justify-content: center; 2382 + align-items: center; 2383 + } 2384 + 2385 + .doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { 2386 + opacity: .28; 2387 + } 2388 + 2389 + doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { 2390 + opacity: 1 !important; 2391 + } 2392 + 2393 + doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { 2394 + transform: scale(.91); 2395 + } 2396 + 2397 + doxygen-awesome-fragment-copy-button svg { 2398 + fill: var(--fragment-foreground); 2399 + width: 18px; 2400 + height: 18px; 2401 + } 2402 + 2403 + doxygen-awesome-fragment-copy-button.success svg { 2404 + fill: rgb(14, 168, 14); 2405 + } 2406 + 2407 + doxygen-awesome-fragment-copy-button.success { 2408 + border-color: rgb(14, 168, 14); 2409 + } 2410 + 2411 + @media screen and (max-width: 767px) { 2412 + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, 2413 + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, 2414 + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, 2415 + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, 2416 + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { 2417 + right: 0; 2418 + } 2419 + } 2420 + 2421 + /* 2422 + Optional paragraph link button 2423 + */ 2424 + 2425 + a.anchorlink { 2426 + font-size: 90%; 2427 + margin-left: var(--spacing-small); 2428 + color: var(--page-foreground-color) !important; 2429 + text-decoration: none; 2430 + opacity: .15; 2431 + display: none; 2432 + transition: opacity .1s ease-in-out, color .1s ease-in-out; 2433 + } 2434 + 2435 + a.anchorlink svg { 2436 + fill: var(--page-foreground-color); 2437 + } 2438 + 2439 + h3 a.anchorlink svg, h4 a.anchorlink svg { 2440 + margin-bottom: -3px; 2441 + margin-top: -4px; 2442 + } 2443 + 2444 + a.anchorlink:hover { 2445 + opacity: .45; 2446 + } 2447 + 2448 + h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { 2449 + display: inline-block; 2450 + } 2451 + 2452 + /* 2453 + Optional tab feature 2454 + */ 2455 + 2456 + .tabbed { 2457 + margin: var(--spacing-medium) auto; 2458 + } 2459 + 2460 + .tabbed ul { 2461 + padding-inline-start: 0px; 2462 + margin: 0; 2463 + padding: var(--spacing-small) 0; 2464 + border-bottom: 1px solid var(--separator-color); 2465 + } 2466 + 2467 + .tabbed li { 2468 + display: none; 2469 + } 2470 + 2471 + .tabbed li.selected { 2472 + display: block; 2473 + } 2474 + 2475 + .tabs-overview-container { 2476 + overflow-x: auto; 2477 + display: block; 2478 + overflow-y: visible; 2479 + } 2480 + 2481 + .tabs-overview { 2482 + border-bottom: 1px solid var(--separator-color); 2483 + display: flex; 2484 + flex-direction: row; 2485 + } 2486 + 2487 + .tabs-overview button.tab-button { 2488 + color: var(--page-foreground-color); 2489 + margin: 0; 2490 + border: none; 2491 + background: transparent; 2492 + padding: var(--spacing-small) 0; 2493 + display: inline-block; 2494 + font-size: var(--page-font-size); 2495 + cursor: pointer; 2496 + box-shadow: 0 1px 0 0 var(--separator-color); 2497 + position: relative; 2498 + } 2499 + 2500 + .tabs-overview button.tab-button .tab-title { 2501 + float: left; 2502 + white-space: nowrap; 2503 + padding: var(--spacing-small) var(--spacing-large); 2504 + border-radius: var(--border-radius-medium); 2505 + } 2506 + 2507 + .tabs-overview button.tab-button:not(:last-child) .tab-title { 2508 + box-shadow: 8px 0 0 -7px var(--separator-color); 2509 + } 2510 + 2511 + .tabs-overview button.tab-button:hover .tab-title { 2512 + background: var(--separator-color); 2513 + box-shadow: none; 2514 + } 2515 + 2516 + .tabs-overview button.tab-button.active { 2517 + color: var(--primary-color); 2518 + } 2519 + 2520 + .tabs-overview button.tab-button.active::after { 2521 + content: ''; 2522 + display: block; 2523 + position: absolute; 2524 + left: 0px; 2525 + bottom: 0; 2526 + right: 0px; 2527 + height: 3px; 2528 + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; 2529 + background-color: var(--primary-color); 2530 + }
+95
doc/header.html
··· 1 + <!-- 2 + Copyright 2023, Collabora, Ltd. 3 + SPDX-License-Identifier: BSL-1.0 4 + --> 5 + 6 + <!-- 7 + Generated by `doxygen -w header.html ignored.html ignored.css`command and 8 + then modified based on doxygen-awesome header.html file 9 + --> 10 + 11 + <!-- HTML header for doxygen 1.9.1--> 12 + <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 13 + <html xmlns="http://www.w3.org/1999/xhtml"> 14 + <head> 15 + <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 16 + <meta http-equiv="X-UA-Compatible" content="IE=9"/> 17 + <meta name="generator" content="Doxygen $doxygenversion"/> 18 + <meta name="viewport" content="width=device-width, initial-scale=1"/> 19 + 20 + <!-- BEGIN opengraph metadata --> 21 + <meta property="og:title" content="Monado OpenXR Runtime" /> 22 + <meta property="og:image" content="https://gitlab.freedesktop.org/uploads/-/system/project/avatar/2685/monado_icon_medium.png" /> 23 + <meta property="og:description" content="A free, open source XR platform." /> 24 + <meta property="og:url" content="https://monado.dev/" /> 25 + <!-- END opengraph metadata --> 26 + 27 + <!-- BEGIN twitter metadata --> 28 + <meta name="twitter:image:src" content="https://gitlab.freedesktop.org/uploads/-/system/project/avatar/2685/monado_icon_medium.png" /> 29 + <meta name="twitter:title" content="Monado OpenXR Runtime" /> 30 + <meta name="twitter:description" content="A free, open source XR platform." /> 31 + <!-- END twitter metadata --> 32 + 33 + <!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> 34 + <!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> 35 + <link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/> 36 + <link rel="icon" type="image/svg+xml" href="https://gitlab.freedesktop.org/uploads/-/system/project/avatar/2685/monado_icon_medium.png?width=64"/> 37 + <script type="text/javascript" src="$relpath^jquery.js"></script> 38 + <script type="text/javascript" src="$relpath^dynsections.js"></script> 39 + <script type="text/javascript" src="$relpath^doxygen-awesome-darkmode-toggle.js"></script> 40 + <script type="text/javascript" src="$relpath^doxygen-awesome-fragment-copy-button.js"></script> 41 + <script type="text/javascript" src="$relpath^doxygen-awesome-paragraph-link.js"></script> 42 + <script type="text/javascript" src="$relpath^doxygen-awesome-interactive-toc.js"></script> 43 + <script type="text/javascript" src="$relpath^doxygen-awesome-tabs.js"></script> 44 + <script type="text/javascript" src="$relpath^toggle-alternative-theme.js"></script> 45 + <script type="text/javascript"> 46 + DoxygenAwesomeFragmentCopyButton.init() 47 + DoxygenAwesomeDarkModeToggle.init() 48 + DoxygenAwesomeParagraphLink.init() 49 + DoxygenAwesomeInteractiveToc.init() 50 + DoxygenAwesomeTabs.init() 51 + </script> 52 + $treeview 53 + $search 54 + $mathjax 55 + <link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" /> 56 + $extrastylesheet 57 + </head> 58 + <body> 59 + 60 + <div id="top"><!-- do not remove this div, it is closed by doxygen! --> 61 + 62 + <!--BEGIN TITLEAREA--> 63 + <div id="titlearea"> 64 + <table cellspacing="0" cellpadding="0"> 65 + <tbody> 66 + <tr style="height: 56px;"> 67 + <!--BEGIN PROJECT_LOGO--> 68 + <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td> 69 + <!--END PROJECT_LOGO--> 70 + <!--BEGIN PROJECT_NAME--> 71 + <td id="projectalign" style="padding-left: 0.5em;"> 72 + <div id="projectname">$projectname 73 + <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER--> 74 + </div> 75 + <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF--> 76 + </td> 77 + <!--END PROJECT_NAME--> 78 + <!--BEGIN !PROJECT_NAME--> 79 + <!--BEGIN PROJECT_BRIEF--> 80 + <td style="padding-left: 0.5em;"> 81 + <div id="projectbrief">$projectbrief</div> 82 + </td> 83 + <!--END PROJECT_BRIEF--> 84 + <!--END !PROJECT_NAME--> 85 + <!--BEGIN DISABLE_INDEX--> 86 + <!--BEGIN SEARCHENGINE--> 87 + <td>$searchbox</td> 88 + <!--END SEARCHENGINE--> 89 + <!--END DISABLE_INDEX--> 90 + </tr> 91 + </tbody> 92 + </table> 93 + </div> 94 + <!--END TITLEAREA--> 95 + <!-- end header part -->
+2
doc/ipc-design.md
··· 5 5 SPDX-License-Identifier: BSL-1.0 6 6 --> 7 7 8 + [TOC] 9 + 8 10 - Last updated: 12-September-2022 9 11 10 12 When the service starts, an `xrt_instance` is created and selected, a native
+2 -1
doc/mainpage.md
··· 5 5 SPDX-License-Identifier: BSL-1.0 6 6 --> 7 7 8 + [TOC] 9 + 8 10 This documentation is intended for developers wanting to dive into the code of 9 11 Monado. It also assumes that you have read [README.md][]: that file also holds 10 12 getting started information and general documentation. ··· 82 84 aux_tracking and @ref aux_math. 83 85 * src/xrt/targets - glue code and build logic to produce final binaries. 84 86 * src/external - a small collection of external code and headers. 85 -
+2
doc/winbuild.md
··· 5 5 SPDX-License-Identifier: BSL-1.0 6 6 --> 7 7 8 + [TOC] 9 + 8 10 Monado has a work-in-progress port to Windows. While it's not ready for 9 11 widespread usage due to some rough edges and lack of drivers, it does build and 10 12 can serve as a base for further development.