From: Jean-Philippe Bruyère Date: Tue, 14 Dec 2021 17:43:39 +0000 (+0100) Subject: doxy + sphinx, device_status, unit vectors, save commit before testing html5 layout X-Git-Tag: v0.2.0~26 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=a2bf642cce97e5efca75f1a334f9e27035104b6d;p=jp%2Fvkvg.git doxy + sphinx, device_status, unit vectors, save commit before testing html5 layout --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fe00c9..a0f4574 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,7 +102,7 @@ FIND_PACKAGE(Doxygen) CMAKE_DEPENDENT_OPTION(VKVG_BUILD_TESTS "build tests with glfw" ON "GLFW3_FOUND" OFF) -CMAKE_DEPENDENT_OPTION(VKVG_BUILD_DOCS "build documentation" ON "DOXYGEN_FOUND" OFF) +CMAKE_DEPENDENT_OPTION(VKVG_BUILD_DOCS "build documentation" OFF "DOXYGEN_FOUND" OFF) #Freetype lcd font filtering #CHECK_SYMBOL_EXISTS (FT_CONFIG_OPTION_SUBPIXEL_RENDERING "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/config/ftoption.h" FT_HAS_SUBPIXEL_RENDERING) @@ -230,38 +230,46 @@ IF (VKVG_BUILD_DOCS) set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/html/index.html) set(DOXYFILE_IN ${DOXYGEN_DIR}/Doxygen.in) - set(DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) + set(DOXYFILE_OUT ${DOXYGEN_OUTPUT_DIR}/Doxyfile) + + #configure_file(${DOXYGEN_DIR}/dox_layout.xml ${DOXYGEN_OUTPUT_DIR}/dox_layout.xml @ONLY) configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY) + add_custom_target(copy-doc-files ALL + COMMAND ${CMAKE_COMMAND} -E copy_directory "${DOXYGEN_DIR}/doxy_theme" ${DOXYGEN_OUTPUT_DIR}) + add_custom_command(OUTPUT ${DOXYGEN_INDEX_FILE} - DEPENDS "${VKVG_PUBLIC_HEADERS}" + DEPENDS "${VKVG_PUBLIC_HEADERS}" copy-doc-files COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT} MAIN_DEPENDENCY ${DOXYFILE_OUT} ${DOXYFILE_IN} COMMENT "Generating docs") - add_custom_target(Doxygen ALL DEPENDS ${DOXYGEN_INDEX_FILE}) - -# find_package(Sphinx) - -# set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/docs/source) -# set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/doc/sphinx) -# set(SPHINX_INDEX_FILE ${SPHINX_BUILD}/index.html) - -# add_custom_command(OUTPUT ${SPHINX_INDEX_FILE} -# COMMAND -# ${SPHINX_EXECUTABLE} -b html -# -Dbreathe_projects.VKVG=${DOXYGEN_OUTPUT_DIR}/xml -# ${SPHINX_SOURCE} ${SPHINX_BUILD} -# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -# DEPENDS -# # Other docs files you want to track should go here (or in some variable) -# ${SPHINX_SOURCE}/index.rst -# ${DOXYGEN_INDEX_FILE} -# MAIN_DEPENDENCY ${SPHINX_SOURCE}/conf.py -# COMMENT "Generating documentation with Sphinx") - -# add_custom_target(Sphinx ALL DEPENDS ${SPHINX_INDEX_FILE}) - + add_custom_target(doxygen ALL DEPENDS ${DOXYGEN_INDEX_FILE}) + + find_package(Sphinx) + + IF (Sphinx_FOUND) + + set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/doc) + set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/doc/sphinx) + set(SPHINX_INDEX_FILE ${SPHINX_BUILD}/index.html) + + add_custom_command(OUTPUT ${SPHINX_INDEX_FILE} + COMMAND + ${SPHINX_EXECUTABLE} -b html + -Dbreathe_projects.VKVG=${DOXYGEN_OUTPUT_DIR}/xml + ${SPHINX_SOURCE} ${SPHINX_BUILD} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS + doxygen + # Other docs files you want to track should go here (or in some variable) + ${SPHINX_SOURCE}/index.rst + ${DOXYGEN_INDEX_FILE} + MAIN_DEPENDENCY ${SPHINX_SOURCE}/conf.py + COMMENT "Generating documentation with Sphinx") + + add_custom_target(sphinx ALL DEPENDS ${SPHINX_INDEX_FILE}) + ENDIF () ENDIF (VKVG_BUILD_DOCS) MESSAGE(STATUS "VKVG_PUBLIC_HEADERS = ${VKVG_PUBLIC_HEADERS}") @@ -307,10 +315,16 @@ ELSE () ENDIF () IF (VKVG_BUILD_DOCS) MESSAGE(STATUS "Build documentation\t= enabled.") + IF (Sphinx_FOUND) + MESSAGE(STATUS "Sphinx documentation\t= enabled.") + ELSE () + MESSAGE(STATUS "Sphinx documentation\t= disabled.") + ENDIF () ELSE () MESSAGE(STATUS "Build documentation\t= disabled.") ENDIF () + IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") INCLUDE(InstallRequiredSystemLibraries) diff --git a/doc/Doxygen.in b/doc/Doxygen.in new file mode 100644 index 0000000..fd74c4e --- /dev/null +++ b/doc/Doxygen.in @@ -0,0 +1,342 @@ +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = VKVG +PROJECT_NUMBER = 0.1.1 +PROJECT_BRIEF = "Vulkan Vector Graphics" +PROJECT_LOGO = ../vkvg.svg +OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIR@ +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO +OUTPUT_LANGUAGE = English +OUTPUT_TEXT_DIRECTION = None +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +JAVADOC_BANNER = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +PYTHON_DOCSTRING = YES +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = YES +TAB_SIZE = 4 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_SLICE = NO +EXTENSION_MAPPING = +MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = 5 +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +GROUP_NESTED_COMPOUNDS = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = YES +LOOKUP_CACHE_SIZE = 0 +NUM_PROC_THREADS = 1 +EXTRACT_ALL = YES +EXTRACT_PRIVATE = NO +EXTRACT_PRIV_VIRTUAL = NO +EXTRACT_PACKAGE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +RESOLVE_UNNAMED_PARAMS = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = YES +HIDE_COMPOUND_REFERENCE= NO +SHOW_INCLUDE_FILES = YES +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = doc/DoxygenLayout.xml +CITE_BIB_FILES = +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +INPUT = @DOXYGEN_INPUT_DIR@ +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.ice + +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +CLANG_ASSISTED_PARSING = NO +CLANG_ADD_INC_PATHS = YES +CLANG_OPTIONS = +CLANG_DATABASE_PATH = +ALPHABETICAL_INDEX = YES +IGNORE_PREFIX = + +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_STYLESHEET = doc/custom.css + +#HTML_HEADER = doc/header.html +#HTML_FOOTER = doc/footer.html +#HTML_EXTRA_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 234 +HTML_COLORSTYLE_SAT = 26 +HTML_COLORSTYLE_GAMMA = 81 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 + +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project + +DISABLE_INDEX = YES +GENERATE_TREEVIEW = NO + +ENUM_VALUES_PER_LINE = 0 +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +HTML_FORMULA_FORMAT = png +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +FORMULA_MACROFILE = +USE_MATHJAX = NO +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = +MAKEINDEX_CMD_NAME = makeindex +LATEX_MAKEINDEX_CMD = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4 +EXTRA_PACKAGES = +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_SOURCE_CODE = NO +LATEX_BIB_STYLE = plain +LATEX_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +RTF_SOURCE_CODE = NO +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO +GENERATE_XML = YES +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +XML_NS_MEMB_FILE_SCOPE = NO +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +DOCBOOK_PROGRAMLISTING = NO +GENERATE_AUTOGEN_DEF = NO +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +CLASS_DIAGRAMS = YES +DIA_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +UML_LIMIT_NUM_FIELDS = 10 +DOT_UML_DETAILS = NO +DOT_WRAP_THRESHOLD = 17 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = YES +CALLER_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO +DOT_PATH = +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/doc/cacheBuilding.svg b/doc/cacheBuilding.svg new file mode 100644 index 0000000..7054083 --- /dev/null +++ b/doc/cacheBuilding.svg @@ -0,0 +1,477 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Vertex Cache + + Index Cache + + + currentIndexStart + + + + currentIndexStart + + + + currentVertexOffset + + + + + vertexCount + + + + + sizeVertices + + + + + + sizeIndices + + + + + + draw commandalready emited + + + + draw commandalready emited + + pending vertices + pending indices + + diff --git a/doc/conf.py b/doc/conf.py new file mode 100644 index 0000000..95f8d42 --- /dev/null +++ b/doc/conf.py @@ -0,0 +1,83 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'vkvg' +copyright = '2021, Jean-Philippe Bruyère' +author = 'Jean-Philippe Bruyère' + +# The full version, including alpha/beta/rc tags +release = '0.1.1' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "breathe", + "myst_parser" +] +# Breathe Configuration +breathe_default_project = "VKVG" + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +ource_suffix = { + '.rst': 'restructuredtext', + '.txt': 'markdown', + '.md': 'markdown', +} + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# 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 = ['_static'] + +html_logo = "../vkvg.svg" +html_theme_options = { + #'analytics_id': 'G-XXXXXXXXXX', # Provided by Google in your dashboard + #'analytics_anonymize_ip': False, + 'logo_only': True, + 'display_version': True, + 'prev_next_buttons_location': 'bottom', + #'style_external_links': False, + #'vcs_pageview_mode': '', + 'style_nav_header_background': '#464baa', + # Toc options + 'collapse_navigation': True, + 'sticky_navigation': True, + 'navigation_depth': 4, + 'includehidden': True, + 'titles_only': False +} \ No newline at end of file diff --git a/doc/context.rst b/doc/context.rst new file mode 100644 index 0000000..d996f9b --- /dev/null +++ b/doc/context.rst @@ -0,0 +1,4 @@ +Context +======= + +.. doxygengroup:: context diff --git a/doc/device.rst b/doc/device.rst new file mode 100644 index 0000000..120edd5 --- /dev/null +++ b/doc/device.rst @@ -0,0 +1,4 @@ +Device +======= + +.. doxygengroup:: device diff --git a/doc/doxy_theme/DoxygenLayout.xml b/doc/doxy_theme/DoxygenLayout.xml new file mode 100644 index 0000000..e77daaa --- /dev/null +++ b/doc/doxy_theme/DoxygenLayout.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/doxy_theme/custom.css b/doc/doxy_theme/custom.css new file mode 100644 index 0000000..887c597 --- /dev/null +++ b/doc/doxy_theme/custom.css @@ -0,0 +1,1866 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, +table, +div, +p, +dl { + font: 400 14px/22px Roboto, sans-serif; +} + +p.reference, +p.definition { + font: 400 14px/22px Roboto, sans-serif; +} + +body { + background-color: #DDD; + color: black; + margin: auto; + width: 80%; +} + +div.contents { + margin: auto; + padding: 10px; + width: 80%; + border: thin solid black; + background-color: white; +} + + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto, sans-serif; + font-size: 150%; + font-weight: bold; + width: 80%; + margin: auto; + background-color: #ccc; + color: #444; + padding: 10px; + border: thin solid #2c2c2c; +} + +h2.groupheader { + font-size: 110%; + font-weight: normal; + margin-top: 1.75em; + color: #AAA; + /*padding-top: 8px; + padding-bottom: 4px;*/ + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, +h2.glow, +h3.glow, +h4.glow, +h5.glow, +h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, +p.startdd { + margin-top: 2px; +} + +th p.starttd, +th p.intertd, +th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli {} + +p.interdd {} + +p.intertd {} + + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: left; + line-height: 120%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + padding: 6px; +} + +td.navtabHL a, +td.navtabHL a:visited { + color: #ddd; + background-color: rgb(119, 119, 172); + padding: 6px; +} + +a.navtab {} + +div.qindex { + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar { + font-size: 180%; + font-weight: bold; +} + +.alphachar a { + color: black; +} + +.alphachar a:hover, +.alphachar a:visited { + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count: 1 +} + +.classindex dd { + display: inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #0000fd; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count: 2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count: 3 + } +} + + +/* @group Link Styling */ + +a { + color: #595B6D; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #676A7F; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef {} + +a.code, +a.code:visited, +a.line, +a.line:visited { + color: #676A7F; +} + +a.codeRef, +a.codeRef:visited, +a.lineRef, +a.lineRef:visited { + color: #676A7F; +} + + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; + /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; + /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; + /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #D0D1D9; + background-color: #FCFCFC; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; + /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FCFCFC; + border: 1px solid #D0D1D9; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; + /* Moz */ + white-space: -pre-wrap; + /* Opera 4-6 */ + white-space: -o-pre-wrap; + /* Opera 7 */ + white-space: pre-wrap; + /* CSS3 */ + word-wrap: break-word; + /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content: "\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} + +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, +span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000), color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +td.indexkey { + background-color: #EFF0F2; + font-weight: bold; + border: 1px solid #D0D1D9; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EFF0F2; + border: 1px solid #D0D1D9; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #F1F1F4; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp {} + +img.formulaInl, +img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F8F8F9; + border-left: 2px solid #B0B1BE; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #B0B1BE; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + + +/* @end */ + +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; +} + +th.dirtab { + font-weight: bold; +} + +hr { + height: 0px; + border: none; +} + +hr.footer { + height: 1px; +} + + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 10px; +} + +.memberdecls td, +.fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, +.fieldtable tr.glow { + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, +.mdescRight, +.memItemLeft, +.memItemRight, +.memTemplItemLeft, +.memTemplItemRight, +.memTemplParams { + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, +.mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, +.memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, +.memTemplItemRight { + width: 100%; +} + +.memTemplParams { + white-space: nowrap; + font-size: 80%; +} + + +/* @end */ + + +/* @group Member Details */ + + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 0px; + font-weight: 300; + float: left; + display: none; +} + +.permalink { + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, +dl.reflist dt { + padding: 16px 0px 16px 0px; + color: #000ba5; + font-weight: bold; + background-color: #e6e6e6; + /* opera specific markup */ +} + +.overload { + font-family: "courier new", courier, monospace; + font-size: 65%; +} + +.memdoc, +dl.reflist dd { + padding: 6px 10px 2px 10px; + width: 90%; + margin: auto; +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} + +.paramname em { + font-style: normal; +} + +.paramname code { + line-height: 14px; +} + +.params, +.retval, +.exception, +.tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, +.retval .paramname, +.tparams .paramname, +.exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, +.tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, +.tparams .paramdir { + font-family: "courier new", courier, monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #8E90A3; + border-top: 1px solid #76788F; + border-left: 1px solid #76788F; + border-right: 1px solid #D0D1D9; + border-bottom: 1px solid #D0D1D9; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + +/* @end */ + + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #B0B1BE; + border-bottom: 1px solid #B0B1BE; + width: 100%; +} + +.directory table { + border-collapse: collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline: none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0, 0, 0, 0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F8F8F9; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #595B6D; +} + +.arrow { + color: #B0B1BE; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #8E90A3; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image: url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align: top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image: url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align: top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image: url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align: top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto, sans-serif; +} + + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #3E3F4C; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse: collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, +table.doxtable th { + border: 1px solid #424351; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #515363; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #B9BBC6; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, +.fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, +.fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #B9BBC6; + border-bottom: 1px solid #B9BBC6; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #B9BBC6; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E8E8EC; + font-size: 90%; + color: #363742; + padding-bottom: 4px; + padding-top: 5px; + text-align: left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #B9BBC6; +} + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul { + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat: repeat-x; + background-position: 0 -5px; + height: 30px; + line-height: 30px; + color: #A1A3B3; + border: solid 1px #CECFD7; + overflow: hidden; + margin: 0px; + padding: 0px; +} + +.navpath li { + list-style-type: none; + float: left; + padding-left: 10px; + padding-right: 15px; + background-image: url('bc_s.png'); + background-repeat: no-repeat; + background-position: right; + color: #4F5161; +} + +.navpath li.navelem a { + height: 32px; + display: block; + text-decoration: none; + outline: none; + color: #252629; + font-family: 'Lucida Grande', Geneva, Helvetica, Arial, sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover { + color: #86899D; +} + +.navpath li.footer { + list-style-type: none; + float: right; + padding-left: 10px; + padding-right: 15px; + background-image: none; + background-repeat: no-repeat; + background-position: right; + color: #4F5161; + font-size: 8pt; +} + +div.summary { + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a { + white-space: nowrap; +} + +table.classindex { + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups { + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a { + white-space: nowrap; +} + +div.header { + margin: 0px; +} + +div.headertitle { + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, +dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, +dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, +dl.post, +dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, +dl.post.DocNodeRTL, +dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + +#projectlogo { + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img { + width: 90px; + height: 90px; + vertical-align: middle; + background-color: rgba(66, 66, 66, 0.301); + border-radius: 10%; +} + +#projectalign { + vertical-align: middle; +} + +#projectname { + font: 300% Courier, Tahoma, Arial, sans-serif; + /*font-weight: bold;*/ + margin: 0px; + padding: 2px 0px; + color: white; +} + +#projectbrief { + font: 120% Times, Tahoma, Arial, sans-serif; + margin: 0px; + padding: 0px; + color: white; +} + +#projectnumber { + font: 50% Tahoma, Arial, sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea { + margin: auto; + border-bottom: 1px solid #313131; + background: rgb(54, 54, 54); + background: -moz-linear-gradient(0deg, rgba(54, 54, 54, 1) 0%, rgba(81, 130, 255, 1) 100%); + background: -webkit-linear-gradient(0deg, rgba(54, 54, 54, 1) 0%, rgba(81, 130, 255, 1) 100%); + background: linear-gradient(0deg, rgba(54, 54, 54, 1) 0%, rgba(81, 130, 255, 1) 100%); + filter: progid: DXImageTransform.Microsoft.gradient(startColorstr="#363636", endColorstr="#5182ff", GradientType=1); + padding: 10px; +} + +.image { + text-align: center; +} + +.dotgraph { + text-align: center; +} + +.mscgraph { + text-align: center; +} + +.plantumlgraph { + text-align: center; +} + +.diagraph { + text-align: center; +} + +.caption { + font-weight: bold; +} + +div.zoom { + border: 1px solid #A6A8B6; +} + +dl.citelist { + margin-bottom: 50px; +} + +dl.citelist dt { + color: #4A4C5B; + float: left; + font-weight: bold; + margin-right: 10px; + padding: 5px; + text-align: right; + width: 52px; +} + +dl.citelist dd { + margin: 2px 0 2px 72px; + padding: 5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F6F7F8; + border: 1px solid #E0E0E5; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana, DejaVu Sans, Geneva, sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial, FreeSans, sans-serif; + color: #676A7F; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 16px; + margin-bottom: 12px; + margin-left: auto; + margin-right: auto; + background-color: rgb(151, 151, 170); + color: whitesmoke; + padding: 6px; +} + + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto, sans-serif; +} + +#powerTip:before, +#powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, +#powerTip.n:before, +#powerTip.s:after, +#powerTip.s:before, +#powerTip.w:after, +#powerTip.w:before, +#powerTip.e:after, +#powerTip.e:before, +#powerTip.ne:after, +#powerTip.ne:before, +#powerTip.se:after, +#powerTip.se:before, +#powerTip.nw:after, +#powerTip.nw:before, +#powerTip.sw:after, +#powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, +#powerTip.s:after, +#powerTip.w:after, +#powerTip.e:after, +#powerTip.nw:after, +#powerTip.ne:after, +#powerTip.sw:after, +#powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, +#powerTip.s:before, +#powerTip.w:before, +#powerTip.e:before, +#powerTip.nw:before, +#powerTip.ne:before, +#powerTip.sw:before, +#powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, +#powerTip.n:before, +#powerTip.ne:after, +#powerTip.ne:before, +#powerTip.nw:after, +#powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, +#powerTip.ne:after, +#powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.n:after, +#powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, +#powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, +#powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, +#powerTip.s:before, +#powerTip.se:after, +#powerTip.se:before, +#powerTip.sw:after, +#powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, +#powerTip.se:after, +#powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, +#powerTip.se:before, +#powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, +#powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, +#powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, +#powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, +#powerTip.e:before { + left: 100%; +} + +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} + +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, +#powerTip.w:before { + right: 100%; +} + +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} + +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print { + #top { + display: none; + } + #side-nav { + display: none; + } + #nav-path { + display: none; + } + body { + overflow: visible; + } + h1, + h2, + h3, + h4, + h5, + h6 { + page-break-after: avoid; + } + .summary { + display: none; + } + .memitem { + page-break-inside: avoid; + } + #doc-content { + margin-left: 0 !important; + height: auto !important; + width: auto !important; + overflow: inherit; + display: inline; + } +} + + +/* @group Markdown */ + +table.markdownTable { + border-collapse: collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, +table.markdownTable th { + border: 1px solid #424351; + padding: 3px 7px 2px; +} + +table.markdownTable tr {} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone { + background-color: #515363; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, +td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, +td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, +td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, +code, +kbd, +samp { + display: inline-block; + direction: ltr; +} + + +/* @end */ + +u { + text-decoration: underline; +} \ No newline at end of file diff --git a/doc/doxy_theme/footer.html b/doc/doxy_theme/footer.html new file mode 100644 index 0000000..efa3357 --- /dev/null +++ b/doc/doxy_theme/footer.html @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/doc/doxy_theme/header.html b/doc/doxy_theme/header.html new file mode 100644 index 0000000..5094c45 --- /dev/null +++ b/doc/doxy_theme/header.html @@ -0,0 +1,44 @@ + + + + + + + + + + + $projectname: $title + + + $title + + + + + $treeview $search $mathjax + $extrastylesheet + + + +
+ +
+ + + + + + + + + +
+
$projectname   + $projectnumber +
+
$projectbrief
+
+
$projectbrief
+
$searchbox
+
\ No newline at end of file diff --git a/doc/groups.rst b/doc/groups.rst new file mode 100644 index 0000000..b8c25ce --- /dev/null +++ b/doc/groups.rst @@ -0,0 +1,3 @@ +.. include:: groups.md + :parser: myst_parser.sphinx_ + diff --git a/doc/index.rst b/doc/index.rst new file mode 100644 index 0000000..179ddfe --- /dev/null +++ b/doc/index.rst @@ -0,0 +1,26 @@ +.. vkvg documentation master file, created by + sphinx-quickstart on Mon Dec 13 09:11:56 2021. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to vkvg's documentation! +================================ + +.. toctree:: + :maxdepth: 2 + + groups + +.. + warning:: Here be dragons! This topic covers a number of options that might alter your database. + +.. + include:: ../README.md + :parser: myst_parser.sphinx_*/ + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/doc/surface.rst b/doc/surface.rst new file mode 100644 index 0000000..1f762c1 --- /dev/null +++ b/doc/surface.rst @@ -0,0 +1,4 @@ +Surface +======= + +.. doxygengroup:: surface diff --git a/doc/vkvg-arch.svg b/doc/vkvg-arch.svg new file mode 100644 index 0000000..9788091 --- /dev/null +++ b/doc/vkvg-arch.svg @@ -0,0 +1,556 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + CPU + + + + + + Points array + + + + Pathes array + + + + + GPU + + + + + + Vertex cache + + + + Index cache + + + + + + + Vertex Buffer + + + + Index Buffer + + + + + Recording Command Buffer + + + + Pending Command Buffer + + + + FlushFence + + + + + + + + Copy + + + + StrokeFill + + + + + + + + MoveToLineTo... + + + + + + diff --git a/include/vkvg.h b/include/vkvg.h index 6d30680..5937bf5 100644 --- a/include/vkvg.h +++ b/include/vkvg.h @@ -38,6 +38,8 @@ extern "C" { * * - @ref surface * - @ref context + * - @ref device + * - @ref pattern */ /*! @file vkvg.h @@ -505,7 +507,7 @@ vkvg_status_t vkvg_matrix_invert (vkvg_matrix_t *matrix); * Create a new #VkvgDevice owning vulkan instance and device. * * On success, create a new vkvg device and set its reference count to 1. - * On error, query the device status by calling @ ref vkvg_device_status(). Error could be + * On error, query the device status by calling @ref vkvg_device_status. Error could be * one of the following: * - VKVG_STATUS_INVALID_FORMAT: the combination of image format and tiling is not supported * - VKVG_STATUS_NULL_POINTER: vulkan function pointer fetching failed. @@ -568,15 +570,28 @@ VkvgDevice vkvg_device_create_from_vk_multisample (VkInstance inst, VkPhysicalDe vkvg_public void vkvg_device_destroy (VkvgDevice dev); /** - * @brief Increment by one the reference count on the device. - * @param The vkvg device pointer to increment reference for. - * @return ? + * @brief Get the current status of the device. + * + * Query current status of device. See @ref vkvg_status_t for more informations. + * @param dev a valid vkvg device pointer. + * @return current state. + */ +vkvg_public +vkvg_status_t vkvg_device_status (VkvgDevice dev); +/** + * @brief Increment the reference count on this device. + * + * Increment by one the reference count on the device. + * @param The vkvg device pointer to increment the reference count for. + * @return */ vkvg_public VkvgDevice vkvg_device_reference (VkvgDevice dev); /** - * @brief Get the actual reference count on this device. - * @param dev The vkvg device to get the reference of. + * @brief Query the reference count of the device. + * + * Get the actual reference count on this device. + * @param dev The vkvg device to get the reference count for. * @return The reference count on this device. */ vkvg_public @@ -626,7 +641,9 @@ VkvgSurface vkvg_surface_create (VkvgDevice dev, uint32_t width, uint32_t height vkvg_public VkvgSurface vkvg_surface_create_from_image (VkvgDevice dev, const char* filePath); /** - * @brief Create a new vkvg surface that will used an existing vulkan texture as backend. + * @brief Create a new vkvg surface using an existing vulkan texture as backend. + * + * Create a new vkvg surface that will used an existing vulkan texture as backend. * @param dev The vkvg device used for creating the surface. * @param vkhImg The VkhImage to use as the backend texture for drawing operations. * @return A new surface, or null if an error occured. diff --git a/src/vectors.h b/src/vectors.h index d8fd6a2..0a75828 100644 --- a/src/vectors.h +++ b/src/vectors.h @@ -29,11 +29,17 @@ typedef struct { float y; }vec2; +static const vec2 vec2_unit_x = {1.f,0}; +static const vec2 vec2_unit_y = {0,1.f}; + typedef struct { double x; double y; }vec2d; +/*const vec2d vec2d_unit_x = {1.0,0}; +const vec2d vec2d_unit_y = {0,1.0};*/ + typedef struct { float x; float y; @@ -73,6 +79,11 @@ typedef struct { int16_t y; }vec2i16; +typedef struct { + vec2 row0; + vec2 row1; +}mat2; + // compute length of float vector 2d vkvg_inline float vec2_length(vec2 v){ return sqrtf (v.x*v.x + v.y*v.y); @@ -187,4 +198,14 @@ vkvg_inline vec2 vec2d_to_vec2(vec2d vd){ vkvg_inline bool vec4_equ (vec4 a, vec4 b){ return (EQUF(a.x,b.x)&EQUF(a.y,b.y)&EQUF(a.z,b.z)&EQUF(a.w,b.w)); } +vkvg_inline vec2 mat2_mult_vec2 (mat2 m, vec2 v) { + return (vec2){ + (m.row0.x * v.x) + (m.row0.y * v.y), + (m.row1.x * v.x) + (m.row1.y * v.y) + }; +} +vkvg_inline float mat2_det (mat2* m) { + return (m->row0.x * m->row1.y) - (m->row0.y * m->row1.y); +} + #endif diff --git a/src/vkvg_device.c b/src/vkvg_device.c index 8888672..e90edef 100644 --- a/src/vkvg_device.c +++ b/src/vkvg_device.c @@ -115,6 +115,7 @@ VkvgDevice vkvg_device_create_from_vk_multisample(VkInstance inst, VkPhysicalDev dev->deferredResolve = deferredResolve; dev->vkDev = vkdev; dev->phy = phy; + dev->status = VKVG_STATUS_SUCCESS; #if VKVG_DBG_STATS dev->debug_stats = (vkvg_debug_stats_t) {0}; @@ -194,7 +195,6 @@ VkvgDevice vkvg_device_create_from_vk_multisample(VkInstance inst, VkPhysicalDev vkh_device_set_object_name((VkhDevice)dev, VK_OBJECT_TYPE_IMAGE_VIEW, (uint64_t)vkh_image_get_view(dev->emptyImg), "empty IMG VIEW"); vkh_device_set_object_name((VkhDevice)dev, VK_OBJECT_TYPE_SAMPLER, (uint64_t)vkh_image_get_sampler(dev->emptyImg), "empty IMG SAMPLER"); #endif - return dev; } @@ -254,6 +254,9 @@ void vkvg_device_destroy (VkvgDevice dev) free(dev); } +vkvg_status_t vkvg_device_status (VkvgDevice dev) { + return dev->status; +} VkvgDevice vkvg_device_reference (VkvgDevice dev) { dev->references++; return dev; @@ -271,7 +274,6 @@ void vkvg_device_get_dpy (VkvgDevice dev, int* hdpy, int* vdpy) { *hdpy = dev->hdpi; *vdpy = dev->vdpi; } - #if VKVG_DBG_STATS vkvg_debug_stats_t vkvg_device_get_stats (VkvgDevice dev) { return dev->debug_stats; diff --git a/src/vkvg_fonts.h b/src/vkvg_fonts.h index 528139a..5c88447 100644 --- a/src/vkvg_fonts.h +++ b/src/vkvg_fonts.h @@ -46,6 +46,7 @@ #include "vkvg.h" #include "vkvg_buff.h" #include "vkh.h" +#include "vectors.h" #define FT_CHECK_RESULT(f) \ { \ diff --git a/src/vkvg_internal.h b/src/vkvg_internal.h index ab972ef..396925a 100644 --- a/src/vkvg_internal.h +++ b/src/vkvg_internal.h @@ -63,9 +63,7 @@ #include "cross_os.h" -#include "vectors.h" #include "cross_mutex.h" - //width of the stencil buffer will determine the number of context saving/restore layers //the two first bits of the stencil are the FILL and the CLIP bits, all other bits are //used to store clipping bit on context saving. 8 bit stencil will allow 6 save/restore layer