mirror of
				https://github.com/glfw/glfw.git
				synced 2025-11-04 14:16:42 +00:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/master' into taskbar-progress
This commit is contained in:
		
						commit
						11ddcdde9f
					
				@ -33,6 +33,7 @@ video tutorials.
 | 
			
		||||
 - Arturo Castro
 | 
			
		||||
 - Chi-kwan Chan
 | 
			
		||||
 - TheChocolateOre
 | 
			
		||||
 - Ali Chraghi
 | 
			
		||||
 - Joseph Chua
 | 
			
		||||
 - Ian Clarkson
 | 
			
		||||
 - Michał Cichoń
 | 
			
		||||
@ -126,6 +127,7 @@ video tutorials.
 | 
			
		||||
 - lukect
 | 
			
		||||
 - Tristam MacDonald
 | 
			
		||||
 - Hans Mackowiak
 | 
			
		||||
 - Ramiro Magno
 | 
			
		||||
 - Дмитри Малышев
 | 
			
		||||
 - Zbigniew Mandziejewicz
 | 
			
		||||
 - Adam Marcus
 | 
			
		||||
@ -243,6 +245,7 @@ video tutorials.
 | 
			
		||||
 - Torsten Walluhn
 | 
			
		||||
 - Patrick Walton
 | 
			
		||||
 - Xo Wang
 | 
			
		||||
 - Andre Weissflog
 | 
			
		||||
 - Jay Weisskopf
 | 
			
		||||
 - Frank Wille
 | 
			
		||||
 - Andy Williams
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										536
									
								
								docs/Doxyfile.in
									
									
									
									
									
								
							
							
						
						
									
										536
									
								
								docs/Doxyfile.in
									
									
									
									
									
								
							@ -1,4 +1,4 @@
 | 
			
		||||
# Doxyfile 1.8.18
 | 
			
		||||
# Doxyfile 1.9.5
 | 
			
		||||
 | 
			
		||||
# This file describes the settings to be used by the documentation system
 | 
			
		||||
# doxygen (www.doxygen.org) for a project.
 | 
			
		||||
@ -12,6 +12,16 @@
 | 
			
		||||
# For lists, items can also be appended using:
 | 
			
		||||
# TAG += value [value, ...]
 | 
			
		||||
# Values that contain spaces should be placed between quotes (\" \").
 | 
			
		||||
#
 | 
			
		||||
# Note:
 | 
			
		||||
#
 | 
			
		||||
# Use doxygen to compare the used configuration file with the template
 | 
			
		||||
# configuration file:
 | 
			
		||||
# doxygen -x [configFile]
 | 
			
		||||
# Use doxygen to compare the used configuration file with the template
 | 
			
		||||
# configuration file without replacing the environment variables or CMake type
 | 
			
		||||
# replacement variables:
 | 
			
		||||
# doxygen -x_noenv [configFile]
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Project related configuration options
 | 
			
		||||
@ -60,16 +70,28 @@ PROJECT_LOGO           =
 | 
			
		||||
 | 
			
		||||
OUTPUT_DIRECTORY       = "@GLFW_BINARY_DIR@/docs"
 | 
			
		||||
 | 
			
		||||
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
 | 
			
		||||
# directories (in 2 levels) under the output directory of each output format and
 | 
			
		||||
# will distribute the generated files over these directories. Enabling this
 | 
			
		||||
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
 | 
			
		||||
# sub-directories (in 2 levels) under the output directory of each output format
 | 
			
		||||
# and will distribute the generated files over these directories. Enabling this
 | 
			
		||||
# option can be useful when feeding doxygen a huge amount of source files, where
 | 
			
		||||
# putting all generated files in the same directory would otherwise causes
 | 
			
		||||
# performance problems for the file system.
 | 
			
		||||
# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
 | 
			
		||||
# control the number of sub-directories.
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
 | 
			
		||||
CREATE_SUBDIRS         = NO
 | 
			
		||||
 | 
			
		||||
# Controls the number of sub-directories that will be created when
 | 
			
		||||
# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
 | 
			
		||||
# level increment doubles the number of directories, resulting in 4096
 | 
			
		||||
# directories at level 8 which is the default and also the maximum value. The
 | 
			
		||||
# sub-directories are organized in 2 levels, the first level always has a fixed
 | 
			
		||||
# numer of 16 directories.
 | 
			
		||||
# Minimum value: 0, maximum value: 8, default value: 8.
 | 
			
		||||
# This tag requires that the tag CREATE_SUBDIRS is set to YES.
 | 
			
		||||
 | 
			
		||||
CREATE_SUBDIRS_LEVEL   = 8
 | 
			
		||||
 | 
			
		||||
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
 | 
			
		||||
# characters to appear in the names of generated files. If set to NO, non-ASCII
 | 
			
		||||
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
 | 
			
		||||
@ -81,14 +103,14 @@ ALLOW_UNICODE_NAMES    = NO
 | 
			
		||||
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
 | 
			
		||||
# documentation generated by doxygen is written. Doxygen will use this
 | 
			
		||||
# information to generate all constant output in the proper language.
 | 
			
		||||
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
 | 
			
		||||
# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
 | 
			
		||||
# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
 | 
			
		||||
# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
 | 
			
		||||
# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
 | 
			
		||||
# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
 | 
			
		||||
# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
 | 
			
		||||
# Ukrainian and Vietnamese.
 | 
			
		||||
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
 | 
			
		||||
# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
 | 
			
		||||
# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
 | 
			
		||||
# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
 | 
			
		||||
# English messages), Korean, Korean-en (Korean with English messages), Latvian,
 | 
			
		||||
# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
 | 
			
		||||
# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
 | 
			
		||||
# Swedish, Turkish, Ukrainian and Vietnamese.
 | 
			
		||||
# The default value is: English.
 | 
			
		||||
 | 
			
		||||
OUTPUT_LANGUAGE        = English
 | 
			
		||||
@ -209,6 +231,14 @@ QT_AUTOBRIEF           = NO
 | 
			
		||||
 | 
			
		||||
MULTILINE_CPP_IS_BRIEF = NO
 | 
			
		||||
 | 
			
		||||
# By default Python docstrings are displayed as preformatted text and doxygen's
 | 
			
		||||
# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
 | 
			
		||||
# doxygen's special commands can be used and the contents of the docstring
 | 
			
		||||
# documentation blocks is shown as doxygen documentation.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
 | 
			
		||||
PYTHON_DOCSTRING       = YES
 | 
			
		||||
 | 
			
		||||
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
 | 
			
		||||
# documentation from any documented member that it re-implements.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
@ -232,16 +262,16 @@ TAB_SIZE               = 8
 | 
			
		||||
# the documentation. An alias has the form:
 | 
			
		||||
# name=value
 | 
			
		||||
# For example adding
 | 
			
		||||
# "sideeffect=@par Side Effects:\n"
 | 
			
		||||
# "sideeffect=@par Side Effects:^^"
 | 
			
		||||
# will allow you to put the command \sideeffect (or @sideeffect) in the
 | 
			
		||||
# documentation, which will result in a user-defined paragraph with heading
 | 
			
		||||
# "Side Effects:". You can put \n's in the value part of an alias to insert
 | 
			
		||||
# newlines (in the resulting output). You can put ^^ in the value part of an
 | 
			
		||||
# alias to insert a newline as if a physical newline was in the original file.
 | 
			
		||||
# When you need a literal { or } or , in the value part of an alias you have to
 | 
			
		||||
# escape them by means of a backslash (\), this can lead to conflicts with the
 | 
			
		||||
# commands \{ and \} for these it is advised to use the version @{ and @} or use
 | 
			
		||||
# a double escape (\\{ and \\})
 | 
			
		||||
# "Side Effects:". Note that you cannot put \n's in the value part of an alias
 | 
			
		||||
# to insert newlines (in the resulting output). You can put ^^ in the value part
 | 
			
		||||
# of an alias to insert a newline as if a physical newline was in the original
 | 
			
		||||
# file. When you need a literal { or } or , in the value part of an alias you
 | 
			
		||||
# have to escape them by means of a backslash (\), this can lead to conflicts
 | 
			
		||||
# with the commands \{ and \} for these it is advised to use the version @{ and
 | 
			
		||||
# @} or use a double escape (\\{ and \\})
 | 
			
		||||
 | 
			
		||||
ALIASES                = "thread_safety=@par Thread safety^^" \
 | 
			
		||||
                         "pointer_lifetime=@par Pointer lifetime^^" \
 | 
			
		||||
@ -297,8 +327,8 @@ OPTIMIZE_OUTPUT_SLICE  = NO
 | 
			
		||||
# extension. Doxygen has a built-in mapping, but you can override or extend it
 | 
			
		||||
# using this tag. The format is ext=language, where ext is a file extension, and
 | 
			
		||||
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
 | 
			
		||||
# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,
 | 
			
		||||
# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
 | 
			
		||||
# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
 | 
			
		||||
# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
 | 
			
		||||
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
 | 
			
		||||
# tries to guess whether the code is fixed or free formatted code, this is the
 | 
			
		||||
# default for Fortran type files). For instance to make doxygen treat .inc files
 | 
			
		||||
@ -308,7 +338,10 @@ OPTIMIZE_OUTPUT_SLICE  = NO
 | 
			
		||||
# Note: For files without extension you can use no_extension as a placeholder.
 | 
			
		||||
#
 | 
			
		||||
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
 | 
			
		||||
# the files are not read by doxygen.
 | 
			
		||||
# the files are not read by doxygen. When specifying no_extension you should add
 | 
			
		||||
# * to the FILE_PATTERNS.
 | 
			
		||||
#
 | 
			
		||||
# Note see also the list of default file extension mappings.
 | 
			
		||||
 | 
			
		||||
EXTENSION_MAPPING      =
 | 
			
		||||
 | 
			
		||||
@ -442,6 +475,19 @@ TYPEDEF_HIDES_STRUCT   = NO
 | 
			
		||||
 | 
			
		||||
LOOKUP_CACHE_SIZE      = 0
 | 
			
		||||
 | 
			
		||||
# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
 | 
			
		||||
# during processing. When set to 0 doxygen will based this on the number of
 | 
			
		||||
# cores available in the system. You can set it explicitly to a value larger
 | 
			
		||||
# than 0 to get more control over the balance between CPU load and processing
 | 
			
		||||
# speed. At this moment only the input processing can be done using multiple
 | 
			
		||||
# threads. Since this is still an experimental feature the default is set to 1,
 | 
			
		||||
# which effectively disables parallel processing. Please report any issues you
 | 
			
		||||
# encounter. Generating dot graphs in parallel is controlled by the
 | 
			
		||||
# DOT_NUM_THREADS setting.
 | 
			
		||||
# Minimum value: 0, maximum value: 32, default value: 1.
 | 
			
		||||
 | 
			
		||||
NUM_PROC_THREADS       = 1
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Build related configuration options
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
@ -505,6 +551,13 @@ EXTRACT_LOCAL_METHODS  = NO
 | 
			
		||||
 | 
			
		||||
EXTRACT_ANON_NSPACES   = NO
 | 
			
		||||
 | 
			
		||||
# If this flag is set to YES, the name of an unnamed parameter in a declaration
 | 
			
		||||
# will be determined by the corresponding definition. By default unnamed
 | 
			
		||||
# parameters remain unnamed in the output.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
 | 
			
		||||
RESOLVE_UNNAMED_PARAMS = YES
 | 
			
		||||
 | 
			
		||||
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
 | 
			
		||||
# undocumented members inside documented classes or files. If set to NO these
 | 
			
		||||
# members will be included in the various overviews, but no documentation
 | 
			
		||||
@ -542,14 +595,22 @@ HIDE_IN_BODY_DOCS      = NO
 | 
			
		||||
 | 
			
		||||
INTERNAL_DOCS          = NO
 | 
			
		||||
 | 
			
		||||
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
 | 
			
		||||
# names in lower-case letters. If set to YES, upper-case letters are also
 | 
			
		||||
# allowed. This is useful if you have classes or files whose names only differ
 | 
			
		||||
# in case and if your file system supports case sensitive file names. Windows
 | 
			
		||||
# (including Cygwin) ands Mac users are advised to set this option to NO.
 | 
			
		||||
# The default value is: system dependent.
 | 
			
		||||
# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
 | 
			
		||||
# able to match the capabilities of the underlying filesystem. In case the
 | 
			
		||||
# filesystem is case sensitive (i.e. it supports files in the same directory
 | 
			
		||||
# whose names only differ in casing), the option must be set to YES to properly
 | 
			
		||||
# deal with such files in case they appear in the input. For filesystems that
 | 
			
		||||
# are not case sensitive the option should be set to NO to properly deal with
 | 
			
		||||
# output files written for symbols that only differ in casing, such as for two
 | 
			
		||||
# classes, one named CLASS and the other named Class, and to also support
 | 
			
		||||
# references to files without having to specify the exact matching casing. On
 | 
			
		||||
# Windows (including Cygwin) and MacOS, users should typically set this option
 | 
			
		||||
# to NO, whereas on Linux or other Unix flavors it should typically be set to
 | 
			
		||||
# YES.
 | 
			
		||||
# Possible values are: SYSTEM, NO and YES.
 | 
			
		||||
# The default value is: SYSTEM.
 | 
			
		||||
 | 
			
		||||
CASE_SENSE_NAMES       = YES
 | 
			
		||||
CASE_SENSE_NAMES       = SYSTEM
 | 
			
		||||
 | 
			
		||||
# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
 | 
			
		||||
# their full class and namespace scopes in the documentation. If set to YES, the
 | 
			
		||||
@ -565,6 +626,12 @@ HIDE_SCOPE_NAMES       = NO
 | 
			
		||||
 | 
			
		||||
HIDE_COMPOUND_REFERENCE= NO
 | 
			
		||||
 | 
			
		||||
# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
 | 
			
		||||
# will show which file needs to be included to use the class.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
 | 
			
		||||
SHOW_HEADERFILE        = NO
 | 
			
		||||
 | 
			
		||||
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
 | 
			
		||||
# the files that are included by a file in the documentation of that file.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
@ -722,7 +789,8 @@ FILE_VERSION_FILTER    =
 | 
			
		||||
# output files in an output format independent way. To create the layout file
 | 
			
		||||
# that represents doxygen's defaults, run doxygen with the -l option. You can
 | 
			
		||||
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
 | 
			
		||||
# will be used as the name of the layout file.
 | 
			
		||||
# will be used as the name of the layout file. See also section "Changing the
 | 
			
		||||
# layout of pages" for information.
 | 
			
		||||
#
 | 
			
		||||
# Note that if you run doxygen from a directory containing a file called
 | 
			
		||||
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
 | 
			
		||||
@ -768,24 +836,35 @@ WARNINGS               = YES
 | 
			
		||||
WARN_IF_UNDOCUMENTED   = YES
 | 
			
		||||
 | 
			
		||||
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
 | 
			
		||||
# potential errors in the documentation, such as not documenting some parameters
 | 
			
		||||
# in a documented function, or documenting parameters that don't exist or using
 | 
			
		||||
# markup commands wrongly.
 | 
			
		||||
# potential errors in the documentation, such as documenting some parameters in
 | 
			
		||||
# a documented function twice, or documenting parameters that don't exist or
 | 
			
		||||
# using markup commands wrongly.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
 | 
			
		||||
WARN_IF_DOC_ERROR      = YES
 | 
			
		||||
 | 
			
		||||
# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
 | 
			
		||||
# function parameter documentation. If set to NO, doxygen will accept that some
 | 
			
		||||
# parameters have no documentation without warning.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
 | 
			
		||||
WARN_IF_INCOMPLETE_DOC = YES
 | 
			
		||||
 | 
			
		||||
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
 | 
			
		||||
# are documented, but have no documentation for their parameters or return
 | 
			
		||||
# value. If set to NO, doxygen will only warn about wrong or incomplete
 | 
			
		||||
# parameter documentation, but not about the absence of documentation. If
 | 
			
		||||
# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
 | 
			
		||||
# value. If set to NO, doxygen will only warn about wrong parameter
 | 
			
		||||
# documentation, but not about the absence of documentation. If EXTRACT_ALL is
 | 
			
		||||
# set to YES then this flag will automatically be disabled. See also
 | 
			
		||||
# WARN_IF_INCOMPLETE_DOC
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
 | 
			
		||||
WARN_NO_PARAMDOC       = YES
 | 
			
		||||
 | 
			
		||||
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
 | 
			
		||||
# a warning is encountered.
 | 
			
		||||
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
 | 
			
		||||
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
 | 
			
		||||
# at the end of the doxygen process doxygen will return with a non-zero status.
 | 
			
		||||
# Possible values are: NO, YES and FAIL_ON_WARNINGS.
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
 | 
			
		||||
WARN_AS_ERROR          = NO
 | 
			
		||||
@ -796,13 +875,27 @@ WARN_AS_ERROR          = NO
 | 
			
		||||
# and the warning text. Optionally the format may contain $version, which will
 | 
			
		||||
# be replaced by the version of the file (if it could be obtained via
 | 
			
		||||
# FILE_VERSION_FILTER)
 | 
			
		||||
# See also: WARN_LINE_FORMAT
 | 
			
		||||
# The default value is: $file:$line: $text.
 | 
			
		||||
 | 
			
		||||
WARN_FORMAT            = "$file:$line: $text"
 | 
			
		||||
 | 
			
		||||
# In the $text part of the WARN_FORMAT command it is possible that a reference
 | 
			
		||||
# to a more specific place is given. To make it easier to jump to this place
 | 
			
		||||
# (outside of doxygen) the user can define a custom "cut" / "paste" string.
 | 
			
		||||
# Example:
 | 
			
		||||
# WARN_LINE_FORMAT = "'vi $file +$line'"
 | 
			
		||||
# See also: WARN_FORMAT
 | 
			
		||||
# The default value is: at line $line of file $file.
 | 
			
		||||
 | 
			
		||||
WARN_LINE_FORMAT       = "at line $line of file $file"
 | 
			
		||||
 | 
			
		||||
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
 | 
			
		||||
# messages should be written. If left blank the output is written to standard
 | 
			
		||||
# error (stderr).
 | 
			
		||||
# error (stderr). In case the file specified cannot be opened for writing the
 | 
			
		||||
# warning and error messages are written to standard error. When as file - is
 | 
			
		||||
# specified the warning and error messages are written to standard output
 | 
			
		||||
# (stdout).
 | 
			
		||||
 | 
			
		||||
WARN_LOGFILE           = "@GLFW_BINARY_DIR@/docs/warnings.txt"
 | 
			
		||||
 | 
			
		||||
@ -821,12 +914,23 @@ INPUT                  = @GLFW_DOXYGEN_INPUT@
 | 
			
		||||
# This tag can be used to specify the character encoding of the source files
 | 
			
		||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
 | 
			
		||||
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
 | 
			
		||||
# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
 | 
			
		||||
# possible encodings.
 | 
			
		||||
# documentation (see:
 | 
			
		||||
# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
 | 
			
		||||
# See also: INPUT_FILE_ENCODING
 | 
			
		||||
# The default value is: UTF-8.
 | 
			
		||||
 | 
			
		||||
INPUT_ENCODING         = UTF-8
 | 
			
		||||
 | 
			
		||||
# This tag can be used to specify the character encoding of the source files
 | 
			
		||||
# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify
 | 
			
		||||
# character encoding on a per file pattern basis. Doxygen will compare the file
 | 
			
		||||
# name with each pattern and apply the encoding instead of the default
 | 
			
		||||
# INPUT_ENCODING) if there is a match. The character encodings are a list of the
 | 
			
		||||
# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding
 | 
			
		||||
# "INPUT_ENCODING" for further information on supported encodings.
 | 
			
		||||
 | 
			
		||||
INPUT_FILE_ENCODING    =
 | 
			
		||||
 | 
			
		||||
# If the value of the INPUT tag contains directories, you can use the
 | 
			
		||||
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
 | 
			
		||||
# *.h) to filter out the source-files in the directories.
 | 
			
		||||
@ -835,12 +939,14 @@ INPUT_ENCODING         = UTF-8
 | 
			
		||||
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
 | 
			
		||||
# read by doxygen.
 | 
			
		||||
#
 | 
			
		||||
# Note the list of default checked file patterns might differ from the list of
 | 
			
		||||
# default file extension mappings.
 | 
			
		||||
#
 | 
			
		||||
# If left blank the following patterns are tested:*.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 (to be provided as doxygen C comment),
 | 
			
		||||
# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen
 | 
			
		||||
# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
 | 
			
		||||
# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml,
 | 
			
		||||
# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C
 | 
			
		||||
# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
 | 
			
		||||
# *.vhdl, *.ucf, *.qsf and *.ice.
 | 
			
		||||
 | 
			
		||||
FILE_PATTERNS          = *.h *.dox
 | 
			
		||||
@ -880,7 +986,7 @@ EXCLUDE_PATTERNS       =
 | 
			
		||||
# (namespaces, classes, functions, etc.) that should be excluded from the
 | 
			
		||||
# output. The symbol name can be a fully qualified name, a word, or if the
 | 
			
		||||
# wildcard * is used, a substring. Examples: ANamespace, AClass,
 | 
			
		||||
# AClass::ANamespace, ANamespace::*Test
 | 
			
		||||
# ANamespace::AClass, ANamespace::*Test
 | 
			
		||||
#
 | 
			
		||||
# Note that the wildcards are matched against the file with absolute path, so to
 | 
			
		||||
# exclude all test directories use the pattern */test/*
 | 
			
		||||
@ -928,6 +1034,11 @@ IMAGE_PATH             =
 | 
			
		||||
# code is scanned, but not when the output code is generated. If lines are added
 | 
			
		||||
# or removed, the anchors will not be placed correctly.
 | 
			
		||||
#
 | 
			
		||||
# Note that doxygen will use the data processed and written to standard output
 | 
			
		||||
# for further processing, therefore nothing else, like debug statements or used
 | 
			
		||||
# commands (so in case of a Windows batch file always use @echo OFF), should be
 | 
			
		||||
# written to standard output.
 | 
			
		||||
#
 | 
			
		||||
# Note that for custom extensions or not directly supported extensions you also
 | 
			
		||||
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
 | 
			
		||||
# properly processed by doxygen.
 | 
			
		||||
@ -969,6 +1080,15 @@ FILTER_SOURCE_PATTERNS =
 | 
			
		||||
 | 
			
		||||
USE_MDFILE_AS_MAINPAGE =
 | 
			
		||||
 | 
			
		||||
# The Fortran standard specifies that for fixed formatted Fortran code all
 | 
			
		||||
# characters from position 72 are to be considered as comment. A common
 | 
			
		||||
# extension is to allow longer lines before the automatic comment starts. The
 | 
			
		||||
# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can
 | 
			
		||||
# be processed before the automatic comment starts.
 | 
			
		||||
# Minimum value: 7, maximum value: 10000, default value: 72.
 | 
			
		||||
 | 
			
		||||
FORTRAN_COMMENT_AFTER  = 72
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to source browsing
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
@ -1163,9 +1283,26 @@ HTML_EXTRA_STYLESHEET  = "@GLFW_SOURCE_DIR@/docs/extra.css"
 | 
			
		||||
 | 
			
		||||
HTML_EXTRA_FILES       = "@GLFW_SOURCE_DIR@/docs/spaces.svg"
 | 
			
		||||
 | 
			
		||||
# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
 | 
			
		||||
# should be rendered with a dark or light theme. Default setting AUTO_LIGHT
 | 
			
		||||
# enables light output unless the user preference is dark output. Other options
 | 
			
		||||
# are DARK to always use dark mode, LIGHT to always use light mode, AUTO_DARK to
 | 
			
		||||
# default to dark mode unless the user prefers light mode, and TOGGLE to let the
 | 
			
		||||
# user toggle between dark and light mode via a button.
 | 
			
		||||
# Possible values are: LIGHT Always generate light output., DARK Always generate
 | 
			
		||||
# dark output., AUTO_LIGHT Automatically set the mode according to the user
 | 
			
		||||
# preference, use light mode if no preference is set (the default)., AUTO_DARK
 | 
			
		||||
# Automatically set the mode according to the user preference, use dark mode if
 | 
			
		||||
# no preference is set. and TOGGLE Allow to user to switch between light and
 | 
			
		||||
# dark mode via a button..
 | 
			
		||||
# The default value is: AUTO_LIGHT.
 | 
			
		||||
# This tag requires that the tag GENERATE_HTML is set to YES.
 | 
			
		||||
 | 
			
		||||
HTML_COLORSTYLE        = LIGHT
 | 
			
		||||
 | 
			
		||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
 | 
			
		||||
# will adjust the colors in the style sheet and background images according to
 | 
			
		||||
# this color. Hue is specified as an angle on a colorwheel, see
 | 
			
		||||
# this color. Hue is specified as an angle on a color-wheel, see
 | 
			
		||||
# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
 | 
			
		||||
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
 | 
			
		||||
# purple, and 360 is red again.
 | 
			
		||||
@ -1175,7 +1312,7 @@ HTML_EXTRA_FILES       = "@GLFW_SOURCE_DIR@/docs/spaces.svg"
 | 
			
		||||
HTML_COLORSTYLE_HUE    = 220
 | 
			
		||||
 | 
			
		||||
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
 | 
			
		||||
# in the HTML output. For a value of 0 the output will use grayscales only. A
 | 
			
		||||
# in the HTML output. For a value of 0 the output will use gray-scales only. A
 | 
			
		||||
# value of 255 will produce the most vivid colors.
 | 
			
		||||
# Minimum value: 0, maximum value: 255, default value: 100.
 | 
			
		||||
# This tag requires that the tag GENERATE_HTML is set to YES.
 | 
			
		||||
@ -1236,10 +1373,11 @@ HTML_INDEX_NUM_ENTRIES = 100
 | 
			
		||||
 | 
			
		||||
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
 | 
			
		||||
# generated that can be used as input for Apple's Xcode 3 integrated development
 | 
			
		||||
# environment (see: https://developer.apple.com/xcode/), introduced with OSX
 | 
			
		||||
# 10.5 (Leopard). To create a documentation set, doxygen will generate a
 | 
			
		||||
# Makefile in the HTML output directory. Running make will produce the docset in
 | 
			
		||||
# that directory and running make install will install the docset in
 | 
			
		||||
# environment (see:
 | 
			
		||||
# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
 | 
			
		||||
# create a documentation set, doxygen will generate a Makefile in the HTML
 | 
			
		||||
# output directory. Running make will produce the docset in that directory and
 | 
			
		||||
# running make install will install the docset in
 | 
			
		||||
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
 | 
			
		||||
# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
 | 
			
		||||
# genXcode/_index.html for more information.
 | 
			
		||||
@ -1256,6 +1394,13 @@ GENERATE_DOCSET        = NO
 | 
			
		||||
 | 
			
		||||
DOCSET_FEEDNAME        = "Doxygen generated docs"
 | 
			
		||||
 | 
			
		||||
# This tag determines the URL of the docset feed. A documentation feed provides
 | 
			
		||||
# an umbrella under which multiple documentation sets from a single provider
 | 
			
		||||
# (such as a company or product suite) can be grouped.
 | 
			
		||||
# This tag requires that the tag GENERATE_DOCSET is set to YES.
 | 
			
		||||
 | 
			
		||||
DOCSET_FEEDURL         =
 | 
			
		||||
 | 
			
		||||
# This tag specifies a string that should uniquely identify the documentation
 | 
			
		||||
# set bundle. This should be a reverse domain-name style string, e.g.
 | 
			
		||||
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
 | 
			
		||||
@ -1281,8 +1426,12 @@ DOCSET_PUBLISHER_NAME  = Publisher
 | 
			
		||||
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
 | 
			
		||||
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
 | 
			
		||||
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
 | 
			
		||||
# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
 | 
			
		||||
# Windows.
 | 
			
		||||
# on Windows. In the beginning of 2021 Microsoft took the original page, with
 | 
			
		||||
# a.o. the download links, offline the HTML help workshop was already many years
 | 
			
		||||
# in maintenance mode). You can download the HTML help workshop from the web
 | 
			
		||||
# archives at Installation executable (see:
 | 
			
		||||
# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
 | 
			
		||||
# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
 | 
			
		||||
#
 | 
			
		||||
# The HTML Help Workshop contains a compiler that can convert all HTML output
 | 
			
		||||
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
 | 
			
		||||
@ -1312,7 +1461,7 @@ CHM_FILE               =
 | 
			
		||||
HHC_LOCATION           =
 | 
			
		||||
 | 
			
		||||
# The GENERATE_CHI flag controls if a separate .chi index file is generated
 | 
			
		||||
# (YES) or that it should be included in the master .chm file (NO).
 | 
			
		||||
# (YES) or that it should be included in the main .chm file (NO).
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -1357,7 +1506,8 @@ QCH_FILE               =
 | 
			
		||||
 | 
			
		||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
 | 
			
		||||
# Project output. For more information please see Qt Help Project / Namespace
 | 
			
		||||
# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
 | 
			
		||||
# (see:
 | 
			
		||||
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
 | 
			
		||||
# The default value is: org.doxygen.Project.
 | 
			
		||||
# This tag requires that the tag GENERATE_QHP is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -1365,8 +1515,8 @@ QHP_NAMESPACE          = org.doxygen.Project
 | 
			
		||||
 | 
			
		||||
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
 | 
			
		||||
# Help Project output. For more information please see Qt Help Project / Virtual
 | 
			
		||||
# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
 | 
			
		||||
# folders).
 | 
			
		||||
# Folders (see:
 | 
			
		||||
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
 | 
			
		||||
# The default value is: doc.
 | 
			
		||||
# This tag requires that the tag GENERATE_QHP is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -1374,16 +1524,16 @@ QHP_VIRTUAL_FOLDER     = doc
 | 
			
		||||
 | 
			
		||||
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
 | 
			
		||||
# filter to add. For more information please see Qt Help Project / Custom
 | 
			
		||||
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
 | 
			
		||||
# filters).
 | 
			
		||||
# Filters (see:
 | 
			
		||||
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
 | 
			
		||||
# This tag requires that the tag GENERATE_QHP is set to YES.
 | 
			
		||||
 | 
			
		||||
QHP_CUST_FILTER_NAME   =
 | 
			
		||||
 | 
			
		||||
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
 | 
			
		||||
# custom filter to add. For more information please see Qt Help Project / Custom
 | 
			
		||||
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
 | 
			
		||||
# filters).
 | 
			
		||||
# Filters (see:
 | 
			
		||||
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
 | 
			
		||||
# This tag requires that the tag GENERATE_QHP is set to YES.
 | 
			
		||||
 | 
			
		||||
QHP_CUST_FILTER_ATTRS  =
 | 
			
		||||
@ -1395,9 +1545,9 @@ QHP_CUST_FILTER_ATTRS  =
 | 
			
		||||
 | 
			
		||||
QHP_SECT_FILTER_ATTRS  =
 | 
			
		||||
 | 
			
		||||
# The QHG_LOCATION tag can be used to specify the location of Qt's
 | 
			
		||||
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
 | 
			
		||||
# generated .qhp file.
 | 
			
		||||
# The QHG_LOCATION tag can be used to specify the location (absolute path
 | 
			
		||||
# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
 | 
			
		||||
# run qhelpgenerator on the generated .qhp file.
 | 
			
		||||
# This tag requires that the tag GENERATE_QHP is set to YES.
 | 
			
		||||
 | 
			
		||||
QHG_LOCATION           =
 | 
			
		||||
@ -1440,16 +1590,28 @@ DISABLE_INDEX          = NO
 | 
			
		||||
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
 | 
			
		||||
# (i.e. any modern browser). Windows users are probably better off using the
 | 
			
		||||
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
 | 
			
		||||
# further fine-tune the look of the index. As an example, the default style
 | 
			
		||||
# sheet generated by doxygen has an example that shows how to put an image at
 | 
			
		||||
# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
 | 
			
		||||
# the same information as the tab index, you could consider setting
 | 
			
		||||
# DISABLE_INDEX to YES when enabling this option.
 | 
			
		||||
# further fine tune the look of the index (see "Fine-tuning the output"). As an
 | 
			
		||||
# example, the default style sheet generated by doxygen has an example that
 | 
			
		||||
# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
 | 
			
		||||
# Since the tree basically has the same information as the tab index, you could
 | 
			
		||||
# consider setting DISABLE_INDEX to YES when enabling this option.
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
# This tag requires that the tag GENERATE_HTML is set to YES.
 | 
			
		||||
 | 
			
		||||
GENERATE_TREEVIEW      = NO
 | 
			
		||||
 | 
			
		||||
# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
 | 
			
		||||
# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
 | 
			
		||||
# area (value NO) or if it should extend to the full height of the window (value
 | 
			
		||||
# YES). Setting this to YES gives a layout similar to
 | 
			
		||||
# https://docs.readthedocs.io with more room for contents, but less room for the
 | 
			
		||||
# project logo, title, and description. If either GENERATE_TREEVIEW or
 | 
			
		||||
# DISABLE_INDEX is set to NO, this option has no effect.
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
# This tag requires that the tag GENERATE_HTML is set to YES.
 | 
			
		||||
 | 
			
		||||
FULL_SIDEBAR           = NO
 | 
			
		||||
 | 
			
		||||
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
 | 
			
		||||
# doxygen will group on one line in the generated HTML documentation.
 | 
			
		||||
#
 | 
			
		||||
@ -1474,12 +1636,19 @@ TREEVIEW_WIDTH         = 300
 | 
			
		||||
 | 
			
		||||
EXT_LINKS_IN_WINDOW    = NO
 | 
			
		||||
 | 
			
		||||
# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
 | 
			
		||||
# addresses.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
# This tag requires that the tag GENERATE_HTML is set to YES.
 | 
			
		||||
 | 
			
		||||
OBFUSCATE_EMAILS       = YES
 | 
			
		||||
 | 
			
		||||
# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
 | 
			
		||||
# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
 | 
			
		||||
# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
 | 
			
		||||
# the HTML output. These images will generally look nicer at scaled resolutions.
 | 
			
		||||
# Possible values are: png The default and svg Looks nicer but requires the
 | 
			
		||||
# pdf2svg tool.
 | 
			
		||||
# Possible values are: png (the default) and svg (looks nicer but requires the
 | 
			
		||||
# pdf2svg or inkscape tool).
 | 
			
		||||
# The default value is: png.
 | 
			
		||||
# This tag requires that the tag GENERATE_HTML is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -1494,17 +1663,6 @@ HTML_FORMULA_FORMAT    = png
 | 
			
		||||
 | 
			
		||||
FORMULA_FONTSIZE       = 10
 | 
			
		||||
 | 
			
		||||
# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
 | 
			
		||||
# generated for formulas are transparent PNGs. Transparent PNGs are not
 | 
			
		||||
# supported properly for IE 6.0, but are supported on all modern browsers.
 | 
			
		||||
#
 | 
			
		||||
# Note that when changing this option you need to delete any form_*.png files in
 | 
			
		||||
# the HTML output directory before the changes have effect.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
# This tag requires that the tag GENERATE_HTML is set to YES.
 | 
			
		||||
 | 
			
		||||
FORMULA_TRANSPARENT    = YES
 | 
			
		||||
 | 
			
		||||
# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
 | 
			
		||||
# to create new LaTeX commands to be used in formulas as building blocks. See
 | 
			
		||||
# the section "Including formulas" for details.
 | 
			
		||||
@ -1522,11 +1680,29 @@ FORMULA_MACROFILE      =
 | 
			
		||||
 | 
			
		||||
USE_MATHJAX            = NO
 | 
			
		||||
 | 
			
		||||
# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
 | 
			
		||||
# Note that the different versions of MathJax have different requirements with
 | 
			
		||||
# regards to the different settings, so it is possible that also other MathJax
 | 
			
		||||
# settings have to be changed when switching between the different MathJax
 | 
			
		||||
# versions.
 | 
			
		||||
# Possible values are: MathJax_2 and MathJax_3.
 | 
			
		||||
# The default value is: MathJax_2.
 | 
			
		||||
# This tag requires that the tag USE_MATHJAX is set to YES.
 | 
			
		||||
 | 
			
		||||
MATHJAX_VERSION        = MathJax_2
 | 
			
		||||
 | 
			
		||||
# When MathJax is enabled you can set the default output format to be used for
 | 
			
		||||
# the MathJax output. See the MathJax site (see:
 | 
			
		||||
# http://docs.mathjax.org/en/latest/output.html) for more details.
 | 
			
		||||
# the MathJax output. For more details about the output format see MathJax
 | 
			
		||||
# version 2 (see:
 | 
			
		||||
# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
 | 
			
		||||
# (see:
 | 
			
		||||
# http://docs.mathjax.org/en/latest/web/components/output.html).
 | 
			
		||||
# Possible values are: HTML-CSS (which is slower, but has the best
 | 
			
		||||
# compatibility), NativeMML (i.e. MathML) and SVG.
 | 
			
		||||
# compatibility. This is the name for Mathjax version 2, for MathJax version 3
 | 
			
		||||
# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
 | 
			
		||||
# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
 | 
			
		||||
# is the name for Mathjax version 3, for MathJax version 2 this will be
 | 
			
		||||
# translated into HTML-CSS) and SVG.
 | 
			
		||||
# The default value is: HTML-CSS.
 | 
			
		||||
# This tag requires that the tag USE_MATHJAX is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -1539,22 +1715,29 @@ MATHJAX_FORMAT         = HTML-CSS
 | 
			
		||||
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
 | 
			
		||||
# Content Delivery Network so you can quickly see the result without installing
 | 
			
		||||
# MathJax. However, it is strongly recommended to install a local copy of
 | 
			
		||||
# MathJax from https://www.mathjax.org before deployment.
 | 
			
		||||
# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.
 | 
			
		||||
# MathJax from https://www.mathjax.org before deployment. The default value is:
 | 
			
		||||
# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
 | 
			
		||||
# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
 | 
			
		||||
# This tag requires that the tag USE_MATHJAX is set to YES.
 | 
			
		||||
 | 
			
		||||
MATHJAX_RELPATH        = https://cdn.jsdelivr.net/npm/mathjax@2
 | 
			
		||||
MATHJAX_RELPATH        =
 | 
			
		||||
 | 
			
		||||
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
 | 
			
		||||
# extension names that should be enabled during MathJax rendering. For example
 | 
			
		||||
# for MathJax version 2 (see
 | 
			
		||||
# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
 | 
			
		||||
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
 | 
			
		||||
# For example for MathJax version 3 (see
 | 
			
		||||
# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
 | 
			
		||||
# MATHJAX_EXTENSIONS = ams
 | 
			
		||||
# This tag requires that the tag USE_MATHJAX is set to YES.
 | 
			
		||||
 | 
			
		||||
MATHJAX_EXTENSIONS     =
 | 
			
		||||
 | 
			
		||||
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
 | 
			
		||||
# of code that will be used on startup of the MathJax code. See the MathJax site
 | 
			
		||||
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
 | 
			
		||||
# (see:
 | 
			
		||||
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
 | 
			
		||||
# example see the documentation.
 | 
			
		||||
# This tag requires that the tag USE_MATHJAX is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -1601,7 +1784,8 @@ SERVER_BASED_SEARCH    = NO
 | 
			
		||||
#
 | 
			
		||||
# Doxygen ships with an example indexer (doxyindexer) and search engine
 | 
			
		||||
# (doxysearch.cgi) which are based on the open source search engine library
 | 
			
		||||
# Xapian (see: https://xapian.org/).
 | 
			
		||||
# Xapian (see:
 | 
			
		||||
# https://xapian.org/).
 | 
			
		||||
#
 | 
			
		||||
# See the section "External Indexing and Searching" for details.
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
@ -1614,8 +1798,9 @@ EXTERNAL_SEARCH        = NO
 | 
			
		||||
#
 | 
			
		||||
# Doxygen ships with an example indexer (doxyindexer) and search engine
 | 
			
		||||
# (doxysearch.cgi) which are based on the open source search engine library
 | 
			
		||||
# Xapian (see: https://xapian.org/). See the section "External Indexing and
 | 
			
		||||
# Searching" for details.
 | 
			
		||||
# Xapian (see:
 | 
			
		||||
# https://xapian.org/). See the section "External Indexing and Searching" for
 | 
			
		||||
# details.
 | 
			
		||||
# This tag requires that the tag SEARCHENGINE is set to YES.
 | 
			
		||||
 | 
			
		||||
SEARCHENGINE_URL       =
 | 
			
		||||
@ -1724,29 +1909,31 @@ PAPER_TYPE             = a4
 | 
			
		||||
 | 
			
		||||
EXTRA_PACKAGES         =
 | 
			
		||||
 | 
			
		||||
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
 | 
			
		||||
# generated LaTeX document. The header should contain everything until the first
 | 
			
		||||
# chapter. If it is left blank doxygen will generate a standard header. See
 | 
			
		||||
# section "Doxygen usage" for information on how to let doxygen write the
 | 
			
		||||
# default header to a separate file.
 | 
			
		||||
# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
 | 
			
		||||
# the generated LaTeX document. The header should contain everything until the
 | 
			
		||||
# first chapter. If it is left blank doxygen will generate a standard header. It
 | 
			
		||||
# is highly recommended to start with a default header using
 | 
			
		||||
# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
 | 
			
		||||
# and then modify the file new_header.tex. See also section "Doxygen usage" for
 | 
			
		||||
# information on how to generate the default header that doxygen normally uses.
 | 
			
		||||
#
 | 
			
		||||
# Note: Only use a user-defined header if you know what you are doing! The
 | 
			
		||||
# following commands have a special meaning inside the header: $title,
 | 
			
		||||
# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
 | 
			
		||||
# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
 | 
			
		||||
# string, for the replacement values of the other commands the user is referred
 | 
			
		||||
# to HTML_HEADER.
 | 
			
		||||
# Note: Only use a user-defined header if you know what you are doing!
 | 
			
		||||
# Note: The header is subject to change so you typically have to regenerate the
 | 
			
		||||
# default header when upgrading to a newer version of doxygen. The following
 | 
			
		||||
# commands have a special meaning inside the header (and footer): For a
 | 
			
		||||
# description of the possible markers and block names see the documentation.
 | 
			
		||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
 | 
			
		||||
 | 
			
		||||
LATEX_HEADER           =
 | 
			
		||||
 | 
			
		||||
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
 | 
			
		||||
# generated LaTeX document. The footer should contain everything after the last
 | 
			
		||||
# chapter. If it is left blank doxygen will generate a standard footer. See
 | 
			
		||||
# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
 | 
			
		||||
# the generated LaTeX document. The footer should contain everything after the
 | 
			
		||||
# last chapter. If it is left blank doxygen will generate a standard footer. See
 | 
			
		||||
# LATEX_HEADER for more information on how to generate a default footer and what
 | 
			
		||||
# special commands can be used inside the footer.
 | 
			
		||||
#
 | 
			
		||||
# Note: Only use a user-defined footer if you know what you are doing!
 | 
			
		||||
# special commands can be used inside the footer. See also section "Doxygen
 | 
			
		||||
# usage" for information on how to generate the default footer that doxygen
 | 
			
		||||
# normally uses. Note: Only use a user-defined footer if you know what you are
 | 
			
		||||
# doing!
 | 
			
		||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
 | 
			
		||||
 | 
			
		||||
LATEX_FOOTER           =
 | 
			
		||||
@ -1779,9 +1966,11 @@ LATEX_EXTRA_FILES      =
 | 
			
		||||
 | 
			
		||||
PDF_HYPERLINKS         = YES
 | 
			
		||||
 | 
			
		||||
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
 | 
			
		||||
# the PDF file directly from the LaTeX files. Set this option to YES, to get a
 | 
			
		||||
# higher quality PDF documentation.
 | 
			
		||||
# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
 | 
			
		||||
# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
 | 
			
		||||
# files. Set this option to YES, to get a higher quality PDF documentation.
 | 
			
		||||
#
 | 
			
		||||
# See also section LATEX_CMD_NAME for selecting the engine.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -1789,8 +1978,7 @@ USE_PDFLATEX           = YES
 | 
			
		||||
 | 
			
		||||
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
 | 
			
		||||
# command to the generated LaTeX files. This will instruct LaTeX to keep running
 | 
			
		||||
# if errors occur, instead of asking the user for help. This option is also used
 | 
			
		||||
# when generating formulas in HTML.
 | 
			
		||||
# if errors occur, instead of asking the user for help.
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -2065,7 +2253,8 @@ SEARCH_INCLUDES        = YES
 | 
			
		||||
 | 
			
		||||
# The INCLUDE_PATH tag can be used to specify one or more directories that
 | 
			
		||||
# contain include files that are not input files but should be processed by the
 | 
			
		||||
# preprocessor.
 | 
			
		||||
# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of
 | 
			
		||||
# RECURSIVE has no effect here.
 | 
			
		||||
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
 | 
			
		||||
 | 
			
		||||
INCLUDE_PATH           =
 | 
			
		||||
@ -2199,35 +2388,50 @@ HAVE_DOT               = NO
 | 
			
		||||
 | 
			
		||||
DOT_NUM_THREADS        = 0
 | 
			
		||||
 | 
			
		||||
# When you want a differently looking font in the dot files that doxygen
 | 
			
		||||
# generates you can specify the font name using DOT_FONTNAME. You need to make
 | 
			
		||||
# sure dot is able to find the font, which can be done by putting it in a
 | 
			
		||||
# standard location or by setting the DOTFONTPATH environment variable or by
 | 
			
		||||
# setting DOT_FONTPATH to the directory containing the font.
 | 
			
		||||
# The default value is: Helvetica.
 | 
			
		||||
# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
 | 
			
		||||
# subgraphs. When you want a differently looking font in the dot files that
 | 
			
		||||
# doxygen generates you can specify fontname, fontcolor and fontsize attributes.
 | 
			
		||||
# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,
 | 
			
		||||
# Edge and Graph Attributes specification</a> You need to make sure dot is able
 | 
			
		||||
# to find the font, which can be done by putting it in a standard location or by
 | 
			
		||||
# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
 | 
			
		||||
# directory containing the font. Default graphviz fontsize is 14.
 | 
			
		||||
# The default value is: fontname=Helvetica,fontsize=10.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
DOT_FONTNAME           = Helvetica
 | 
			
		||||
DOT_COMMON_ATTR        = "fontname=Helvetica,fontsize=10"
 | 
			
		||||
 | 
			
		||||
# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
 | 
			
		||||
# dot graphs.
 | 
			
		||||
# Minimum value: 4, maximum value: 24, default value: 10.
 | 
			
		||||
# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can
 | 
			
		||||
# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a
 | 
			
		||||
# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about
 | 
			
		||||
# arrows shapes.</a>
 | 
			
		||||
# The default value is: labelfontname=Helvetica,labelfontsize=10.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
DOT_FONTSIZE           = 10
 | 
			
		||||
DOT_EDGE_ATTR          = "labelfontname=Helvetica,labelfontsize=10"
 | 
			
		||||
 | 
			
		||||
# By default doxygen will tell dot to use the default font as specified with
 | 
			
		||||
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
 | 
			
		||||
# the path where dot can find it using this tag.
 | 
			
		||||
# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes
 | 
			
		||||
# around nodes set 'shape=plain' or 'shape=plaintext' <a
 | 
			
		||||
# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>
 | 
			
		||||
# The default value is: shape=box,height=0.2,width=0.4.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
DOT_NODE_ATTR          = "shape=box,height=0.2,width=0.4"
 | 
			
		||||
 | 
			
		||||
# You can set the path where dot can find font specified with fontname in
 | 
			
		||||
# DOT_COMMON_ATTR and others dot attributes.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
DOT_FONTPATH           =
 | 
			
		||||
 | 
			
		||||
# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
 | 
			
		||||
# each documented class showing the direct and indirect inheritance relations.
 | 
			
		||||
# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
 | 
			
		||||
# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a
 | 
			
		||||
# graph for each documented class showing the direct and indirect inheritance
 | 
			
		||||
# relations. In case HAVE_DOT is set as well dot will be used to draw the graph,
 | 
			
		||||
# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set
 | 
			
		||||
# to TEXT the direct and indirect inheritance relations will be shown as texts /
 | 
			
		||||
# links.
 | 
			
		||||
# Possible values are: NO, YES, TEXT and GRAPH.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
CLASS_GRAPH            = YES
 | 
			
		||||
 | 
			
		||||
@ -2241,7 +2445,8 @@ CLASS_GRAPH            = YES
 | 
			
		||||
COLLABORATION_GRAPH    = YES
 | 
			
		||||
 | 
			
		||||
# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
 | 
			
		||||
# groups, showing the direct groups dependencies.
 | 
			
		||||
# groups, showing the direct groups dependencies. See also the chapter Grouping
 | 
			
		||||
# in the manual.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
@ -2264,10 +2469,32 @@ UML_LOOK               = NO
 | 
			
		||||
# but if the number exceeds 15, the total amount of fields shown is limited to
 | 
			
		||||
# 10.
 | 
			
		||||
# Minimum value: 0, maximum value: 100, default value: 10.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
# This tag requires that the tag UML_LOOK is set to YES.
 | 
			
		||||
 | 
			
		||||
UML_LIMIT_NUM_FIELDS   = 10
 | 
			
		||||
 | 
			
		||||
# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
 | 
			
		||||
# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
 | 
			
		||||
# tag is set to YES, doxygen will add type and arguments for attributes and
 | 
			
		||||
# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
 | 
			
		||||
# will not generate fields with class member information in the UML graphs. The
 | 
			
		||||
# class diagrams will look similar to the default class diagrams but using UML
 | 
			
		||||
# notation for the relationships.
 | 
			
		||||
# Possible values are: NO, YES and NONE.
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
# This tag requires that the tag UML_LOOK is set to YES.
 | 
			
		||||
 | 
			
		||||
DOT_UML_DETAILS        = NO
 | 
			
		||||
 | 
			
		||||
# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
 | 
			
		||||
# to display on a single line. If the actual line length exceeds this threshold
 | 
			
		||||
# significantly it will wrapped across multiple lines. Some heuristics are apply
 | 
			
		||||
# to avoid ugly line breaks.
 | 
			
		||||
# Minimum value: 0, maximum value: 1000, default value: 17.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
DOT_WRAP_THRESHOLD     = 17
 | 
			
		||||
 | 
			
		||||
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
 | 
			
		||||
# collaboration graphs will show the relations between templates and their
 | 
			
		||||
# instances.
 | 
			
		||||
@ -2334,6 +2561,13 @@ GRAPHICAL_HIERARCHY    = YES
 | 
			
		||||
 | 
			
		||||
DIRECTORY_GRAPH        = YES
 | 
			
		||||
 | 
			
		||||
# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
 | 
			
		||||
# of child directories generated in directory dependency graphs by dot.
 | 
			
		||||
# Minimum value: 1, maximum value: 25, default value: 1.
 | 
			
		||||
# This tag requires that the tag DIRECTORY_GRAPH is set to YES.
 | 
			
		||||
 | 
			
		||||
DIR_GRAPH_MAX_DEPTH    = 1
 | 
			
		||||
 | 
			
		||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
 | 
			
		||||
# generated by dot. For an explanation of the image formats see the section
 | 
			
		||||
# output formats in the documentation of the dot tool (Graphviz (see:
 | 
			
		||||
@ -2387,10 +2621,10 @@ MSCFILE_DIRS           =
 | 
			
		||||
DIAFILE_DIRS           =
 | 
			
		||||
 | 
			
		||||
# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
 | 
			
		||||
# path where java can find the plantuml.jar file. If left blank, it is assumed
 | 
			
		||||
# PlantUML is not used or called during a preprocessing step. Doxygen will
 | 
			
		||||
# generate a warning when it encounters a \startuml command in this case and
 | 
			
		||||
# will not generate output for the diagram.
 | 
			
		||||
# path where java can find the plantuml.jar file or to the filename of jar file
 | 
			
		||||
# to be used. If left blank, it is assumed PlantUML is not used or called during
 | 
			
		||||
# a preprocessing step. Doxygen will generate a warning when it encounters a
 | 
			
		||||
# \startuml command in this case and will not generate output for the diagram.
 | 
			
		||||
 | 
			
		||||
PLANTUML_JAR_PATH      =
 | 
			
		||||
 | 
			
		||||
@ -2428,18 +2662,6 @@ DOT_GRAPH_MAX_NODES    = 50
 | 
			
		||||
 | 
			
		||||
MAX_DOT_GRAPH_DEPTH    = 0
 | 
			
		||||
 | 
			
		||||
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
 | 
			
		||||
# background. This is disabled by default, because dot on Windows does not seem
 | 
			
		||||
# to support this out of the box.
 | 
			
		||||
#
 | 
			
		||||
# Warning: Depending on the platform used, enabling this option may lead to
 | 
			
		||||
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
 | 
			
		||||
# read).
 | 
			
		||||
# The default value is: NO.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
DOT_TRANSPARENT        = NO
 | 
			
		||||
 | 
			
		||||
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
 | 
			
		||||
# files in one run (i.e. multiple -o and -T options on the command line). This
 | 
			
		||||
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
 | 
			
		||||
@ -2452,14 +2674,18 @@ DOT_MULTI_TARGETS      = NO
 | 
			
		||||
# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
 | 
			
		||||
# explaining the meaning of the various boxes and arrows in the dot generated
 | 
			
		||||
# graphs.
 | 
			
		||||
# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal
 | 
			
		||||
# graphical representation for inheritance and collaboration diagrams is used.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
GENERATE_LEGEND        = YES
 | 
			
		||||
 | 
			
		||||
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
 | 
			
		||||
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
 | 
			
		||||
# files that are used to generate the various graphs.
 | 
			
		||||
#
 | 
			
		||||
# Note: This setting is not only used for dot files but also for msc temporary
 | 
			
		||||
# files.
 | 
			
		||||
# The default value is: YES.
 | 
			
		||||
# This tag requires that the tag HAVE_DOT is set to YES.
 | 
			
		||||
 | 
			
		||||
DOT_CLEANUP            = YES
 | 
			
		||||
 | 
			
		||||
@ -497,7 +497,8 @@ should also declare this in its `Info.plist` by setting the
 | 
			
		||||
@anchor GLFW_X11_CLASS_NAME_hint
 | 
			
		||||
@anchor GLFW_X11_INSTANCE_NAME_hint
 | 
			
		||||
__GLFW_X11_CLASS_NAME__ and __GLFW_X11_INSTANCE_NAME__ specifies the desired
 | 
			
		||||
ASCII encoded class and instance parts of the ICCCM `WM_CLASS` window property.
 | 
			
		||||
ASCII encoded class and instance parts of the ICCCM `WM_CLASS` window property.  Both
 | 
			
		||||
hints need to be set to something other than an empty string for them to take effect.
 | 
			
		||||
These are set with @ref glfwWindowHintString.
 | 
			
		||||
 | 
			
		||||
@subsubsection window_hints_wayland Wayland specific window hints
 | 
			
		||||
 | 
			
		||||
@ -2841,11 +2841,11 @@ GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor);
 | 
			
		||||
 *  @param[in] monitor The monitor whose gamma ramp to set.
 | 
			
		||||
 *  @param[in] gamma The desired exponent.
 | 
			
		||||
 *
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
 | 
			
		||||
 *  GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_INVALID_VALUE,
 | 
			
		||||
 *  @ref GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
 | 
			
		||||
 *
 | 
			
		||||
 *  @remark @wayland Gamma handling is a privileged protocol, this function
 | 
			
		||||
 *  will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR.
 | 
			
		||||
 *  will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE.
 | 
			
		||||
 *
 | 
			
		||||
 *  @thread_safety This function must only be called from the main thread.
 | 
			
		||||
 *
 | 
			
		||||
@ -2865,11 +2865,11 @@ GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma);
 | 
			
		||||
 *  @return The current gamma ramp, or `NULL` if an
 | 
			
		||||
 *  [error](@ref error_handling) occurred.
 | 
			
		||||
 *
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
 | 
			
		||||
 *  GLFW_PLATFORM_ERROR.
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_PLATFORM_ERROR
 | 
			
		||||
 *  and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
 | 
			
		||||
 *
 | 
			
		||||
 *  @remark @wayland Gamma handling is a privileged protocol, this function
 | 
			
		||||
 *  will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR while
 | 
			
		||||
 *  will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE while
 | 
			
		||||
 *  returning `NULL`.
 | 
			
		||||
 *
 | 
			
		||||
 *  @pointer_lifetime The returned structure and its arrays are allocated and
 | 
			
		||||
@ -2904,8 +2904,8 @@ GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor);
 | 
			
		||||
 *  @param[in] monitor The monitor whose gamma ramp to set.
 | 
			
		||||
 *  @param[in] ramp The gamma ramp to use.
 | 
			
		||||
 *
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
 | 
			
		||||
 *  GLFW_PLATFORM_ERROR.
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_PLATFORM_ERROR
 | 
			
		||||
 *  and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
 | 
			
		||||
 *
 | 
			
		||||
 *  @remark The size of the specified gamma ramp should match the size of the
 | 
			
		||||
 *  current ramp for that monitor.
 | 
			
		||||
@ -2913,7 +2913,7 @@ GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor);
 | 
			
		||||
 *  @remark @win32 The gamma ramp size must be 256.
 | 
			
		||||
 *
 | 
			
		||||
 *  @remark @wayland Gamma handling is a privileged protocol, this function
 | 
			
		||||
 *  will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR.
 | 
			
		||||
 *  will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE.
 | 
			
		||||
 *
 | 
			
		||||
 *  @pointer_lifetime The specified gamma ramp is copied before this function
 | 
			
		||||
 *  returns.
 | 
			
		||||
@ -4038,7 +4038,8 @@ GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib);
 | 
			
		||||
 *  @param[in] value `GLFW_TRUE` or `GLFW_FALSE`.
 | 
			
		||||
 *
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
 | 
			
		||||
 *  GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
 | 
			
		||||
 *  GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_PLATFORM_ERROR and @ref
 | 
			
		||||
 *  GLFW_FEATURE_UNAVAILABLE.
 | 
			
		||||
 *
 | 
			
		||||
 *  @remark Calling @ref glfwGetWindowAttrib will always return the latest
 | 
			
		||||
 *  value, even if that value is ignored by the current mode of the window.
 | 
			
		||||
@ -4889,11 +4890,11 @@ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos);
 | 
			
		||||
 *  @param[in] ypos The desired y-coordinate, relative to the top edge of the
 | 
			
		||||
 *  content area.
 | 
			
		||||
 *
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
 | 
			
		||||
 *  GLFW_PLATFORM_ERROR.
 | 
			
		||||
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
 | 
			
		||||
 *  GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks).
 | 
			
		||||
 *
 | 
			
		||||
 *  @remark @wayland This function will only work when the cursor mode is
 | 
			
		||||
 *  `GLFW_CURSOR_DISABLED`, otherwise it will do nothing.
 | 
			
		||||
 *  `GLFW_CURSOR_DISABLED`, otherwise it will emit @ref GLFW_FEATURE_UNAVAILABLE.
 | 
			
		||||
 *
 | 
			
		||||
 *  @thread_safety This function must only be called from the main thread.
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
@ -27,6 +27,9 @@
 | 
			
		||||
//========================================================================
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_COCOA)
 | 
			
		||||
 | 
			
		||||
#include <sys/param.h> // For MAXPATHLEN
 | 
			
		||||
 | 
			
		||||
// Needed for _NSGetProgname
 | 
			
		||||
@ -691,3 +694,5 @@ void _glfwTerminateCocoa(void)
 | 
			
		||||
    } // autoreleasepool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_COCOA
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,8 +31,6 @@
 | 
			
		||||
#define GLFW_COCOA_JOYSTICK_STATE         _GLFWjoystickNS ns;
 | 
			
		||||
#define GLFW_COCOA_LIBRARY_JOYSTICK_STATE
 | 
			
		||||
 | 
			
		||||
#define GLFW_BUILD_COCOA_MAPPINGS
 | 
			
		||||
 | 
			
		||||
// Cocoa-specific per-joystick data
 | 
			
		||||
//
 | 
			
		||||
typedef struct _GLFWjoystickNS
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_COCOA)
 | 
			
		||||
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -476,3 +478,5 @@ void _glfwUpdateGamepadGUIDCocoa(char* guid)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_COCOA
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_COCOA)
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
@ -625,3 +627,5 @@ GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* handle)
 | 
			
		||||
    return monitor->ns.displayID;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_COCOA
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_COCOA_TIMER)
 | 
			
		||||
 | 
			
		||||
#include <mach/mach_time.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -53,3 +55,5 @@ uint64_t _glfwPlatformGetTimerFrequency(void)
 | 
			
		||||
    return _glfw.timer.ns.frequency;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_COCOA_TIMER
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_COCOA)
 | 
			
		||||
 | 
			
		||||
#include <float.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
@ -2053,3 +2055,5 @@ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* handle)
 | 
			
		||||
    return window->ns.object;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_COCOA
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -88,13 +88,30 @@ static int getEGLConfigAttrib(EGLConfig config, int attrib)
 | 
			
		||||
// Return the EGLConfig most closely matching the specified hints
 | 
			
		||||
//
 | 
			
		||||
static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig,
 | 
			
		||||
                                const _GLFWfbconfig* desired,
 | 
			
		||||
                                const _GLFWfbconfig* fbconfig,
 | 
			
		||||
                                EGLConfig* result)
 | 
			
		||||
{
 | 
			
		||||
    EGLConfig* nativeConfigs;
 | 
			
		||||
    _GLFWfbconfig* usableConfigs;
 | 
			
		||||
    const _GLFWfbconfig* closest;
 | 
			
		||||
    int i, nativeCount, usableCount;
 | 
			
		||||
    int i, nativeCount, usableCount, apiBit;
 | 
			
		||||
    GLFWbool wrongApiAvailable = GLFW_FALSE;
 | 
			
		||||
 | 
			
		||||
    if (ctxconfig->client == GLFW_OPENGL_ES_API)
 | 
			
		||||
    {
 | 
			
		||||
        if (ctxconfig->major == 1)
 | 
			
		||||
            apiBit = EGL_OPENGL_ES_BIT;
 | 
			
		||||
        else
 | 
			
		||||
            apiBit = EGL_OPENGL_ES2_BIT;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
        apiBit = EGL_OPENGL_BIT;
 | 
			
		||||
 | 
			
		||||
    if (fbconfig->stereo)
 | 
			
		||||
    {
 | 
			
		||||
        _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "EGL: Stereo rendering not supported");
 | 
			
		||||
        return GLFW_FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    eglGetConfigs(_glfw.egl.display, NULL, 0, &nativeCount);
 | 
			
		||||
    if (!nativeCount)
 | 
			
		||||
@ -132,7 +149,7 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig,
 | 
			
		||||
            if (!vi.visualid)
 | 
			
		||||
                continue;
 | 
			
		||||
 | 
			
		||||
            if (desired->transparent)
 | 
			
		||||
            if (fbconfig->transparent)
 | 
			
		||||
            {
 | 
			
		||||
                int count;
 | 
			
		||||
                XVisualInfo* vis =
 | 
			
		||||
@ -146,22 +163,9 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig,
 | 
			
		||||
        }
 | 
			
		||||
#endif // _GLFW_X11
 | 
			
		||||
 | 
			
		||||
        if (ctxconfig->client == GLFW_OPENGL_ES_API)
 | 
			
		||||
        if (!(getEGLConfigAttrib(n, EGL_RENDERABLE_TYPE) & apiBit))
 | 
			
		||||
        {
 | 
			
		||||
            if (ctxconfig->major == 1)
 | 
			
		||||
            {
 | 
			
		||||
                if (!(getEGLConfigAttrib(n, EGL_RENDERABLE_TYPE) & EGL_OPENGL_ES_BIT))
 | 
			
		||||
                    continue;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (!(getEGLConfigAttrib(n, EGL_RENDERABLE_TYPE) & EGL_OPENGL_ES2_BIT))
 | 
			
		||||
                    continue;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else if (ctxconfig->client == GLFW_OPENGL_API)
 | 
			
		||||
        {
 | 
			
		||||
            if (!(getEGLConfigAttrib(n, EGL_RENDERABLE_TYPE) & EGL_OPENGL_BIT))
 | 
			
		||||
            wrongApiAvailable = GLFW_TRUE;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -182,22 +186,51 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig,
 | 
			
		||||
            //       with an alpha channel to ensure the buffer is opaque
 | 
			
		||||
            if (!_glfw.egl.EXT_present_opaque)
 | 
			
		||||
            {
 | 
			
		||||
                if (!desired->transparent && u->alphaBits > 0)
 | 
			
		||||
                if (!fbconfig->transparent && u->alphaBits > 0)
 | 
			
		||||
                    continue;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
#endif // _GLFW_WAYLAND
 | 
			
		||||
 | 
			
		||||
        u->samples = getEGLConfigAttrib(n, EGL_SAMPLES);
 | 
			
		||||
        u->doublebuffer = desired->doublebuffer;
 | 
			
		||||
        u->doublebuffer = fbconfig->doublebuffer;
 | 
			
		||||
 | 
			
		||||
        u->handle = (uintptr_t) n;
 | 
			
		||||
        usableCount++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    closest = _glfwChooseFBConfig(desired, usableConfigs, usableCount);
 | 
			
		||||
    closest = _glfwChooseFBConfig(fbconfig, usableConfigs, usableCount);
 | 
			
		||||
    if (closest)
 | 
			
		||||
        *result = (EGLConfig) closest->handle;
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        if (wrongApiAvailable)
 | 
			
		||||
        {
 | 
			
		||||
            if (ctxconfig->client == GLFW_OPENGL_ES_API)
 | 
			
		||||
            {
 | 
			
		||||
                if (ctxconfig->major == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    _glfwInputError(GLFW_API_UNAVAILABLE,
 | 
			
		||||
                                    "EGL: Failed to find support for OpenGL ES 1.x");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    _glfwInputError(GLFW_API_UNAVAILABLE,
 | 
			
		||||
                                    "EGL: Failed to find support for OpenGL ES 2 or later");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                _glfwInputError(GLFW_API_UNAVAILABLE,
 | 
			
		||||
                                "EGL: Failed to find support for OpenGL");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            _glfwInputError(GLFW_FORMAT_UNAVAILABLE,
 | 
			
		||||
                            "EGL: Failed to find a suitable EGLConfig");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _glfw_free(nativeConfigs);
 | 
			
		||||
    _glfw_free(usableConfigs);
 | 
			
		||||
@ -550,11 +583,7 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window,
 | 
			
		||||
        share = ctxconfig->share->context.egl.handle;
 | 
			
		||||
 | 
			
		||||
    if (!chooseEGLConfig(ctxconfig, fbconfig, &config))
 | 
			
		||||
    {
 | 
			
		||||
        _glfwInputError(GLFW_FORMAT_UNAVAILABLE,
 | 
			
		||||
                        "EGL: Failed to find a suitable EGLConfig");
 | 
			
		||||
        return GLFW_FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (ctxconfig->client == GLFW_OPENGL_ES_API)
 | 
			
		||||
    {
 | 
			
		||||
@ -815,11 +844,7 @@ GLFWbool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig,
 | 
			
		||||
    const long vimask = VisualScreenMask | VisualIDMask;
 | 
			
		||||
 | 
			
		||||
    if (!chooseEGLConfig(ctxconfig, fbconfig, &native))
 | 
			
		||||
    {
 | 
			
		||||
        _glfwInputError(GLFW_FORMAT_UNAVAILABLE,
 | 
			
		||||
                        "EGL: Failed to find a suitable EGLConfig");
 | 
			
		||||
        return GLFW_FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    eglGetConfigAttrib(_glfw.egl.display, native,
 | 
			
		||||
                       EGL_NATIVE_VISUAL_ID, &visualID);
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_X11)
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
@ -714,3 +716,5 @@ GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* handle)
 | 
			
		||||
    return window->context.glx.window;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_X11
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -330,13 +330,6 @@ typedef VkResult (APIENTRY * PFN_vkEnumerateInstanceExtensionProperties)(const c
 | 
			
		||||
 | 
			
		||||
#include "platform.h"
 | 
			
		||||
 | 
			
		||||
// Constructs a version number string from the public header macros
 | 
			
		||||
#define _GLFW_CONCAT_VERSION(m, n, r) #m "." #n "." #r
 | 
			
		||||
#define _GLFW_MAKE_VERSION(m, n, r) _GLFW_CONCAT_VERSION(m, n, r)
 | 
			
		||||
#define _GLFW_VERSION_NUMBER _GLFW_MAKE_VERSION(GLFW_VERSION_MAJOR, \
 | 
			
		||||
                                                GLFW_VERSION_MINOR, \
 | 
			
		||||
                                                GLFW_VERSION_REVISION)
 | 
			
		||||
 | 
			
		||||
// Checks for whether the library has been initialized
 | 
			
		||||
#define _GLFW_REQUIRE_INIT()                         \
 | 
			
		||||
    if (!_glfw.initialized)                          \
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_LINUX_JOYSTICK)
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/inotify.h>
 | 
			
		||||
@ -429,3 +431,5 @@ void _glfwUpdateGamepadGUIDLinux(char* guid)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_LINUX_JOYSTICK
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,8 +31,6 @@
 | 
			
		||||
#define GLFW_LINUX_JOYSTICK_STATE         _GLFWjoystickLinux linjs;
 | 
			
		||||
#define GLFW_LINUX_LIBRARY_JOYSTICK_STATE _GLFWlibraryLinux  linjs;
 | 
			
		||||
 | 
			
		||||
#define GLFW_BUILD_LINUX_MAPPINGS
 | 
			
		||||
 | 
			
		||||
// Linux-specific joystick data
 | 
			
		||||
//
 | 
			
		||||
typedef struct _GLFWjoystickLinux
 | 
			
		||||
 | 
			
		||||
@ -60,7 +60,7 @@
 | 
			
		||||
 | 
			
		||||
const char* _glfwDefaultMappings[] =
 | 
			
		||||
{
 | 
			
		||||
#if defined(GLFW_BUILD_WIN32_MAPPINGS)
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
"03000000fa2d00000100000000000000,3DRUDDER,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows,",
 | 
			
		||||
"03000000c82d00002038000000000000,8bitdo,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,",
 | 
			
		||||
"03000000c82d00000951000000000000,8BitDo Dogbone Modkit,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows,",
 | 
			
		||||
@ -426,9 +426,9 @@ const char* _glfwDefaultMappings[] =
 | 
			
		||||
"78696e70757405000000000000000000,XInput Dance Pad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
 | 
			
		||||
"78696e70757406000000000000000000,XInput Guitar (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
 | 
			
		||||
"78696e70757408000000000000000000,XInput Drum Kit (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
 | 
			
		||||
#endif // GLFW_BUILD_WIN32_MAPPINGS
 | 
			
		||||
#endif // _GLFW_WIN32
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_COCOA_MAPPINGS)
 | 
			
		||||
#if defined(_GLFW_COCOA)
 | 
			
		||||
"030000008f0e00000300000009010000,2In1 USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,",
 | 
			
		||||
"03000000c82d00000090000001000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,",
 | 
			
		||||
"03000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,",
 | 
			
		||||
@ -598,9 +598,9 @@ const char* _glfwDefaultMappings[] =
 | 
			
		||||
"03000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,",
 | 
			
		||||
"03000000120c0000100e000000010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,",
 | 
			
		||||
"03000000120c0000101e000000010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,",
 | 
			
		||||
#endif // GLFW_BUILD_COCOA_MAPPINGS
 | 
			
		||||
#endif // _GLFW_COCOA
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_LINUX_MAPPINGS)
 | 
			
		||||
#if defined(GLFW_BUILD_LINUX_JOYSTICK)
 | 
			
		||||
"03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,",
 | 
			
		||||
"05000000c82d00001038000000010000,8Bitdo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,",
 | 
			
		||||
"05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux,",
 | 
			
		||||
@ -996,6 +996,6 @@ const char* _glfwDefaultMappings[] =
 | 
			
		||||
"03000000c0160000e105000001010000,Xin-Mo Xin-Mo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,",
 | 
			
		||||
"03000000120c0000100e000011010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,",
 | 
			
		||||
"03000000120c0000101e000011010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,",
 | 
			
		||||
#endif // GLFW_BUILD_LINUX_MAPPINGS
 | 
			
		||||
#endif // GLFW_BUILD_LINUX_JOYSTICK
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -60,7 +60,7 @@
 | 
			
		||||
 | 
			
		||||
const char* _glfwDefaultMappings[] =
 | 
			
		||||
{
 | 
			
		||||
#if defined(GLFW_BUILD_WIN32_MAPPINGS)
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
@GLFW_WIN32_MAPPINGS@
 | 
			
		||||
"78696e70757401000000000000000000,XInput Gamepad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
 | 
			
		||||
"78696e70757402000000000000000000,XInput Wheel (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
 | 
			
		||||
@ -69,14 +69,14 @@ const char* _glfwDefaultMappings[] =
 | 
			
		||||
"78696e70757405000000000000000000,XInput Dance Pad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
 | 
			
		||||
"78696e70757406000000000000000000,XInput Guitar (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
 | 
			
		||||
"78696e70757408000000000000000000,XInput Drum Kit (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
 | 
			
		||||
#endif // GLFW_BUILD_WIN32_MAPPINGS
 | 
			
		||||
#endif // _GLFW_WIN32
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_COCOA_MAPPINGS)
 | 
			
		||||
#if defined(_GLFW_COCOA)
 | 
			
		||||
@GLFW_COCOA_MAPPINGS@
 | 
			
		||||
#endif // GLFW_BUILD_COCOA_MAPPINGS
 | 
			
		||||
#endif // _GLFW_COCOA
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_LINUX_MAPPINGS)
 | 
			
		||||
#if defined(GLFW_BUILD_LINUX_JOYSTICK)
 | 
			
		||||
@GLFW_LINUX_MAPPINGS@
 | 
			
		||||
#endif // GLFW_BUILD_LINUX_MAPPINGS
 | 
			
		||||
#endif // GLFW_BUILD_LINUX_JOYSTICK
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_COCOA)
 | 
			
		||||
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
@ -374,3 +376,5 @@ GLFWAPI id glfwGetNSGLContext(GLFWwindow* handle)
 | 
			
		||||
    return window->context.nsgl.object;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_COCOA
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,10 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
// These construct a string literal from individual numeric constants
 | 
			
		||||
#define _GLFW_CONCAT_VERSION(m, n, r) #m "." #n "." #r
 | 
			
		||||
#define _GLFW_MAKE_VERSION(m, n, r) _GLFW_CONCAT_VERSION(m, n, r)
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//////                       GLFW internal API                      //////
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@ -146,7 +150,9 @@ GLFWAPI int glfwPlatformSupported(int platformID)
 | 
			
		||||
 | 
			
		||||
GLFWAPI const char* glfwGetVersionString(void)
 | 
			
		||||
{
 | 
			
		||||
    return _GLFW_VERSION_NUMBER
 | 
			
		||||
    return _GLFW_MAKE_VERSION(GLFW_VERSION_MAJOR,
 | 
			
		||||
                              GLFW_VERSION_MINOR,
 | 
			
		||||
                              GLFW_VERSION_REVISION)
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
        " Win32 WGL"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -25,6 +25,18 @@
 | 
			
		||||
//
 | 
			
		||||
//========================================================================
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_WIN32_TIMER) || \
 | 
			
		||||
    defined(GLFW_BUILD_WIN32_MODULE) || \
 | 
			
		||||
    defined(GLFW_BUILD_WIN32_THREAD) || \
 | 
			
		||||
    defined(GLFW_BUILD_COCOA_TIMER) || \
 | 
			
		||||
    defined(GLFW_BUILD_POSIX_TIMER) || \
 | 
			
		||||
    defined(GLFW_BUILD_POSIX_MODULE) || \
 | 
			
		||||
    defined(GLFW_BUILD_POSIX_THREAD) || \
 | 
			
		||||
    defined(GLFW_BUILD_POSIX_POLL) || \
 | 
			
		||||
    defined(GLFW_BUILD_LINUX_JOYSTICK)
 | 
			
		||||
 #error "You must not define these; define zero or more _GLFW_<platform> macros instead"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "null_platform.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
@ -86,6 +98,10 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined(_GLFW_X11) || defined(_GLFW_WAYLAND)) && defined(__linux__)
 | 
			
		||||
 #define GLFW_BUILD_LINUX_JOYSTICK
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_LINUX_JOYSTICK)
 | 
			
		||||
 #include "linux_joystick.h"
 | 
			
		||||
#else
 | 
			
		||||
 #define GLFW_LINUX_JOYSTICK_STATE
 | 
			
		||||
@ -141,27 +157,55 @@
 | 
			
		||||
        GLFW_GLX_LIBRARY_CONTEXT_STATE
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
 #define GLFW_BUILD_WIN32_THREAD
 | 
			
		||||
#else
 | 
			
		||||
 #define GLFW_BUILD_POSIX_THREAD
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_WIN32_THREAD)
 | 
			
		||||
 #include "win32_thread.h"
 | 
			
		||||
 #define GLFW_PLATFORM_TLS_STATE    GLFW_WIN32_TLS_STATE
 | 
			
		||||
 #define GLFW_PLATFORM_MUTEX_STATE  GLFW_WIN32_MUTEX_STATE
 | 
			
		||||
#else
 | 
			
		||||
#elif defined(GLFW_BUILD_POSIX_THREAD)
 | 
			
		||||
 #include "posix_thread.h"
 | 
			
		||||
 #define GLFW_PLATFORM_TLS_STATE    GLFW_POSIX_TLS_STATE
 | 
			
		||||
 #define GLFW_PLATFORM_MUTEX_STATE  GLFW_POSIX_MUTEX_STATE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
 #include "win32_time.h"
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_TIMER_STATE  GLFW_WIN32_LIBRARY_TIMER_STATE
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_DBUS_STATE
 | 
			
		||||
 #define GLFW_BUILD_WIN32_TIMER
 | 
			
		||||
#elif defined(__APPLE__)
 | 
			
		||||
 #include "cocoa_time.h"
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_TIMER_STATE  GLFW_COCOA_LIBRARY_TIMER_STATE
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_DBUS_STATE
 | 
			
		||||
 #define GLFW_BUILD_COCOA_TIMER
 | 
			
		||||
#else
 | 
			
		||||
 #include "posix_time.h"
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_TIMER_STATE  GLFW_POSIX_LIBRARY_TIMER_STATE
 | 
			
		||||
 #include "posix_dbus.h"
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_DBUS_STATE  GLFW_POSIX_LIBRARY_DBUS_STATE
 | 
			
		||||
 #define GLFW_BUILD_POSIX_TIMER
 | 
			
		||||
 #define GLFW_BUILD_POSIX_DBUS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_WIN32_TIMER)
 | 
			
		||||
 #include "win32_time.h"
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_TIMER_STATE  GLFW_WIN32_LIBRARY_TIMER_STATE
 | 
			
		||||
#elif defined(GLFW_BUILD_COCOA_TIMER)
 | 
			
		||||
 #include "cocoa_time.h"
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_TIMER_STATE  GLFW_COCOA_LIBRARY_TIMER_STATE
 | 
			
		||||
#elif defined(GLFW_BUILD_POSIX_TIMER)
 | 
			
		||||
 #include "posix_time.h"
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_TIMER_STATE  GLFW_POSIX_LIBRARY_TIMER_STATE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_POSIX_DBUS)
 | 
			
		||||
 #include "posix_dbus.h"
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_DBUS_STATE  GLFW_POSIX_LIBRARY_DBUS_STATE
 | 
			
		||||
#else
 | 
			
		||||
 #define GLFW_PLATFORM_LIBRARY_DBUS_STATE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
 #define GLFW_BUILD_WIN32_MODULE
 | 
			
		||||
#else
 | 
			
		||||
 #define GLFW_BUILD_POSIX_MODULE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WAYLAND) || defined(_GLFW_X11)
 | 
			
		||||
 #define GLFW_BUILD_POSIX_POLL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_POSIX_MODULE)
 | 
			
		||||
 | 
			
		||||
#include <dlfcn.h>
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@ -49,3 +51,5 @@ GLFWproc _glfwPlatformGetModuleSymbol(void* module, const char* name)
 | 
			
		||||
    return dlsym(module, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_POSIX_MODULE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_POSIX_POLL)
 | 
			
		||||
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
@ -79,3 +81,5 @@ GLFWbool _glfwPollPOSIX(struct pollfd* fds, nfds_t count, double* timeout)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_POSIX_POLL
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_POSIX_THREAD)
 | 
			
		||||
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
@ -103,3 +105,5 @@ void _glfwPlatformUnlockMutex(_GLFWmutex* mutex)
 | 
			
		||||
    pthread_mutex_unlock(&mutex->posix.handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_POSIX_THREAD
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_POSIX_TIMER)
 | 
			
		||||
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
 | 
			
		||||
@ -61,3 +63,5 @@ uint64_t _glfwPlatformGetTimerFrequency(void)
 | 
			
		||||
    return _glfw.timer.posix.frequency;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_POSIX_TIMER
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
@ -776,3 +778,5 @@ GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* handle)
 | 
			
		||||
    return window->context.wgl.handle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WIN32
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
static const GUID _glfw_GUID_DEVINTERFACE_HID =
 | 
			
		||||
@ -726,3 +728,5 @@ void _glfwTerminateWin32(void)
 | 
			
		||||
    freeLibraries();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WIN32
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
@ -756,3 +758,5 @@ void _glfwUpdateGamepadGUIDWin32(char* guid)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WIN32
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -27,8 +27,6 @@
 | 
			
		||||
#define GLFW_WIN32_JOYSTICK_STATE         _GLFWjoystickWin32 win32;
 | 
			
		||||
#define GLFW_WIN32_LIBRARY_JOYSTICK_STATE
 | 
			
		||||
 | 
			
		||||
#define GLFW_BUILD_WIN32_MAPPINGS
 | 
			
		||||
 | 
			
		||||
// Joystick element (axis, button or slider)
 | 
			
		||||
//
 | 
			
		||||
typedef struct _GLFWjoyobjectWin32
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_WIN32_MODULE)
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//////                       GLFW platform API                      //////
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@ -47,3 +49,5 @@ GLFWproc _glfwPlatformGetModuleSymbol(void* module, const char* name)
 | 
			
		||||
    return (GLFWproc) GetProcAddress((HMODULE) module, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_WIN32_MODULE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
@ -545,3 +547,5 @@ GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* handle)
 | 
			
		||||
    return monitor->win32.publicDisplayName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WIN32
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_WIN32_THREAD)
 | 
			
		||||
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -96,3 +98,5 @@ void _glfwPlatformUnlockMutex(_GLFWmutex* mutex)
 | 
			
		||||
    LeaveCriticalSection(&mutex->win32.section);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_WIN32_THREAD
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,7 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(GLFW_BUILD_WIN32_TIMER)
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//////                       GLFW platform API                      //////
 | 
			
		||||
@ -51,3 +52,5 @@ uint64_t _glfwPlatformGetTimerFrequency(void)
 | 
			
		||||
    return _glfw.timer.win32.frequency;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // GLFW_BUILD_WIN32_TIMER
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WIN32)
 | 
			
		||||
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -184,53 +186,38 @@ static HICON createIcon(const GLFWimage* image, int xhot, int yhot, GLFWbool ico
 | 
			
		||||
    return handle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Translate content area size to full window size according to styles and DPI
 | 
			
		||||
//
 | 
			
		||||
static void getFullWindowSize(DWORD style, DWORD exStyle,
 | 
			
		||||
                              int contentWidth, int contentHeight,
 | 
			
		||||
                              int* fullWidth, int* fullHeight,
 | 
			
		||||
                              UINT dpi)
 | 
			
		||||
{
 | 
			
		||||
    RECT rect = { 0, 0, contentWidth, contentHeight };
 | 
			
		||||
 | 
			
		||||
    if (_glfwIsWindows10Version1607OrGreaterWin32())
 | 
			
		||||
        AdjustWindowRectExForDpi(&rect, style, FALSE, exStyle, dpi);
 | 
			
		||||
    else
 | 
			
		||||
        AdjustWindowRectEx(&rect, style, FALSE, exStyle);
 | 
			
		||||
 | 
			
		||||
    *fullWidth = rect.right - rect.left;
 | 
			
		||||
    *fullHeight = rect.bottom - rect.top;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Enforce the content area aspect ratio based on which edge is being dragged
 | 
			
		||||
//
 | 
			
		||||
static void applyAspectRatio(_GLFWwindow* window, int edge, RECT* area)
 | 
			
		||||
{
 | 
			
		||||
    int xoff, yoff;
 | 
			
		||||
    UINT dpi = USER_DEFAULT_SCREEN_DPI;
 | 
			
		||||
    RECT frame = {0};
 | 
			
		||||
    const float ratio = (float) window->numer / (float) window->denom;
 | 
			
		||||
    const DWORD style = getWindowStyle(window);
 | 
			
		||||
    const DWORD exStyle = getWindowExStyle(window);
 | 
			
		||||
 | 
			
		||||
    if (_glfwIsWindows10Version1607OrGreaterWin32())
 | 
			
		||||
        dpi = GetDpiForWindow(window->win32.handle);
 | 
			
		||||
 | 
			
		||||
    getFullWindowSize(getWindowStyle(window), getWindowExStyle(window),
 | 
			
		||||
                      0, 0, &xoff, &yoff, dpi);
 | 
			
		||||
    {
 | 
			
		||||
        AdjustWindowRectExForDpi(&frame, style, FALSE, exStyle,
 | 
			
		||||
                                 GetDpiForWindow(window->win32.handle));
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
        AdjustWindowRectEx(&frame, style, FALSE, exStyle);
 | 
			
		||||
 | 
			
		||||
    if (edge == WMSZ_LEFT  || edge == WMSZ_BOTTOMLEFT ||
 | 
			
		||||
        edge == WMSZ_RIGHT || edge == WMSZ_BOTTOMRIGHT)
 | 
			
		||||
    {
 | 
			
		||||
        area->bottom = area->top + yoff +
 | 
			
		||||
            (int) ((area->right - area->left - xoff) / ratio);
 | 
			
		||||
        area->bottom = area->top + (frame.bottom - frame.top) +
 | 
			
		||||
            (int) (((area->right - area->left) - (frame.right - frame.left)) / ratio);
 | 
			
		||||
    }
 | 
			
		||||
    else if (edge == WMSZ_TOPLEFT || edge == WMSZ_TOPRIGHT)
 | 
			
		||||
    {
 | 
			
		||||
        area->top = area->bottom - yoff -
 | 
			
		||||
            (int) ((area->right - area->left - xoff) / ratio);
 | 
			
		||||
        area->top = area->bottom - (frame.bottom - frame.top) -
 | 
			
		||||
            (int) (((area->right - area->left) - (frame.right - frame.left)) / ratio);
 | 
			
		||||
    }
 | 
			
		||||
    else if (edge == WMSZ_TOP || edge == WMSZ_BOTTOM)
 | 
			
		||||
    {
 | 
			
		||||
        area->right = area->left + xoff +
 | 
			
		||||
            (int) ((area->bottom - area->top - yoff) * ratio);
 | 
			
		||||
        area->right = area->left + (frame.right - frame.left) +
 | 
			
		||||
            (int) (((area->bottom - area->top) - (frame.bottom - frame.top)) * ratio);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1080,31 +1067,34 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l
 | 
			
		||||
 | 
			
		||||
        case WM_GETMINMAXINFO:
 | 
			
		||||
        {
 | 
			
		||||
            int xoff, yoff;
 | 
			
		||||
            UINT dpi = USER_DEFAULT_SCREEN_DPI;
 | 
			
		||||
            RECT frame = {0};
 | 
			
		||||
            MINMAXINFO* mmi = (MINMAXINFO*) lParam;
 | 
			
		||||
            const DWORD style = getWindowStyle(window);
 | 
			
		||||
            const DWORD exStyle = getWindowExStyle(window);
 | 
			
		||||
 | 
			
		||||
            if (window->monitor)
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
            if (_glfwIsWindows10Version1607OrGreaterWin32())
 | 
			
		||||
                dpi = GetDpiForWindow(window->win32.handle);
 | 
			
		||||
 | 
			
		||||
            getFullWindowSize(getWindowStyle(window), getWindowExStyle(window),
 | 
			
		||||
                              0, 0, &xoff, &yoff, dpi);
 | 
			
		||||
            {
 | 
			
		||||
                AdjustWindowRectExForDpi(&frame, style, FALSE, exStyle,
 | 
			
		||||
                                         GetDpiForWindow(window->win32.handle));
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
                AdjustWindowRectEx(&frame, style, FALSE, exStyle);
 | 
			
		||||
 | 
			
		||||
            if (window->minwidth != GLFW_DONT_CARE &&
 | 
			
		||||
                window->minheight != GLFW_DONT_CARE)
 | 
			
		||||
            {
 | 
			
		||||
                mmi->ptMinTrackSize.x = window->minwidth + xoff;
 | 
			
		||||
                mmi->ptMinTrackSize.y = window->minheight + yoff;
 | 
			
		||||
                mmi->ptMinTrackSize.x = window->minwidth + frame.right - frame.left;
 | 
			
		||||
                mmi->ptMinTrackSize.y = window->minheight + frame.bottom - frame.top;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (window->maxwidth != GLFW_DONT_CARE &&
 | 
			
		||||
                window->maxheight != GLFW_DONT_CARE)
 | 
			
		||||
            {
 | 
			
		||||
                mmi->ptMaxTrackSize.x = window->maxwidth + xoff;
 | 
			
		||||
                mmi->ptMaxTrackSize.y = window->maxheight + yoff;
 | 
			
		||||
                mmi->ptMaxTrackSize.x = window->maxwidth + frame.right - frame.left;
 | 
			
		||||
                mmi->ptMaxTrackSize.y = window->maxheight + frame.bottom - frame.top;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!window->decorated)
 | 
			
		||||
@ -1275,7 +1265,7 @@ static int createNativeWindow(_GLFWwindow* window,
 | 
			
		||||
                              const _GLFWwndconfig* wndconfig,
 | 
			
		||||
                              const _GLFWfbconfig* fbconfig)
 | 
			
		||||
{
 | 
			
		||||
    int xpos, ypos, fullWidth, fullHeight;
 | 
			
		||||
    int frameX, frameY, frameWidth, frameHeight;
 | 
			
		||||
    WCHAR* wideTitle;
 | 
			
		||||
    DWORD style = getWindowStyle(window);
 | 
			
		||||
    DWORD exStyle = getWindowExStyle(window);
 | 
			
		||||
@ -1321,10 +1311,10 @@ static int createNativeWindow(_GLFWwindow* window,
 | 
			
		||||
        // NOTE: This window placement is temporary and approximate, as the
 | 
			
		||||
        //       correct position and size cannot be known until the monitor
 | 
			
		||||
        //       video mode has been picked in _glfwSetVideoModeWin32
 | 
			
		||||
        xpos = mi.rcMonitor.left;
 | 
			
		||||
        ypos = mi.rcMonitor.top;
 | 
			
		||||
        fullWidth  = mi.rcMonitor.right - mi.rcMonitor.left;
 | 
			
		||||
        fullHeight = mi.rcMonitor.bottom - mi.rcMonitor.top;
 | 
			
		||||
        frameX = mi.rcMonitor.left;
 | 
			
		||||
        frameY = mi.rcMonitor.top;
 | 
			
		||||
        frameWidth  = mi.rcMonitor.right - mi.rcMonitor.left;
 | 
			
		||||
        frameHeight = mi.rcMonitor.bottom - mi.rcMonitor.top;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
@ -1338,17 +1328,17 @@ static int createNativeWindow(_GLFWwindow* window,
 | 
			
		||||
 | 
			
		||||
        if (wndconfig->xpos == GLFW_ANY_POSITION && wndconfig->ypos == GLFW_ANY_POSITION)
 | 
			
		||||
        {
 | 
			
		||||
            xpos = CW_USEDEFAULT;
 | 
			
		||||
            ypos = CW_USEDEFAULT;
 | 
			
		||||
            frameX = CW_USEDEFAULT;
 | 
			
		||||
            frameY = CW_USEDEFAULT;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            xpos = wndconfig->xpos + rect.left;
 | 
			
		||||
            ypos = wndconfig->ypos + rect.top;
 | 
			
		||||
            frameX = wndconfig->xpos + rect.left;
 | 
			
		||||
            frameY = wndconfig->ypos + rect.top;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fullWidth = rect.right - rect.left;
 | 
			
		||||
        fullHeight = rect.bottom - rect.top;
 | 
			
		||||
        frameWidth  = rect.right - rect.left;
 | 
			
		||||
        frameHeight = rect.bottom - rect.top;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wideTitle = _glfwCreateWideStringFromUTF8Win32(wndconfig->title);
 | 
			
		||||
@ -1359,8 +1349,8 @@ static int createNativeWindow(_GLFWwindow* window,
 | 
			
		||||
                                           MAKEINTATOM(_glfw.win32.mainWindowClass),
 | 
			
		||||
                                           wideTitle,
 | 
			
		||||
                                           style,
 | 
			
		||||
                                           xpos, ypos,
 | 
			
		||||
                                           fullWidth, fullHeight,
 | 
			
		||||
                                           frameX, frameY,
 | 
			
		||||
                                           frameWidth, frameHeight,
 | 
			
		||||
                                           NULL, // No parent window
 | 
			
		||||
                                           NULL, // No window menu
 | 
			
		||||
                                           _glfw.win32.instance,
 | 
			
		||||
@ -2567,3 +2557,5 @@ GLFWAPI HWND glfwGetWin32Window(GLFWwindow* handle)
 | 
			
		||||
    return window->win32.handle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WIN32
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WAYLAND)
 | 
			
		||||
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <linux/input.h>
 | 
			
		||||
@ -392,7 +394,7 @@ GLFWbool _glfwConnectWayland(int platformID, _GLFWplatform* platform)
 | 
			
		||||
        _glfwGetKeyScancodeWayland,
 | 
			
		||||
        _glfwSetClipboardStringWayland,
 | 
			
		||||
        _glfwGetClipboardStringWayland,
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
#if defined(_GLFW_LINUX_JOYSTICK)
 | 
			
		||||
        _glfwInitJoysticksLinux,
 | 
			
		||||
        _glfwTerminateJoysticksLinux,
 | 
			
		||||
        _glfwPollJoystickLinux,
 | 
			
		||||
@ -796,3 +798,5 @@ void _glfwTerminateWayland(void)
 | 
			
		||||
    _glfwTerminateDBusPOSIX();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WAYLAND
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WAYLAND)
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -270,3 +272,5 @@ GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* handle)
 | 
			
		||||
    return monitor->wl.output;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WAYLAND
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_WAYLAND)
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
@ -2979,3 +2981,5 @@ GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* handle)
 | 
			
		||||
    return window->wl.surface;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WAYLAND
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_X11)
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
@ -1182,7 +1184,7 @@ GLFWbool _glfwConnectX11(int platformID, _GLFWplatform* platform)
 | 
			
		||||
        _glfwGetKeyScancodeX11,
 | 
			
		||||
        _glfwSetClipboardStringX11,
 | 
			
		||||
        _glfwGetClipboardStringX11,
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
#if defined(_GLFW_LINUX_JOYSTICK)
 | 
			
		||||
        _glfwInitJoysticksLinux,
 | 
			
		||||
        _glfwTerminateJoysticksLinux,
 | 
			
		||||
        _glfwPollJoystickLinux,
 | 
			
		||||
@ -1657,3 +1659,5 @@ void _glfwTerminateX11(void)
 | 
			
		||||
    _glfwTerminateDBusPOSIX();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_X11
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_X11)
 | 
			
		||||
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -614,3 +616,5 @@ GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* handle)
 | 
			
		||||
    return monitor->x11.output;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_X11
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,8 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_X11)
 | 
			
		||||
 | 
			
		||||
#include <X11/cursorfont.h>
 | 
			
		||||
#include <X11/Xmd.h>
 | 
			
		||||
 | 
			
		||||
@ -86,7 +88,7 @@ static GLFWbool waitForAnyEvent(double* timeout)
 | 
			
		||||
        { _glfw.x11.emptyEventPipe[0], POLLIN }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
#if defined(_GLFW_LINUX_JOYSTICK)
 | 
			
		||||
    if (_glfw.joysticksInitialized)
 | 
			
		||||
        fds[count++] = (struct pollfd) { _glfw.linjs.inotify, POLLIN };
 | 
			
		||||
#endif
 | 
			
		||||
@ -2873,7 +2875,7 @@ void _glfwPollEventsX11(void)
 | 
			
		||||
{
 | 
			
		||||
    drainEmptyEvents();
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
#if defined(_GLFW_LINUX_JOYSTICK)
 | 
			
		||||
    if (_glfw.joysticksInitialized)
 | 
			
		||||
        _glfwDetectJoystickConnectionLinux();
 | 
			
		||||
#endif
 | 
			
		||||
@ -3441,3 +3443,5 @@ GLFWAPI const char* glfwGetX11SelectionString(void)
 | 
			
		||||
    return getSelectionString(_glfw.x11.PRIMARY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_X11
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,6 +29,7 @@
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
 | 
			
		||||
#if defined(_GLFW_X11) || defined(_GLFW_WAYLAND)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Marcus: This code was originally written by Markus G. Kuhn.
 | 
			
		||||
@ -940,3 +941,5 @@ uint32_t _glfwKeySym2Unicode(unsigned int keysym)
 | 
			
		||||
    return GLFW_INVALID_CODEPOINT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // _GLFW_WAYLAND or _GLFW_X11
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user