From patchwork Wed Sep 17 20:17:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24379 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 12263C328C for ; Wed, 17 Sep 2025 20:18:19 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 264C069369; Wed, 17 Sep 2025 22:18:16 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="vRLXPV8r"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 30E4869369 for ; Wed, 17 Sep 2025 22:18:13 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 0F13B6A8 for ; Wed, 17 Sep 2025 22:16:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140214; bh=V5FQs71xgyKA09co9ZymVypdsynNIFGBGxTSzIRar3A=; h=From:To:Subject:Date:In-Reply-To:References:From; b=vRLXPV8rDxE+MwzG5WCVqWU6D4q+OCaXV1riPTp/kK7uDC4oRNN44IQNGD1drWPPA RQ/IA/ZmS/QZr3R31liLKng1RQ9yIbfrPGhiD5+ub5ehc+eNSqgSQtH0qIfksyeVY1 Fv1k1IvzU/2I3PwCaqKBV9HRgYo7b/bjqdoJLTzk= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Subject: [PATCH v3 01/10] Documentation: Use standard ordering for Doxyfile variables Date: Wed, 17 Sep 2025 23:17:32 +0300 Message-ID: <20250917201742.16406-2-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Order the variables in Doxyfiles as in the template generated by 'doxygen -g'. This doesn't have any functional change, but provides a standard order when adding new variables. Signed-off-by: Laurent Pinchart Reviewed-by: Barnabás Pőcze Reviewed-by: Stefan Klug --- Documentation/Doxyfile-common.in | 6 +++--- Documentation/Doxyfile-internal.in | 9 +++++---- Documentation/Doxyfile-public.in | 9 +++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Documentation/Doxyfile-common.in b/Documentation/Doxyfile-common.in index 58afea1cd70d..c9527da03ed5 100644 --- a/Documentation/Doxyfile-common.in +++ b/Documentation/Doxyfile-common.in @@ -29,6 +29,8 @@ FILE_PATTERNS = *.c \ RECURSIVE = YES +EXCLUDE_SYMLINKS = YES + EXCLUDE_PATTERNS = @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \ @TOP_BUILDDIR@/include/libcamera/ipa/*_proxy.h \ @TOP_BUILDDIR@/include/libcamera/ipa/ipu3_*.h \ @@ -50,7 +52,7 @@ EXCLUDE_SYMBOLS = libcamera::BoundMethodArgs \ *::details \ std::* -EXCLUDE_SYMLINKS = YES +IMAGE_PATH = "@TOP_SRCDIR@/Documentation/images" GENERATE_LATEX = NO @@ -61,8 +63,6 @@ INCLUDE_PATH = "@TOP_BUILDDIR@/include" \ "@TOP_SRCDIR@/include" INCLUDE_FILE_PATTERNS = *.h -IMAGE_PATH = "@TOP_SRCDIR@/Documentation/images" - PREDEFINED = __DOXYGEN__ \ __cplusplus \ __attribute__(x)= \ diff --git a/Documentation/Doxyfile-internal.in b/Documentation/Doxyfile-internal.in index a422bb0719da..aeaa06e9d9d3 100644 --- a/Documentation/Doxyfile-internal.in +++ b/Documentation/Doxyfile-internal.in @@ -3,11 +3,8 @@ @INCLUDE_PATH = @TOP_BUILDDIR@/Documentation @INCLUDE = Doxyfile-common -GENERATE_TAGFILE = @TOP_BUILDDIR@/Documentation/internal-api-html/tagfile.xml - -HIDE_UNDOC_CLASSES = NO HIDE_UNDOC_MEMBERS = NO -HTML_OUTPUT = internal-api-html +HIDE_UNDOC_CLASSES = NO INTERNAL_DOCS = YES ENABLED_SECTIONS = internal @@ -33,3 +30,7 @@ EXCLUDE = @TOP_SRCDIR@/include/libcamera/base/span.h \ @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \ @TOP_BUILDDIR@/include/libcamera/ipa/soft_ipa_interface.h \ @TOP_BUILDDIR@/src/libcamera/proxy/ + +HTML_OUTPUT = internal-api-html + +GENERATE_TAGFILE = @TOP_BUILDDIR@/Documentation/internal-api-html/tagfile.xml diff --git a/Documentation/Doxyfile-public.in b/Documentation/Doxyfile-public.in index c3a8b0dd003a..917f24008579 100644 --- a/Documentation/Doxyfile-public.in +++ b/Documentation/Doxyfile-public.in @@ -3,11 +3,8 @@ @INCLUDE_PATH = @TOP_BUILDDIR@/Documentation @INCLUDE = Doxyfile-common -GENERATE_TAGFILE = @TOP_BUILDDIR@/Documentation/api-html/tagfile.xml - -HIDE_UNDOC_CLASSES = YES HIDE_UNDOC_MEMBERS = YES -HTML_OUTPUT = api-html +HIDE_UNDOC_CLASSES = YES INTERNAL_DOCS = NO INPUT = "@TOP_SRCDIR@/Documentation" \ @@ -19,4 +16,8 @@ EXCLUDE = @TOP_SRCDIR@/include/libcamera/base/class.h \ @TOP_SRCDIR@/src/libcamera/base/class.cpp \ @TOP_SRCDIR@/src/libcamera/base/object.cpp +HTML_OUTPUT = api-html + PREDEFINED += __DOXYGEN_PUBLIC__ + +GENERATE_TAGFILE = @TOP_BUILDDIR@/Documentation/api-html/tagfile.xml From patchwork Wed Sep 17 20:17:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24380 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id B3738C328C for ; Wed, 17 Sep 2025 20:18:21 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id A7E9E6936F; Wed, 17 Sep 2025 22:18:19 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="UGpMyAEh"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1433C6936E for ; Wed, 17 Sep 2025 22:18:15 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id A56616A8; Wed, 17 Sep 2025 22:16:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140216; bh=745inmBe1RlyLeiug21935hYo9v67hBtTW6PDyBhHZY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UGpMyAEhd4yBrD58VTcPzyJR3RnF2/YdasfpRf32uaM7904pwdfTin2ZK2B1a5DI3 Lz4ND0tkO7vpEQBjEbgQ2B7fAlNMC9iy+6rGc61SdGR8yiUNuKJwBKZXUxGKJmN7PI SCZc9t+sywrAwK0GWE8EROLtXCWmb1wfzdtDJqH4= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [PATCH v3 02/10] Documentation: Add doxygen-awesome-css Date: Wed, 17 Sep 2025 23:17:33 +0300 Message-ID: <20250917201742.16406-3-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Stefan Klug Add the doxygen-awesome files to the libcamera repository to improve the styling of the doxygen documentation. These are from commit 46f0661d13206b0f837784426580c5470ec6d1b7 Author: Laurent Pinchart Date: Thu Sep 11 21:32:39 2025 +0300 Documentation: doxygen-awesome-css: Switch license information to SPDX of https://github.com/jothepro/doxygen-awesome-css. Only the files needed by libcamera are imported. Signed-off-by: Stefan Klug Reviewed-by: Laurent Pinchart Signed-off-by: Laurent Pinchart --- Changes since v1: - Update the doxygen-awesome-css version --- .../doxygen-awesome-sidebar-only.css | 97 + .../doxygen-awesome-css/doxygen-awesome.css | 2664 +++++++++++++++++ 2 files changed, 2761 insertions(+) create mode 100644 Documentation/doxygen-awesome-css/doxygen-awesome-sidebar-only.css create mode 100644 Documentation/doxygen-awesome-css/doxygen-awesome.css diff --git a/Documentation/doxygen-awesome-css/doxygen-awesome-sidebar-only.css b/Documentation/doxygen-awesome-css/doxygen-awesome-sidebar-only.css new file mode 100644 index 000000000000..838fd4aad6ae --- /dev/null +++ b/Documentation/doxygen-awesome-css/doxygen-awesome-sidebar-only.css @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: MIT */ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +Copyright (c) 2021 - 2023 jothepro + + */ + +html { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enough to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 335px; + --menu-display: none; + + --top-height: 120px; + --toc-sticky-top: -25px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); +} + +#projectname { + white-space: nowrap; +} + + +@media screen and (min-width: 768px) { + html { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + overflow: visible; + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + overflow: hidden; + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + background: var(--separator-color); + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/Documentation/doxygen-awesome-css/doxygen-awesome.css b/Documentation/doxygen-awesome-css/doxygen-awesome.css new file mode 100644 index 000000000000..2d5d8352d7cc --- /dev/null +++ b/Documentation/doxygen-awesome-css/doxygen-awesome.css @@ -0,0 +1,2664 @@ +/* SPDX-License-Identifier: MIT */ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +Copyright (c) 2021 - 2023 jothepro + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + --on-primary-color: #ffffff; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--on-primary-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); + overflow: hidden; + text-overflow: ellipsis; +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; + color: var(--primary-color) !important; + font-weight: 500; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + color: var(--on-primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname, .paramname em { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: var(--page-background-color); + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 var(--separator-color), + -100px 0 var(--separator-color), + 500px 0 var(--separator-color), + -500px 0 var(--separator-color), + 900px 0 var(--separator-color), + -900px 0 var(--separator-color), + 1400px 0 var(--separator-color), + -1400px 0 var(--separator-color), + 1900px 0 var(--separator-color), + -1900px 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} From patchwork Wed Sep 17 20:17:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24381 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 3603EC328C for ; Wed, 17 Sep 2025 20:18:24 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B9F8B6937E; Wed, 17 Sep 2025 22:18:23 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="wDc/KYMm"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1EE0F69367 for ; Wed, 17 Sep 2025 22:18:16 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 8ACB6E92; Wed, 17 Sep 2025 22:16:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140217; bh=mKScnHea3GrxukNJbGL0G0ULW8tuIXJRzlsL+XLd8/Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wDc/KYMmkfD12rBggq8IMK3o+7D39IydWIISsdx00fFbv1rEEOTTHTw3A3mXhFvas cbHuTFJ3czVb0d1ZWkK15kOumKZiKea9QptygfwNC84Vh5pzD9MZn4XKq50aGWF7PE F+jTw/k6RYLws2AVkpbZmWlKlTdfvQM6DYQox6Q4= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [PATCH v3 03/10] Documentation: Enable doxygen-awesome-css Date: Wed, 17 Sep 2025 23:17:34 +0300 Message-ID: <20250917201742.16406-4-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Stefan Klug Include doxygen-awesome-css in the doxygen config. The project's documentation indicated that the HTML_COLORSTYLE option needs to be set to LIGHT starting with Doxygen 1.9.5. The reason isn't explained, and tests have not shown any noticeable difference with Doxygen 1.9.5, 1.13.2 and 1.14.0. Unlike Doxygen itself that generates different CSS files depending on the HTML color style, doxygen-awesome-css use the same CSS that defaults to auto-light, and relies on adding "light-mode" to the class of the element manually to disable dark mode. As we don't this, doxygen-awesome-css effectively operates in auto-light mode. Given that setting HTML_COLORSTYLE to LIGHT makes no visible difference, leave the option unset to default to auto-light mode that matches the actual behaviour. Signed-off-by: Stefan Klug Signed-off-by: Laurent Pinchart Reviewed-by: Stefan Klug Reviewed-by: Barnabás Pőcze --- Changes since v2: - Drop HTML_COLORSTYLE - Drop GENERATE_TREEVIEW=YES as it is the default Changes since v1: - Fix ordering of configuration options - Use TOP_SRCDIR instead of CURRENT_SRCDIR to avoid introducing a new variable --- Documentation/Doxyfile-common.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/Doxyfile-common.in b/Documentation/Doxyfile-common.in index c9527da03ed5..23a0e3626f9d 100644 --- a/Documentation/Doxyfile-common.in +++ b/Documentation/Doxyfile-common.in @@ -54,6 +54,9 @@ EXCLUDE_SYMBOLS = libcamera::BoundMethodArgs \ IMAGE_PATH = "@TOP_SRCDIR@/Documentation/images" +HTML_EXTRA_STYLESHEET = "@TOP_SRCDIR@/Documentation/doxygen-awesome-css/doxygen-awesome.css" \ + "@TOP_SRCDIR@/Documentation/doxygen-awesome-css/doxygen-awesome-sidebar-only.css" + GENERATE_LATEX = NO MACRO_EXPANSION = YES From patchwork Wed Sep 17 20:17:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24382 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 78430C328C for ; Wed, 17 Sep 2025 20:18:26 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 0D5AF6937D; Wed, 17 Sep 2025 22:18:25 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="W52OhDtC"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8721869376 for ; Wed, 17 Sep 2025 22:18:18 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 471C8E92; Wed, 17 Sep 2025 22:16:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140219; bh=NvwcDXLEkIiG0esIkAXfK7zlF1JqpwyOSVEL3Sio+Fw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W52OhDtC4M7dH9LFq3T+i43ib2oxpY1eVJdWTPiT0oishP8mjuokCJmmcib5tzLNf go1G7cgpDIbN1F/fHBgGOtN1fEikxgFxwMtDn4UaNy97kHRmn//Pzfvx5bWuK3QbKG reaqiE9s1ZDe814BYIogwElnfVrtRANfGZcOCTK8= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [PATCH v3 04/10] Documentation: Use the sphinx book theme Date: Wed, 17 Sep 2025 23:17:35 +0300 Message-ID: <20250917201742.16406-5-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Stefan Klug Our current theme doesn't handle many of the rst features (namely notes, proper code highlighting, font formatting). The sphinx book theme provides a unobtrusive design which makes the documentation way more fun to read. The branding is minimal. The libcamera logo is included and theme colors are set to the libcamera blue. To get meson/sphinx to successfully compile the docs the package "python3-sphinx-book-theme" needs to be installed (at least on debian based systems). Signed-off-by: Stefan Klug Signed-off-by: Laurent Pinchart Reviewed-by: Stefan Klug --- Changes since v1: - Add SPDX license header to custom.css - Update .reuse/dep5 - Fix typo in commit message - Replace double with single quotes in conf.py.in - Rename logo-and-text.svg to libcamera-logo-text.svg --- .reuse/dep5 | 5 +- Documentation/conf.py.in | 19 +- Documentation/meson.build | 2 +- Documentation/theme/footer.html | 14 - Documentation/theme/layout.html | 109 ------- Documentation/theme/search.html | 63 ---- Documentation/theme/static/css/theme.css | 295 ------------------ Documentation/theme/static/custom.css | 5 + .../theme/static/libcamera-logo-text.svg | 223 +++++++++++++ Documentation/theme/static/search.png | Bin 482 -> 0 bytes Documentation/theme/theme.conf | 7 - README.rst | 4 +- 12 files changed, 248 insertions(+), 498 deletions(-) delete mode 100644 Documentation/theme/footer.html delete mode 100644 Documentation/theme/layout.html delete mode 100644 Documentation/theme/search.html delete mode 100644 Documentation/theme/static/css/theme.css create mode 100644 Documentation/theme/static/custom.css create mode 100644 Documentation/theme/static/libcamera-logo-text.svg delete mode 100644 Documentation/theme/static/search.png delete mode 100644 Documentation/theme/theme.conf diff --git a/.reuse/dep5 b/.reuse/dep5 index c5ef5e01b0f9..9cdb56e81ae3 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -6,13 +6,10 @@ Source: https://git.libcamera.org/libcamera/libcamera.git/ Files: Documentation/binning.svg Documentation/camera-sensor-model.rst Documentation/sensor_model.svg + Documentation/theme/static/libcamera-logo-text.svg Copyright: Copyright 2023 Ideas On Board Oy License: CC-BY-SA-4.0 -Files: Documentation/theme/static/search.png -Copyright: 2022 Fonticons, Inc. -License: CC-BY-4.0 - Files: src/ipa/rpi/vc4/data/*.json utils/raspberrypi/ctt/ctt_config_example.json utils/raspberrypi/ctt/ctt_ref.pgm diff --git a/Documentation/conf.py.in b/Documentation/conf.py.in index 097e579b575b..34fa3956f49e 100644 --- a/Documentation/conf.py.in +++ b/Documentation/conf.py.in @@ -88,8 +88,16 @@ doxylink = { # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'theme' -html_theme_path = ['@THEME_DIR@'] +html_theme = 'sphinx_book_theme' +html_theme_path = [] + +html_logo = '@CURRENT_SRCDIR@/theme/static/libcamera-logo-text.svg' + +html_context = { + # Set the default mode, so that syntax highlighting works without + # javascript. + 'default_mode': 'light' +} # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -100,7 +108,7 @@ html_theme_path = ['@THEME_DIR@'] # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = [] +html_static_path = ['@CURRENT_SRCDIR@/theme/static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. @@ -111,3 +119,8 @@ html_static_path = [] # 'searchbox.html']``. # # html_sidebars = {} + +html_css_files = [ + 'custom.css', +] + diff --git a/Documentation/meson.build b/Documentation/meson.build index a8d4afc01dd1..f73407432fff 100644 --- a/Documentation/meson.build +++ b/Documentation/meson.build @@ -142,7 +142,7 @@ if sphinx.found() sphinx_conf = configure_file(input : 'conf.py.in', output : 'conf.py', configuration : { - 'THEME_DIR': meson.current_source_dir(), + 'CURRENT_SRCDIR': meson.current_source_dir(), 'TOP_BUILDDIR': meson.project_build_root(), }) diff --git a/Documentation/theme/footer.html b/Documentation/theme/footer.html deleted file mode 100644 index 12939e8b7c12..000000000000 --- a/Documentation/theme/footer.html +++ /dev/null @@ -1,14 +0,0 @@ -{# -SPDX-License-Identifier: CC-BY-SA-4.0 -#} -
-
- {%- if show_copyright %} - {%- if hasdoc('copyright') %} - {% trans path=pathto('copyright'), copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} - {%- else %} - {% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} - {%- endif %} - {%- endif %} -
-
diff --git a/Documentation/theme/layout.html b/Documentation/theme/layout.html deleted file mode 100644 index 4fffefab62eb..000000000000 --- a/Documentation/theme/layout.html +++ /dev/null @@ -1,109 +0,0 @@ -{# -SPDX-License-Identifier: CC-BY-SA-4.0 -#} -{# TEMPLATE VAR SETTINGS #} -{%- set url_root = pathto('', 1) %} -{%- if url_root == '#' %}{% set url_root = '' %}{% endif %} -{%- if not embedded and docstitle %} - {%- set titlesuffix = " — "|safe + docstitle|e %} -{%- else %} - {%- set titlesuffix = "" %} -{%- endif %} - - - - {{ metatags }} - - {% block htmltitle %} - {{ title|striptags|e }}{{ titlesuffix }} - {% endblock %} - - {# FAVICON #} - {% if favicon %} - - {% endif %} - - {# CSS #} - - {# OPENSEARCH #} - {% if not embedded %} - {% if use_opensearch %} - - {% endif %} - - {% endif %} - - {% for cssfile in css_files %} - - {% endfor %} - - {% for cssfile in extra_css_files %} - - {% endfor %} - - {%- block linktags %} - {%- if hasdoc('about') %} - - {%- endif %} - {%- if hasdoc('genindex') %} - - {%- endif %} - {%- if hasdoc('search') %} - - {%- endif %} - {%- if hasdoc('copyright') %} - - {%- endif %} - - {%- if parents %} - - {%- endif %} - {%- if next %} - - {%- endif %} - {%- if prev %} - - {%- endif %} - {%- endblock %} - {%- block extrahead %} {% endblock %} - - - - -
- -
- -
- {# PAGE CONTENT #} -
- {% block body %}{% endblock %} -
-
- - {% include "footer.html" %} - - diff --git a/Documentation/theme/search.html b/Documentation/theme/search.html deleted file mode 100644 index 00c2af93a1b3..000000000000 --- a/Documentation/theme/search.html +++ /dev/null @@ -1,63 +0,0 @@ -{# -SPDX-License-Identifier: CC-BY-SA-4.0 -#} -{# - basic/search.html - ~~~~~~~~~~~~~~~~~ - - Template for the search page. - - :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. - :license: BSD, see LICENSE for details. -#} -{%- extends "layout.html" %} -{% block extrahead %} - - {%- for scriptfile in script_files %} - - {%- endfor %} - - - {# this is used when loading the search index using $.ajax fails, - such as on Chrome for documents on localhost #} - -{% endblock %} -{% block body %} -

{{ _('Search') }}

-
- -

- Please activate JavaScript to enable the search functionality. -

-
-

- From here you can search these documents. Enter your search - words into the box below and click "search". Note that the search - function will automatically search for all of the words. Pages - containing fewer words won't appear in the result list. -

-
- - - -
- {% if search_performed %} -

{{ _('Search Results') }}

- {% if not search_results %} -

{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}

- {% endif %} - {% endif %} -
- {% if search_results %} -
    - {% for href, caption, context in search_results %} -
  • {{ caption }} -
    {{ context|e }}
    -
  • - {% endfor %} -
- {% endif %} -
-{% endblock %} diff --git a/Documentation/theme/static/css/theme.css b/Documentation/theme/static/css/theme.css deleted file mode 100644 index a6d43195c018..000000000000 --- a/Documentation/theme/static/css/theme.css +++ /dev/null @@ -1,295 +0,0 @@ -/* SPDX-License-Identifier: CC-BY-SA-4.0 */ - -html { - background-image: linear-gradient(to bottom right, #4895e1, #56c3ae); - background-size: cover; - background-repeat: no-repeat; - min-height: 100vh; -} - -body { - color: rgb(0, 0, 0, 0.65); - font-family: Arial, sans-serif; - margin: 0px; -} - -a { - color: unset; - font-weight: bold; - text-decoration: underline dotted; -} - -a.headerlink { - color: rgba(0, 0, 0, 0.2); - font-size: 70%; - padding-left: 5px; - visibility: hidden; -} - -a.toc-backref { - text-decoration: none; -} - -h1:hover a.headerlink, -h2:hover a.headerlink, -h3:hover a.headerlink, -h4:hover a.headerlink, -h5:hover a.headerlink, -h6:hover a.headerlink { - visibility: visible; -} - -dt { - font-weight: bold; -} - -.text-light { - color: rgba(255, 255, 255, 0.3); -} - -div#navbar { - margin-top: 0px; -} - -div.navbar-brand { - color: rgb(255, 255, 255, 1.0); - float: left; - font-size: 36px; - margin: 0px 24px 24px 24px; -} - -div.navbar-logo { - float: left; - font-family: monospace; - font-size: 18px; - font-weight: bold; - white-space: pre; -} - -div.navbar-name { - float: left; - color: rgb(255, 255, 255, 1.0); - font-size: 34px; - margin-top: 31px; - margin-left: 10px; - padding-top: 1px; -} - -div.navbar { - float: right; -} - -div.navbar p.caption { - height: 0px; - margin: 0px; - visibility: hidden; -} - -div.navbar ul { - float: left; - font-size: 24px; - list-style: none; - margin-top: 42px; - margin-right: 20px; - padding-left: 0px; -} - -div.navbar a { - font-weight: normal; - text-decoration: none; -} - -div.navbar li { - float: left; - margin-left: 20px; - margin-right: 20px; - position: relative; -} - -div.navbar li a { - color: rgb(255, 255, 255, 0.5); - position: relative; -} - -div.navbar li a:before { - content: ""; - position: absolute; - width: 100%; - height: 2px; - bottom: 0; - left: 0; - background-color: rgb(255, 255, 255, 0.5); - visibility: hidden; - transform: scaleX(0); - transition: all 0.3s ease-in-out 0s; -} - -div.navbar li a:hover { - color: rgb(255, 255, 255, 1.0); -} - -div.navbar li a:hover:before { - visibility: visible; - transform: scaleX(1); -} - -div.navbar li.current a { - color: rgb(255, 255, 255, 1.0); -} - -div.navbar li.current a:before { - visibility: visible; - transform: unset; - transition: unset; -} - -div.navbar div.searchbox { - background-color: white; - float: right; - margin-right: 50px; - margin-top: 42px; -} - -div.navbar input[type=text] { - border-width: 0; - height: 2em; - margin-left: 10px; - margin-right: 5px; -} - -div.navbar input[type=submit] { - background-color: white; - background-image: url(../search.png); - background-repeat: no-repeat; - border-width: 0; - color: rgba(0, 0, 0, 0); - margin-right: 2px; - width: 20px; -} - -div#frontpage { - clear: both; - padding-top: 50px; - margin-left: auto; - margin-right: auto; - width: 75%; - display: flex; - justify-content: space-between; -} - -div#frontpage > div.block { - background-color: white; - border-radius: 5px; - box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 40px 0 rgba(0, 0, 0, 0.19); - color: rgb(0, 0, 0, 0.5); - font-size: 20px; - margin-bottom: 40px; - margin-right: 20px; - margin-left: 20px; - padding: 20px 60px 20px 60px; - text-align: center; - width: 50%; -} - -div#frontpage > div.block h1 { - font-size: 64px; - padding-left: 20%; - padding-right: 20%; - text-align: center; - text-shadow: 4px 4px 5px; -} - -div#content { - background-color: white; - clear: both; - padding-top: 50px; - padding-bottom: 50px; - margin-left: 0px; - margin-right: 0px; -} - -div#content > div.block { - font-size: 16px; - margin-right: 0px; - margin-left: 0px; - max-width: 1280px; - padding: 0px 60px 0px 60px; - text-align: justify; -} - -div#content > div.block h1 { - font-size: 40px; - margin-top: 0px; - text-align: left; -} - -div#content > div.block > div.section { - max-width: 800px; -} - -div.local.topic { - float: right; - background-color: #fcfcff; - border: 1px dotted #4896e0; - margin-left: 20px; - margin-right: 0px; - max-width: 15em; - padding: 10px 20px 10px 10px; - text-align: left; -} - -div.local.topic ul { - padding-left: 20px; - margin-bottom: 5px; -} - -div.local.topic > ul:before { - content: "Contents"; - display: block; - font-weight: bold; - margin-bottom: 10px; -} - -div.local.topic a { - font-weight: normal; - padding-left: 10px; - text-decoration: none; -} - -div.highlight-shell > div.highlight > pre, -pre.console { - background-color: #fcfcff; - border: 1px dotted #4896e0; - margin-left: 0em; - padding: 10px; - text-align: left; -} - -div.highlight-default > div.highlight > pre, -pre.diagram { - background-color: #fcfcff; - border: 1px dotted #4896e0; - font-size: 12px; - margin-left: 0em; - padding: 10px; - text-align: left; - width: 47em; -} - -div#signature { - color: rgb(255, 255, 255, 0.5); - margin: 20px; - float: right; - font-size: 12px; -} - -#licensing div.toctree-wrapper { - height: 0px; - margin: 0px; - padding: 0px; - visibility: hidden; -} - -.documentation-nav { - display: none; -} diff --git a/Documentation/theme/static/custom.css b/Documentation/theme/static/custom.css new file mode 100644 index 000000000000..0be62294490a --- /dev/null +++ b/Documentation/theme/static/custom.css @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: CC-BY-SA-4.0 */ +/* Hide the documentation nav. It is only used on the website. */ +.documentation-nav { + display: none; +} diff --git a/Documentation/theme/static/libcamera-logo-text.svg b/Documentation/theme/static/libcamera-logo-text.svg new file mode 100644 index 000000000000..e623e3219a90 --- /dev/null +++ b/Documentation/theme/static/libcamera-logo-text.svg @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/theme/static/search.png b/Documentation/theme/static/search.png deleted file mode 100644 index a93c40eb08106554488deaed910aba0f5aef5ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)S{Qv(y11W$BjsN}6-{)Vx|M`d06c#vZ@BJ4Ihb|v` z{Q4gQ11Af!uc~y5qrR#TFPa8Mh?6FtzL~%Ctf7Qpw2q<#567){pJ$)D^X1p?EfEg3 za$+bt{{R1f{K;#k=A~KNPW}D&?>`KD`0>kj!7kC>HSfRw{Eq|}{{R0UwEB?Fj4jBj zA>iq!ZyasQJC9yP7Gz>zU^w*fRiw586C)#wD-<~Q`l02L@-hA47{{;&Z z)31O31UcCD$2#ka3!-RXU|{(0L+`-G70ssI207*qoM6N<$g81y{PXGV_ diff --git a/Documentation/theme/theme.conf b/Documentation/theme/theme.conf deleted file mode 100644 index f2ab39c33c5b..000000000000 --- a/Documentation/theme/theme.conf +++ /dev/null @@ -1,7 +0,0 @@ -# SPDX-License-Identifier: CC-BY-SA-4.0 - -[theme] -inherit = basic -stylesheet = css/theme.css - -[options] diff --git a/README.rst b/README.rst index 7c8bc6db6712..56b2e0956e36 100644 --- a/README.rst +++ b/README.rst @@ -67,8 +67,8 @@ for device hotplug enumeration: [optional] libudev-dev for documentation: [optional] - doxygen graphviz python3-sphinx python3-sphinxcontrib.doxylink (>= 1.6.1) - texlive-latex-extra + doxygen graphviz python3-sphinx python3-sphinx-book-theme + python3-sphinxcontrib.doxylink (>= 1.6.1) texlive-latex-extra for gstreamer: [optional] libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev From patchwork Wed Sep 17 20:17:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24383 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 1716AC328C for ; Wed, 17 Sep 2025 20:18:29 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 4E6D86937A; Wed, 17 Sep 2025 22:18:28 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="NQIw4F/O"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 24E9F6937A for ; Wed, 17 Sep 2025 22:18:20 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 0C02C14A6 for ; Wed, 17 Sep 2025 22:17:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140221; bh=vqDUgyvGHMXSrd77KXbTClHlOwxl9QEdRtlCANlnfwg=; h=From:To:Subject:Date:In-Reply-To:References:From; b=NQIw4F/OQSVB6YfdMugBhyhsFdMTNSQoMwlgr04Y0unJVwB39m6NbvsBQseE2pNdE nca3Ridz60RQL9wohQJNHa7bTlOGb02c6jBH89/JNGlUyeis766c3J/5irx1He+f84 ysoC9gcLwpo9Ga1h+GjltEkeltQVtzt+tT1AUadE= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Subject: [PATCH v3 05/10] Documentation: Add api-html/ and internal-api-html/ to docs sources Date: Wed, 17 Sep 2025 23:17:36 +0300 Message-ID: <20250917201742.16406-6-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The api-html/index.rst and internal-api-html/index.rst files are missing from docs_sources. Changes to those files therefore don't trigger a documentation rebuild. Fix it. Signed-off-by: Laurent Pinchart Reviewed-by: Stefan Klug Reviewed-by: Barnabás Pőcze --- Documentation/meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/meson.build b/Documentation/meson.build index f73407432fff..8cf7775902f3 100644 --- a/Documentation/meson.build +++ b/Documentation/meson.build @@ -150,6 +150,7 @@ if sphinx.found() sphinx_conf_dir = fs.parent(sphinx_conf) docs_sources = [ + 'api-html/index.rst', 'camera-sensor-model.rst', 'code-of-conduct.rst', 'coding-style.rst', @@ -164,6 +165,7 @@ if sphinx.found() 'guides/pipeline-handler.rst', 'guides/tracing.rst', 'index.rst', + 'internal-api-html/index.rst', 'introduction.rst', 'lens_driver_requirements.rst', 'libcamera_architecture.rst', From patchwork Wed Sep 17 20:17:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24384 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 6FE7FC328C for ; Wed, 17 Sep 2025 20:18:31 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 088F969385; Wed, 17 Sep 2025 22:18:31 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="rz/7CZqG"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DC0CF6937B for ; Wed, 17 Sep 2025 22:18:21 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id B6248164C; Wed, 17 Sep 2025 22:17:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140222; bh=Z5HdlBmEqK1abtJPIYUqwr24PZO2TM9peYPnTQwbkRY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rz/7CZqGfwpn1BCvXWTj+TDhnKh1BHMIfElv+hMQ1j0YAiyx7vheMsdNKEaLGD87j BsqVfUV0SYizBYv/9+AFni1J7cP4dwlufv6FpflQskYs2/6qJ4o8E7W5M4cYAzIUSR N+ZwcEAetXmUcVN9+S6RHv+ccpKNGzh8w4eqdKm4= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [PATCH v3 06/10] Documentation: Reorganize toctree Date: Wed, 17 Sep 2025 23:17:37 +0300 Message-ID: <20250917201742.16406-7-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Stefan Klug The libcamera Sphinx documentation contains three toctrees: a main toctree that contains all documentation pages in a flat hierarchy, and two hidden toctrees that point to the introduction and API pages. This architecture is mostly meant to support publishing the documentation on the libcamera.org website. The process recreates a hybrid documentation tree mixing content specific to the website and content extracted from libcamera. The hidden toctrees are used to prevent Sphinx from warning about unreferenced pages when the documentation is built as part of libcamera. This set of hacks work, but produce unorganized documentation in the build directory, as well as when installed to the system. Furthermore, they make it difficult to host multiple versions of the libcamera documentation on the website, which we will eventually want to do as the API stabilizes. It would be generally better to host on libcamera.org the documentation built as part of libcamera with the same structure of documents. To prepare for that change, reorganize the toctrees in libcamera with three visible trees: a toctree for users, a toctree for developers, and a toctree for integrators. Include the public and internal API pages in the first two trees respectively. This mimics the structure of the documentation as currently organized on the website. The resulting documentation becomes easier to navigate in the build and installation directories. Signed-off-by: Stefan Klug Signed-off-by: Laurent Pinchart Reviewed-by: Barnabás Pőcze --- Changes since v2: - Update commit message Changes since v1: - Split the build changes to a separate patch --- Documentation/index.rst | 45 ++++++++++++++++++++-------------- Documentation/introduction.rst | 6 ----- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/Documentation/index.rst b/Documentation/index.rst index 251112fbdf5f..d55b5ff21464 100644 --- a/Documentation/index.rst +++ b/Documentation/index.rst @@ -4,28 +4,35 @@ .. toctree:: :maxdepth: 1 - :caption: Contents: + :caption: For Users - Home - Contribute - Getting Started - - Application Writer's Guide - Camera Sensor Model - Environment variables + Introduction Feature Requirements - IPA Writer's guide - Lens driver requirements - libcamera Architecture - Pipeline Handler Writer's Guide + Application Writer's Guide Python Bindings - Sensor driver requirements - SoftwareISP Benchmarking - Tracing guide - - Design document: AE + Environment variables + Public API .. toctree:: - :hidden: + :maxdepth: 1 + :caption: For Developers + + Contribute + Getting Started + Camera Sensor Model + IPA Writer's guide + libcamera Architecture + Pipeline Handler Writer's Guide + SoftwareISP Benchmarking + Tracing guide + Design document: AE + Internal API + +.. toctree:: + :maxdepth: 1 + :caption: For System Integrators + + Lens driver requirements + Sensor driver requirements + - introduction diff --git a/Documentation/introduction.rst b/Documentation/introduction.rst index 82aa11a30f33..d76cebd05ee1 100644 --- a/Documentation/introduction.rst +++ b/Documentation/introduction.rst @@ -6,12 +6,6 @@ Introduction ************ -.. toctree:: - :hidden: - - API - Internal API - What is libcamera? ================== From patchwork Wed Sep 17 20:17:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24385 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id E5E3BC328C for ; Wed, 17 Sep 2025 20:18:33 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D63AA69382; Wed, 17 Sep 2025 22:18:32 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="iIAwUDKX"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 97CA069379 for ; Wed, 17 Sep 2025 22:18:23 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 7259F6A8 for ; Wed, 17 Sep 2025 22:17:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140224; bh=N376aSK3qfu1wiTEhislzcSsHMcg6yFxbo6+C/X4bHo=; h=From:To:Subject:Date:In-Reply-To:References:From; b=iIAwUDKXiuXWZyysQYiS9vDXl8LseyomQanpr3nT7jo1suLFxfIl7vDvxyzWY/O/C 0EceE33MPJ86zYKYxPrcT2rBoXoT4Kbh6tRf8oNN7Xe4+gApZCnl1PWOKF4g0VYVhf wpWPQzvV857Tzz1f7tCWHPseFH+pCJRYDakg4Z3U= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Subject: [PATCH v3 07/10] Documentation: Improve Sphinx and Doxygen integration Date: Wed, 17 Sep 2025 23:17:38 +0300 Message-ID: <20250917201742.16406-8-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The libcamera documentation comprises two parts: pages generated by Sphinx into the Documentation/html/ directory within the build tree, and API reference documentation generated by Doxygen into Documentation/internal-api-html/ and Documentation/api-html/. The two parts are generated separately, but link to each other. From Sphinx to Doxygen, we use the doxylink extension for Sphinx to generate links to the Doxygen pages corresponding to API elements. The extension needs to be configured with the paths to the Doxygen documentation, which are set based on the html/, api-html/ and internal-api-html/ directories being placed side by side in the same parent directory. Furthermore, we also want to link to the API documentation from the Sphinx toctree. As toctrees can only link to pages within the Sphinx documents tree (or to http URLs), we have placeholder .rst documents for api-html and internal-api-html in the Sphinx documentation tree. Those generate the Documentation/html/internal-api-html/index.html and Documentation/html/api-html/index.html placeholder files in the build tree. The other way around, the API documentation's introduction pagelinks to Sphinx pages using relative paths. Those paths are hardcoded based on the api-html/ and internal-api-html/ directories being children of the html/ directory. This results in links being broken in different ways in the build tree, as well as in the installation directory: the toctree links direct to the placeholder pages within the html/ directory instead of the Doxygen documentation in sibling directories, and the Doxygen introduction links to Sphinx are simply broken. When publishing documentation on the website we work around those issues by patching several files and moving the api-html/ and internal-api-html/ directories to the html/ directory. Fixing this is surprisingly difficult. The toctree links can't be changed to point to a path outside of the Sphinx document tree as this isn't supported by Sphinx. Using http URLs would link to the libcamera.org website inside of local documentation, which isn't acceptable. It may be possible to develop a Sphinx extension to patch the toctree after it gets parsed, but that would be complex and likely fragile. Modifying the install path of the Doxygen documentation to html/api-html/ and html/internal-api-html/ causes issues as the Sphinx documentation will then overwrite the Doxygen index.html files with the placeholder indexes. Creating symlinks from html/api-html/ to api-html/ in the installation directory causes similar problems if 'meson install' is run twice. Creating the symlinks in the build directory (which was attempted with a custom Sphinx extension) is also a no-go: starting with meson v1.8.0, installing symlinks to directories causes an exception due to a bug in meson. The right solution is probably to investigate usage of the doxysphinx extension. As that's no small amount of work, let's start with a non-perfect but simple improvement: configure doxylink based on the api-html/ and internal-api-html/ directories being children of the Sphinx html/ documentation, and move those two API documentation directories to html/ during installation with a post-install script. This fixes links in the installation directory. Links in the build directory remain broken, but that is not a regression. Signed-off-by: Laurent Pinchart Reviewed-by: Stefan Klug --- Documentation/conf.py.in | 4 ++-- Documentation/install-doxygen.sh | 18 ++++++++++++++++++ Documentation/meson.build | 3 +++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100755 Documentation/install-doxygen.sh diff --git a/Documentation/conf.py.in b/Documentation/conf.py.in index 34fa3956f49e..2c75a75799e6 100644 --- a/Documentation/conf.py.in +++ b/Documentation/conf.py.in @@ -75,11 +75,11 @@ pygments_style = None doxylink = { 'doxy-pub': ( '@TOP_BUILDDIR@/Documentation/api-html/tagfile.xml', - '../api-html/', + 'api-html/', ), 'doxy-int': ( '@TOP_BUILDDIR@/Documentation/internal-api-html/tagfile.xml', - '../internal-api-html/', + 'internal-api-html/', ), } diff --git a/Documentation/install-doxygen.sh b/Documentation/install-doxygen.sh new file mode 100755 index 000000000000..ea5a19dc8fda --- /dev/null +++ b/Documentation/install-doxygen.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2025, Ideas on Board Oy +# +# Author: Laurent Pinchart +# +# Move Doxygen-generated API documentation to correct location + +doc_dir="${MESON_INSTALL_DESTDIR_PREFIX}/$1" +shift +dirs="$*" + +echo "Moving API documentation" + +for dir in $dirs ; do + rm -r "${doc_dir}/html/${dir}" + mv "${doc_dir}/${dir}" "${doc_dir}/html/" +done diff --git a/Documentation/meson.build b/Documentation/meson.build index 8cf7775902f3..022770968fcf 100644 --- a/Documentation/meson.build +++ b/Documentation/meson.build @@ -193,6 +193,9 @@ if sphinx.found() install_dir : doc_install_dir, install_tag : 'doc') + meson.add_install_script('install-doxygen.sh', doc_install_dir, + 'api-html', 'internal-api-html') + custom_target('documentation-linkcheck', command : [sphinx, '-W', '-b', 'linkcheck', '-c', sphinx_conf_dir, From patchwork Wed Sep 17 20:17:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24386 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 6B76AC32C2 for ; Wed, 17 Sep 2025 20:18:36 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 34D856937B; Wed, 17 Sep 2025 22:18:35 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="MBRLfz3o"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 50CD069381 for ; Wed, 17 Sep 2025 22:18:25 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 227BB6A8; Wed, 17 Sep 2025 22:17:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140226; bh=sCeu9Rr5+OSWUlOcj41JOIw8spmDJBWVuL45OhxHsLQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MBRLfz3oY/zifyl76Y2mIWkNwIAzwoIwVJ431j9DDMAHLx7c8GnTagp8QkRjCX3/z tCwnZoTz6DqqFx3QG5BX0VVsWxbFpkyXfjhCFAwGYTiJnglwIP2qP0LNvKrlqAsmGQ n6Rm7UmONT54odNjDUMI+Mk7Syib5XbAiAG9aV0Y= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [PATCH v3 08/10] Documentation: Drop unnecessary documentation-contents.rst Date: Wed, 17 Sep 2025 23:17:39 +0300 Message-ID: <20250917201742.16406-9-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Stefan Klug The libcamera.org documentation publishing process does not rely on a particular structure of the documentation anymore. This makes documentation-contents.rst unneeded. Drop it. Signed-off-by: Stefan Klug Signed-off-by: Laurent Pinchart Reviewed-by: Barnabás Pőcze --- Changes since v2: - Update commit message Changes since v1: - Remove html_css_files completely --- Documentation/camera-sensor-model.rst | 2 -- Documentation/code-of-conduct.rst | 2 -- Documentation/coding-style.rst | 2 -- Documentation/conf.py.in | 7 +--- Documentation/documentation-contents.rst | 35 ------------------- Documentation/environment_variables.rst | 2 -- Documentation/feature_requirements.rst | 2 -- .../guides/application-developer.rst | 2 -- Documentation/guides/ipa.rst | 2 -- Documentation/guides/pipeline-handler.rst | 2 -- Documentation/guides/tracing.rst | 2 -- Documentation/introduction.rst | 2 -- Documentation/lens_driver_requirements.rst | 2 -- Documentation/libcamera_architecture.rst | 2 -- Documentation/meson.build | 1 - Documentation/python-bindings.rst | 2 -- Documentation/sensor_driver_requirements.rst | 2 -- Documentation/software-isp-benchmarking.rst | 2 -- Documentation/theme/static/custom.css | 5 --- 19 files changed, 1 insertion(+), 77 deletions(-) delete mode 100644 Documentation/documentation-contents.rst delete mode 100644 Documentation/theme/static/custom.css diff --git a/Documentation/camera-sensor-model.rst b/Documentation/camera-sensor-model.rst index 87a25bf4a7fc..b66c880a5e00 100644 --- a/Documentation/camera-sensor-model.rst +++ b/Documentation/camera-sensor-model.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - .. _camera-sensor-model: .. todo: Move to Doxygen-generated documentation diff --git a/Documentation/code-of-conduct.rst b/Documentation/code-of-conduct.rst index 0edd1e9955e0..38b7d7ad679f 100644 --- a/Documentation/code-of-conduct.rst +++ b/Documentation/code-of-conduct.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-4.0 -.. include:: documentation-contents.rst - .. _code-of-conduct: Contributor Covenant Code of Conduct diff --git a/Documentation/coding-style.rst b/Documentation/coding-style.rst index 6ac3a4a0d517..3352b75c76c8 100644 --- a/Documentation/coding-style.rst +++ b/Documentation/coding-style.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - .. _coding-style-guidelines: Coding Style Guidelines diff --git a/Documentation/conf.py.in b/Documentation/conf.py.in index 2c75a75799e6..349feda2a610 100644 --- a/Documentation/conf.py.in +++ b/Documentation/conf.py.in @@ -108,7 +108,7 @@ html_context = { # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['@CURRENT_SRCDIR@/theme/static'] +html_static_path = [] # Custom sidebar templates, must be a dictionary that maps document names # to template names. @@ -119,8 +119,3 @@ html_static_path = ['@CURRENT_SRCDIR@/theme/static'] # 'searchbox.html']``. # # html_sidebars = {} - -html_css_files = [ - 'custom.css', -] - diff --git a/Documentation/documentation-contents.rst b/Documentation/documentation-contents.rst deleted file mode 100644 index 5c1118493745..000000000000 --- a/Documentation/documentation-contents.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. SPDX-License-Identifier: CC-BY-SA-4.0 - -.. container:: documentation-nav - - * **Documentation for Users** - * :doc:`Introduction ` - * :doc:`/feature_requirements` - * :doc:`/guides/application-developer` - * :doc:`/python-bindings` - * :doc:`/environment_variables` - * :doc:`/api-html/index` - * :doc:`/code-of-conduct` - * | - * **Documentation for Developers** - * :doc:`/libcamera_architecture` - * :doc:`/guides/pipeline-handler` - * :doc:`/guides/ipa` - * :doc:`/camera-sensor-model` - * :doc:`/guides/tracing` - * :doc:`/software-isp-benchmarking` - * :doc:`/coding-style` - * :doc:`/internal-api-html/index` - * | - * **Documentation for System Integrators** - * :doc:`/lens_driver_requirements` - * :doc:`/sensor_driver_requirements` - -.. - The following directive adds the "documentation" class to all of the pages - generated by sphinx. This is not relevant in libcamera nor addressed in the - theme's CSS, since all of the pages here are documentation. It **is** used - to properly format the documentation pages on libcamera.org and so should not - be removed. - -.. rst-class:: documentation diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst index 0cb4e27cd670..099769eab677 100644 --- a/Documentation/environment_variables.rst +++ b/Documentation/environment_variables.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - Environment variables ===================== diff --git a/Documentation/feature_requirements.rst b/Documentation/feature_requirements.rst index e6b74a62906a..1bceb3028cd0 100644 --- a/Documentation/feature_requirements.rst +++ b/Documentation/feature_requirements.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - Feature Requirements ==================== diff --git a/Documentation/guides/application-developer.rst b/Documentation/guides/application-developer.rst index bccb54acc6d4..06c07d1e9449 100644 --- a/Documentation/guides/application-developer.rst +++ b/Documentation/guides/application-developer.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: ../documentation-contents.rst - Using libcamera in a C++ application ==================================== diff --git a/Documentation/guides/ipa.rst b/Documentation/guides/ipa.rst index cd640563a5f9..25deadefaf7c 100644 --- a/Documentation/guides/ipa.rst +++ b/Documentation/guides/ipa.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: ../documentation-contents.rst - IPA Writer's Guide ================== diff --git a/Documentation/guides/pipeline-handler.rst b/Documentation/guides/pipeline-handler.rst index 2b866d98059c..85d9cc870021 100644 --- a/Documentation/guides/pipeline-handler.rst +++ b/Documentation/guides/pipeline-handler.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: ../documentation-contents.rst - Pipeline Handler Writers Guide ============================== diff --git a/Documentation/guides/tracing.rst b/Documentation/guides/tracing.rst index 537dce500338..ae960d85c075 100644 --- a/Documentation/guides/tracing.rst +++ b/Documentation/guides/tracing.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: ../documentation-contents.rst - Tracing Guide ============= diff --git a/Documentation/introduction.rst b/Documentation/introduction.rst index d76cebd05ee1..07b3a27ed007 100644 --- a/Documentation/introduction.rst +++ b/Documentation/introduction.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - ************ Introduction ************ diff --git a/Documentation/lens_driver_requirements.rst b/Documentation/lens_driver_requirements.rst index 85fef76f2580..b96e502d5da6 100644 --- a/Documentation/lens_driver_requirements.rst +++ b/Documentation/lens_driver_requirements.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - .. _lens-driver-requirements: Lens Driver Requirements diff --git a/Documentation/libcamera_architecture.rst b/Documentation/libcamera_architecture.rst index d2bd13e1dc39..ee67102a30a6 100644 --- a/Documentation/libcamera_architecture.rst +++ b/Documentation/libcamera_architecture.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - libcamera Architecture ====================== diff --git a/Documentation/meson.build b/Documentation/meson.build index 022770968fcf..54c32e249e45 100644 --- a/Documentation/meson.build +++ b/Documentation/meson.build @@ -157,7 +157,6 @@ if sphinx.found() sphinx_conf, 'contributing.rst', 'design/ae.rst', - 'documentation-contents.rst', 'environment_variables.rst', 'feature_requirements.rst', 'guides/application-developer.rst', diff --git a/Documentation/python-bindings.rst b/Documentation/python-bindings.rst index 947122384c88..ed9f686b311a 100644 --- a/Documentation/python-bindings.rst +++ b/Documentation/python-bindings.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - .. _python-bindings: Python Bindings for libcamera diff --git a/Documentation/sensor_driver_requirements.rst b/Documentation/sensor_driver_requirements.rst index fb4269d039a2..0e516b34a215 100644 --- a/Documentation/sensor_driver_requirements.rst +++ b/Documentation/sensor_driver_requirements.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - .. _sensor-driver-requirements: Sensor Driver Requirements diff --git a/Documentation/software-isp-benchmarking.rst b/Documentation/software-isp-benchmarking.rst index 9c2a409b140f..b303313210e8 100644 --- a/Documentation/software-isp-benchmarking.rst +++ b/Documentation/software-isp-benchmarking.rst @@ -1,7 +1,5 @@ .. SPDX-License-Identifier: CC-BY-SA-4.0 -.. include:: documentation-contents.rst - .. _software-isp-benchmarking: Software ISP benchmarking diff --git a/Documentation/theme/static/custom.css b/Documentation/theme/static/custom.css deleted file mode 100644 index 0be62294490a..000000000000 --- a/Documentation/theme/static/custom.css +++ /dev/null @@ -1,5 +0,0 @@ -/* SPDX-License-Identifier: CC-BY-SA-4.0 */ -/* Hide the documentation nav. It is only used on the website. */ -.documentation-nav { - display: none; -} From patchwork Wed Sep 17 20:17:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24387 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 6DD93C328C for ; Wed, 17 Sep 2025 20:18:38 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id A844169381; Wed, 17 Sep 2025 22:18:37 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="t9cS3OQY"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id E985669369 for ; Wed, 17 Sep 2025 22:18:26 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id C450A6A8; Wed, 17 Sep 2025 22:17:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140227; bh=NAlzJuLQAFRATtLdg7JIf5rfGFthI/BnLoLcCzPeGzE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=t9cS3OQYXrX6qPqzcbrmgNs3465wjMMUG5gThHK6STBokpw/PkaMpMdKwRLrAMvCK gqOsqrfEqUGz3kyBsa1FxVMs8YuUtlbdhhvqpSuKxlY8we9hepmk4DnzczRthdAgiP X6T25goKrpdDigr/+WrWAtSlkyVhxisxwp9rNeOY= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [PATCH v3 09/10] Documentation: mainpage: Make it easier to distinguish public and internal API Date: Wed, 17 Sep 2025 23:17:40 +0300 Message-ID: <20250917201742.16406-10-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Stefan Klug It might be confusing to consumers to see very similar looking doxygen documentation with different content. Improve that by clearly stating 'public API' or 'internal API' on the main page. Signed-off-by: Stefan Klug Reviewed-by: Laurent Pinchart Signed-off-by: Laurent Pinchart Reviewed-by: Barnabás Pőcze --- Changes since v2: - Fix typos in commit message Changes since v1: - Rename "libcamera Public-API reference" to "libcamera public API reference" (and same for the internal API) --- Documentation/mainpage.dox | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Documentation/mainpage.dox b/Documentation/mainpage.dox index cbee9bab12ec..fae99f28f1af 100644 --- a/Documentation/mainpage.dox +++ b/Documentation/mainpage.dox @@ -1,5 +1,9 @@ /** -\mainpage libcamera API reference +\if internal +\mainpage libcamera internal API reference +\else +\mainpage libcamera public API reference +\endif Welcome to the API reference for libcamera, a complex camera support library for Linux, Android and ChromeOS. These pages From patchwork Wed Sep 17 20:17:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24388 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 342D9C32C2 for ; Wed, 17 Sep 2025 20:18:40 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E0A4669387; Wed, 17 Sep 2025 22:18:38 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="CU4prVDo"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C191E6936F for ; Wed, 17 Sep 2025 22:18:28 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 75C936A8 for ; Wed, 17 Sep 2025 22:17:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1758140229; bh=nhGctzremn5oJB6NaVavevPQfUn1GychRdkJn4bYU54=; h=From:To:Subject:Date:In-Reply-To:References:From; b=CU4prVDo1ek+QXdSCk300AmAT8pfzaDYzJIVxiTQFi2evB0cr4eBmXDNghk6kAmmL pdw9deqxah3nT0jutkOKSyfWXkTfKcWVuTShjxX9oqwGQX/B47jbvXcZm5sI9kiNiT A25Iegehdqi4Z6Qj+hnqpt21nA71VlSNH8I5lztA= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Subject: [PATCH v3 10/10] Documentation: Rename api to public-api and drop -html suffix Date: Wed, 17 Sep 2025 23:17:41 +0300 Message-ID: <20250917201742.16406-11-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> References: <20250917201742.16406-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The public and internal Doxygen API documentation is compiled and installed in api-html and internal-api-html directories respectively. The '-html' suffix doesn't provide any value, and the asymmetry between the names can be confusing. Rename the directories to public-api and internal-api respectively. Signed-off-by: Laurent Pinchart Reviewed-by: Stefan Klug Reviewed-by: Barnabás Pőcze --- Documentation/Doxyfile-internal.in | 4 ++-- Documentation/Doxyfile-public.in | 4 ++-- Documentation/conf.py.in | 8 ++++---- Documentation/index.rst | 4 ++-- .../{internal-api-html => internal-api}/index.rst | 0 Documentation/mainpage.dox | 4 ++-- Documentation/meson.build | 10 +++++----- Documentation/{api-html => public-api}/index.rst | 0 8 files changed, 17 insertions(+), 17 deletions(-) rename Documentation/{internal-api-html => internal-api}/index.rst (100%) rename Documentation/{api-html => public-api}/index.rst (100%) diff --git a/Documentation/Doxyfile-internal.in b/Documentation/Doxyfile-internal.in index aeaa06e9d9d3..b64b6a6feef3 100644 --- a/Documentation/Doxyfile-internal.in +++ b/Documentation/Doxyfile-internal.in @@ -31,6 +31,6 @@ EXCLUDE = @TOP_SRCDIR@/include/libcamera/base/span.h \ @TOP_BUILDDIR@/include/libcamera/ipa/soft_ipa_interface.h \ @TOP_BUILDDIR@/src/libcamera/proxy/ -HTML_OUTPUT = internal-api-html +HTML_OUTPUT = internal-api -GENERATE_TAGFILE = @TOP_BUILDDIR@/Documentation/internal-api-html/tagfile.xml +GENERATE_TAGFILE = @TOP_BUILDDIR@/Documentation/internal-api/tagfile.xml diff --git a/Documentation/Doxyfile-public.in b/Documentation/Doxyfile-public.in index 917f24008579..9efb2b341ab4 100644 --- a/Documentation/Doxyfile-public.in +++ b/Documentation/Doxyfile-public.in @@ -16,8 +16,8 @@ EXCLUDE = @TOP_SRCDIR@/include/libcamera/base/class.h \ @TOP_SRCDIR@/src/libcamera/base/class.cpp \ @TOP_SRCDIR@/src/libcamera/base/object.cpp -HTML_OUTPUT = api-html +HTML_OUTPUT = public-api PREDEFINED += __DOXYGEN_PUBLIC__ -GENERATE_TAGFILE = @TOP_BUILDDIR@/Documentation/api-html/tagfile.xml +GENERATE_TAGFILE = @TOP_BUILDDIR@/Documentation/public-api/tagfile.xml diff --git a/Documentation/conf.py.in b/Documentation/conf.py.in index 349feda2a610..3054454b809c 100644 --- a/Documentation/conf.py.in +++ b/Documentation/conf.py.in @@ -74,12 +74,12 @@ pygments_style = None doxylink = { 'doxy-pub': ( - '@TOP_BUILDDIR@/Documentation/api-html/tagfile.xml', - 'api-html/', + '@TOP_BUILDDIR@/Documentation/public-api/tagfile.xml', + 'public-api/', ), 'doxy-int': ( - '@TOP_BUILDDIR@/Documentation/internal-api-html/tagfile.xml', - 'internal-api-html/', + '@TOP_BUILDDIR@/Documentation/internal-api/tagfile.xml', + 'internal-api/', ), } diff --git a/Documentation/index.rst b/Documentation/index.rst index d55b5ff21464..7f762bbcc998 100644 --- a/Documentation/index.rst +++ b/Documentation/index.rst @@ -11,7 +11,7 @@ Application Writer's Guide Python Bindings Environment variables - Public API + Public API .. toctree:: :maxdepth: 1 @@ -26,7 +26,7 @@ SoftwareISP Benchmarking Tracing guide Design document: AE - Internal API + Internal API .. toctree:: :maxdepth: 1 diff --git a/Documentation/internal-api-html/index.rst b/Documentation/internal-api/index.rst similarity index 100% rename from Documentation/internal-api-html/index.rst rename to Documentation/internal-api/index.rst diff --git a/Documentation/mainpage.dox b/Documentation/mainpage.dox index fae99f28f1af..99e67e7ab13d 100644 --- a/Documentation/mainpage.dox +++ b/Documentation/mainpage.dox @@ -20,7 +20,7 @@ your platform the [pipeline handler writer's guide](../guides/pipeline-handler.h and the [ipa module writer's guide](../guides/ipa.html) should be helpful. The full libcamera API is documented here. If you wish to see only the public -part of the API you can use [these pages](../api-html/index.html) instead. +part of the API you can use [these pages](../public-api/index.html) instead. \else @@ -31,7 +31,7 @@ gives an overview on how to achieve that. Only the public part of the libcamera API is documented here; if you are a developer seeking to add support for your hardware to the library or make other improvements, you should switch to the internal API -[reference pages](../internal-api-html/index.html) instead. +[reference pages](../internal-api/index.html) instead. \endif */ diff --git a/Documentation/meson.build b/Documentation/meson.build index 54c32e249e45..a5d8c20c30f9 100644 --- a/Documentation/meson.build +++ b/Documentation/meson.build @@ -86,7 +86,7 @@ if doxygen.found() and dot.found() doxyfile, doxyfile_common, ], - output : 'api-html', + output : 'public-api', command : [doxygen, doxyfile], install : true, install_dir : doc_install_dir, @@ -106,7 +106,7 @@ if doxygen.found() and dot.found() doxygen_public_input, doxygen_internal_input, ], - output : 'internal-api-html', + output : 'internal-api', command : [doxygen, doxyfile], install : true, install_dir : doc_install_dir, @@ -150,7 +150,6 @@ if sphinx.found() sphinx_conf_dir = fs.parent(sphinx_conf) docs_sources = [ - 'api-html/index.rst', 'camera-sensor-model.rst', 'code-of-conduct.rst', 'coding-style.rst', @@ -164,11 +163,12 @@ if sphinx.found() 'guides/pipeline-handler.rst', 'guides/tracing.rst', 'index.rst', - 'internal-api-html/index.rst', + 'internal-api/index.rst', 'introduction.rst', 'lens_driver_requirements.rst', 'libcamera_architecture.rst', 'mali-c55.dot', + 'public-api/index.rst', 'python-bindings.rst', 'sensor_driver_requirements.rst', 'software-isp-benchmarking.rst', @@ -193,7 +193,7 @@ if sphinx.found() install_tag : 'doc') meson.add_install_script('install-doxygen.sh', doc_install_dir, - 'api-html', 'internal-api-html') + 'public-api', 'internal-api') custom_target('documentation-linkcheck', command : [sphinx, '-W', '-b', 'linkcheck', diff --git a/Documentation/api-html/index.rst b/Documentation/public-api/index.rst similarity index 100% rename from Documentation/api-html/index.rst rename to Documentation/public-api/index.rst