mirror of
https://github.com/glfw/glfw.git
synced 2025-06-15 12:12:16 +00:00
commit
c1785ac48f
@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 2.8)
|
|||||||
|
|
||||||
set(GLFW_VERSION_MAJOR "3")
|
set(GLFW_VERSION_MAJOR "3")
|
||||||
set(GLFW_VERSION_MINOR "0")
|
set(GLFW_VERSION_MINOR "0")
|
||||||
set(GLFW_VERSION_PATCH "2")
|
set(GLFW_VERSION_PATCH "3")
|
||||||
set(GLFW_VERSION_EXTRA "")
|
set(GLFW_VERSION_EXTRA "")
|
||||||
set(GLFW_VERSION "${GLFW_VERSION_MAJOR}.${GLFW_VERSION_MINOR}")
|
set(GLFW_VERSION "${GLFW_VERSION_MAJOR}.${GLFW_VERSION_MINOR}")
|
||||||
set(GLFW_VERSION_FULL "${GLFW_VERSION}.${GLFW_VERSION_PATCH}${GLFW_VERSION_EXTRA}")
|
set(GLFW_VERSION_FULL "${GLFW_VERSION}.${GLFW_VERSION_PATCH}${GLFW_VERSION_EXTRA}")
|
||||||
@ -163,6 +163,13 @@ if (_GLFW_WIN32)
|
|||||||
if (GLFW_USE_OPTIMUS_HPG)
|
if (GLFW_USE_OPTIMUS_HPG)
|
||||||
set(_GLFW_USE_OPTIMUS_HPG 1)
|
set(_GLFW_USE_OPTIMUS_HPG 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# HACK: When building on MinGW, WINVER and UNICODE need to be defined before
|
||||||
|
# the inclusion of stddef.h (by glfw3.h), which is itself included before
|
||||||
|
# win32_platform.h. We define them here until a saner solution can be found
|
||||||
|
# NOTE: MinGW-w64 and Visual C++ do /not/ need this hack.
|
||||||
|
add_definitions(-DUNICODE)
|
||||||
|
add_definitions(-DWINVER=0x0501)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
@ -204,7 +211,13 @@ if (_GLFW_X11)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(APPEND glfw_INCLUDE_DIRS ${X11_Xinput_INCLUDE_PATH})
|
list(APPEND glfw_INCLUDE_DIRS ${X11_Xinput_INCLUDE_PATH})
|
||||||
list(APPEND glfw_LIBRARIES ${X11_Xinput_LIB})
|
|
||||||
|
if (X11_Xinput_LIB)
|
||||||
|
list(APPEND glfw_LIBRARIES ${X11_Xinput_LIB})
|
||||||
|
else()
|
||||||
|
# Backwards compatibility (bug in CMake 2.8.7)
|
||||||
|
list(APPEND glfw_LIBRARIES Xi)
|
||||||
|
endif()
|
||||||
set(GLFW_PKG_DEPS "${GLFW_PKG_DEPS} xi")
|
set(GLFW_PKG_DEPS "${GLFW_PKG_DEPS} xi")
|
||||||
|
|
||||||
# Check for Xf86VidMode (fallback gamma control)
|
# Check for Xf86VidMode (fallback gamma control)
|
||||||
|
49
README.md
49
README.md
@ -6,8 +6,9 @@ GLFW is a free, Open Source, portable library for OpenGL and OpenGL ES
|
|||||||
application development. It provides a simple, platform-independent API for
|
application development. It provides a simple, platform-independent API for
|
||||||
creating windows and contexts, reading input, handling events, etc.
|
creating windows and contexts, reading input, handling events, etc.
|
||||||
|
|
||||||
Version 3.0.2 is *not yet described*. As this is a patch release, there are no
|
Version 3.0.3 adds fixes for a number of bugs that together affect all supported
|
||||||
API changes.
|
platforms, most notably MinGW compilation issues and cursor mode issues on OS X.
|
||||||
|
As this is a patch release, there are no API changes.
|
||||||
|
|
||||||
If you are new to GLFW, you may find the
|
If you are new to GLFW, you may find the
|
||||||
[introductory tutorial](http://www.glfw.org/docs/latest/quick.html) for GLFW
|
[introductory tutorial](http://www.glfw.org/docs/latest/quick.html) for GLFW
|
||||||
@ -167,11 +168,15 @@ directory of bundled applications to the `Contents/Resources` directory.
|
|||||||
#### Windows specific options
|
#### Windows specific options
|
||||||
|
|
||||||
`USE_MSVC_RUNTIME_LIBRARY_DLL` determines whether to use the DLL version or the
|
`USE_MSVC_RUNTIME_LIBRARY_DLL` determines whether to use the DLL version or the
|
||||||
static library version of the Visual C++ runtime library.
|
static library version of the Visual C++ runtime library. If set to `ON`, the
|
||||||
|
DLL version of the Visual C++ library is used. It is recommended to set this to
|
||||||
|
`ON`, as this keeps the executable smaller and benefits from security and bug
|
||||||
|
fix updates of the Visual C++ runtime.
|
||||||
|
|
||||||
`GLFW_USE_DWM_SWAP_INTERVAL` determines whether the swap interval is set even
|
`GLFW_USE_DWM_SWAP_INTERVAL` determines whether the swap interval is set even
|
||||||
when DWM compositing is enabled. This can lead to severe jitter and is not
|
when DWM compositing is enabled. If this is `ON`, the swap interval is set even
|
||||||
usually recommended.
|
if DWM is enabled. It is recommended to set this to `OFF`, as doing otherwise
|
||||||
|
can lead to severe jitter.
|
||||||
|
|
||||||
`GLFW_USE_OPTIMUS_HPG` determines whether to export the `NvOptimusEnablement`
|
`GLFW_USE_OPTIMUS_HPG` determines whether to export the `NvOptimusEnablement`
|
||||||
symbol, which forces the use of the high-performance GPU on nVidia Optimus
|
symbol, which forces the use of the high-performance GPU on nVidia Optimus
|
||||||
@ -204,31 +209,13 @@ See the [GLFW documentation](http://www.glfw.org/docs/latest/).
|
|||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
- Bugfix: The `-Wall` flag was not used with Clang and other GCC compatibles
|
- [Win32] Bugfix: `_WIN32_WINNT` was not set to Windows XP or later
|
||||||
- Bugfix: The default for `GLFW_ALPHA_BITS` was set to zero
|
- [Win32] Bugfix: Legacy MinGW needs `WINVER` and `UNICODE` before `stddef.h`
|
||||||
- [Win32] Added `_GLFW_USE_DWM_SWAP_INTERVAL` for forcing the swap interval
|
- [Cocoa] Bugfix: Cursor was not visible in normal mode in full screen
|
||||||
to be set even when DWM compositing is enabled
|
- [Cocoa] Bugfix: Cursor was not actually hidden in hidden mode
|
||||||
- [Win32] Added support for forcing the use of the high-performance GPU
|
- [Cocoa] Bugfix: Cursor modes were not applied to inactive windows
|
||||||
on nVidia Optimus systems
|
- [X11] Bugfix: Events for mouse buttons 4 and above were not reported
|
||||||
- [Win32] Bugfix: The clipboard string was not freed on terminate
|
- [X11] Bugfix: CMake 2.8.7 does not set `X11_Xinput_LIB` even when found
|
||||||
- [Win32] Bugfix: Entry points for OpenGL 1.0 and 1.1 functions were not
|
|
||||||
returned by `glfwGetProcAddress`
|
|
||||||
- [Win32] Bugfix: The `user32` and `dwmapi` module handles were not freed on
|
|
||||||
library termination
|
|
||||||
- [Cocoa] Added support for precise scrolling deltas on OS X 10.7 and later
|
|
||||||
- [Cocoa] Enabled explicit creation of OpenGL 3.x and 4.x contexts as supported
|
|
||||||
by OS X 10.9
|
|
||||||
- [Cocoa] Bugfix: The clipboard string was not freed on terminate
|
|
||||||
- [Cocoa] Bugfix: Selectors were used that are not declared by the 10.6 SDK
|
|
||||||
- [Cocoa] Bugfix: The position set by `glfwSetWindowPos` was incorrect
|
|
||||||
- [X11] Bugfix: Override-redirect windows were resized to the desired instead
|
|
||||||
of the actual resolution of the selected video mode
|
|
||||||
- [X11] Bugfix: Screensaver override for full screen windows had a possible
|
|
||||||
race condition
|
|
||||||
- [X11] Bugfix: The reported window position did not account for the size of
|
|
||||||
the window frame on some WMs
|
|
||||||
- [X11] Bugfix: The original video mode of a monitor was overwritten by calls
|
|
||||||
to `glfwSetWindowSize`
|
|
||||||
|
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
@ -264,6 +251,7 @@ skills.
|
|||||||
- John Bartholomew
|
- John Bartholomew
|
||||||
- Niklas Behrens
|
- Niklas Behrens
|
||||||
- Niklas Bergström
|
- Niklas Bergström
|
||||||
|
- Doug Binks
|
||||||
- blanco
|
- blanco
|
||||||
- Lambert Clara
|
- Lambert Clara
|
||||||
- Noel Cower
|
- Noel Cower
|
||||||
@ -298,6 +286,7 @@ skills.
|
|||||||
- Bruce Mitchener
|
- Bruce Mitchener
|
||||||
- Jeff Molofee
|
- Jeff Molofee
|
||||||
- Jon Morton
|
- Jon Morton
|
||||||
|
- Pierre Moulon
|
||||||
- Julian Møller
|
- Julian Møller
|
||||||
- Ozzy
|
- Ozzy
|
||||||
- Peoro
|
- Peoro
|
||||||
|
@ -899,13 +899,13 @@ HTML_FILE_EXTENSION = .html
|
|||||||
# have to redo this when upgrading to a newer version of doxygen or when
|
# have to redo this when upgrading to a newer version of doxygen or when
|
||||||
# changing the value of configuration settings such as GENERATE_TREEVIEW!
|
# changing the value of configuration settings such as GENERATE_TREEVIEW!
|
||||||
|
|
||||||
HTML_HEADER =
|
HTML_HEADER = @GLFW_SOURCE_DIR@/docs/header.html
|
||||||
|
|
||||||
# The HTML_FOOTER tag can be used to specify a personal HTML footer for
|
# The HTML_FOOTER tag can be used to specify a personal HTML footer for
|
||||||
# each generated HTML page. If it is left blank doxygen will generate a
|
# each generated HTML page. If it is left blank doxygen will generate a
|
||||||
# standard footer.
|
# standard footer.
|
||||||
|
|
||||||
HTML_FOOTER =
|
HTML_FOOTER = @GLFW_SOURCE_DIR@/docs/footer.html
|
||||||
|
|
||||||
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
|
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
|
||||||
# style sheet that is used by each HTML page. It can be used to
|
# style sheet that is used by each HTML page. It can be used to
|
||||||
@ -924,7 +924,7 @@ HTML_STYLESHEET =
|
|||||||
# robust against future updates. Doxygen will copy the style sheet file to
|
# robust against future updates. Doxygen will copy the style sheet file to
|
||||||
# the output directory.
|
# the output directory.
|
||||||
|
|
||||||
HTML_EXTRA_STYLESHEET =
|
HTML_EXTRA_STYLESHEET = @GLFW_SOURCE_DIR@/docs/extra.css
|
||||||
|
|
||||||
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||||
# other source files which should be copied to the HTML output directory. Note
|
# other source files which should be copied to the HTML output directory. Note
|
||||||
|
312
docs/extra.css
Normal file
312
docs/extra.css
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
html {
|
||||||
|
background-color:hsl(0,0%,95%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.glfwheader {
|
||||||
|
font-size:16px;
|
||||||
|
height:64px;
|
||||||
|
max-width:920px;
|
||||||
|
margin:0em auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.glfwheader a#glfwhome {
|
||||||
|
line-height:64px;
|
||||||
|
padding-right:48pxpx;
|
||||||
|
float:left;
|
||||||
|
color:hsl(0,0%,40%);
|
||||||
|
font-size:2.5em;
|
||||||
|
background-image:url("http://www.glfw.org/css/arrow.png");
|
||||||
|
background-position:right top;
|
||||||
|
background-repeat:no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.glfwnavbar {
|
||||||
|
list-style-type:none;
|
||||||
|
margin-top:0px;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.glfwnavbar li {
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.glfwnavbar a,.glfwnavbar a:visited {
|
||||||
|
line-height:64px;
|
||||||
|
margin-left:2em;
|
||||||
|
display:block;
|
||||||
|
color:hsl(0,0%,40%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.glfwheader a#glfwhome,.glfwnavbar a,.glfwnavbar a:visited {
|
||||||
|
transition:all 0.35s ease 0s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#titlearea,address.footer {
|
||||||
|
color:hsl(0,0%,40%);
|
||||||
|
background-color:hsl(0,0%,95%);
|
||||||
|
border-bottom:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
address.footer {
|
||||||
|
text-align:center;
|
||||||
|
padding:2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#top {
|
||||||
|
background-color:hsl(0,0%,40%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div#navrow1,div#navrow2,div#navrow3,div#navrow4 {
|
||||||
|
background-color:hsl(0,0%,40%);
|
||||||
|
background-image:none;
|
||||||
|
max-width:920px;
|
||||||
|
margin:0em auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tablist {
|
||||||
|
min-width:700px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablist a,.tablist a:hover,.tablist li,.tablist li.current a {
|
||||||
|
background-image:none;
|
||||||
|
text-shadow:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablist a,.tablist a:visited {
|
||||||
|
color:hsl(0,0%,95%);
|
||||||
|
text-shadow:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tablist li.current a {
|
||||||
|
background:linear-gradient(to bottom,hsl(34,100%,60%) 0%,hsl(24,100%,50%) 100%);
|
||||||
|
box-shadow:inset 0px 0px 32px hsl(24,100%,50%);
|
||||||
|
text-shadow:0px -1px 1px hsl(24,100%,35%);
|
||||||
|
color:hsl(0,0%,100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.contents {
|
||||||
|
min-height:590px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.contents,div.header {
|
||||||
|
max-width:920px;
|
||||||
|
margin:0em auto;
|
||||||
|
padding:0em 2em 2em 2em;
|
||||||
|
background-color:hsl(0,0%,100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.header {
|
||||||
|
background-image:none;
|
||||||
|
border-bottom:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.doxtable th,dl.reflist dt,div.levels {
|
||||||
|
background:linear-gradient(to bottom,hsl(34,100%,60%) 0%,hsl(24,100%,50%) 100%);
|
||||||
|
box-shadow:inset 0px 0px 32px hsl(24,100%,50%);
|
||||||
|
text-shadow:0px -1px 1px hsl(24,100%,35%);
|
||||||
|
color:hsl(0,0%,100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.reflist dt a.el,div.levels span {
|
||||||
|
color:hsl(24,100%,50%);
|
||||||
|
padding:0.2em;
|
||||||
|
border-radius:4px;
|
||||||
|
background-color:hsl(24,100%,90%);
|
||||||
|
text-shadow:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.memproto,div.qindex,div.ah {
|
||||||
|
background:linear-gradient(to bottom,hsl(34,0%,95%) 0%,hsl(24,0%,90%) 100%);
|
||||||
|
box-shadow:inset 0px 0px 32px hsl(24,0%,90%);
|
||||||
|
text-shadow:0px 1px 1px hsl(24,0%,100%);
|
||||||
|
color:hsl(0,0%,10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.memproto a {
|
||||||
|
color:hsl(24,100%,50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.memproto td.paramname {
|
||||||
|
text-shadow:0px 1px 1px hsl(24,0%,100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.memproto,div.qindex,div.ah {
|
||||||
|
border:2px solid hsl(24,0%,90%);
|
||||||
|
border-radius:4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.memdoc {
|
||||||
|
background:none;
|
||||||
|
box-shadow:none;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.paramname {
|
||||||
|
color:hsl(24,100%,25%);
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.reflist dt {
|
||||||
|
border:2px solid hsl(24,100%,50%);
|
||||||
|
border-top-left-radius:4px;
|
||||||
|
border-top-right-radius:4px;
|
||||||
|
border-bottom:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.reflist dd {
|
||||||
|
border:2px solid hsl(24,100%,50%);
|
||||||
|
border-bottom-right-radius:4px;
|
||||||
|
border-bottom-left-radius:4px;
|
||||||
|
border-top:none;
|
||||||
|
background:none;
|
||||||
|
box-shadow:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.doxtable {
|
||||||
|
border-collapse:inherit;
|
||||||
|
border-spacing:0px;
|
||||||
|
border:2px solid hsl(24,100%,50%);
|
||||||
|
border-radius:4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.doxtable td,table.doxtable th {
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.even,.directory tr.even,table.doxtable tr:nth-child(even) {
|
||||||
|
background-color:hsl(0,0%,95%);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
color:hsl(0,0%,30%);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,h2,h2.groupheader,h3,div.toc h3,h4,h5,h6,strong,em {
|
||||||
|
color:hsl(0,0%,10%);
|
||||||
|
border-bottom:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a,a:hover,a:visited,a:visited:hover,a.el,a.el:visited,.glfwheader a#glfwhome:hover,.tablist a:hover {
|
||||||
|
color:hsl(24,100%,50%);
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mdescLeft,.mdescRight,.memItemLeft,.memItemRight {
|
||||||
|
background-color:hsl(0,0%,95%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.directory {
|
||||||
|
border-collapse:inherit;
|
||||||
|
border-spacing:0px;
|
||||||
|
border:2px solid hsl(24,100%,50%);
|
||||||
|
border-radius:4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory .levels span {
|
||||||
|
color:hsl(24,100%,50%);
|
||||||
|
padding:0.1em 0.5em;
|
||||||
|
margin:auto 0.25em;
|
||||||
|
border-radius:2px;
|
||||||
|
background-color:hsl(24,100%,90%);
|
||||||
|
text-shadow:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.memSeparator {
|
||||||
|
height:2px;
|
||||||
|
border:0px;
|
||||||
|
background:linear-gradient(to right,hsl(0,0%,95%) 0%,hsl(0,0%,85%) 50%,hsl(0,0%,95%) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.note,dl.pre,dl.post,dl.invariant {
|
||||||
|
background:linear-gradient(to bottom,hsl(103,80%,90%) 0%,hsl(103,80%,85%) 100%);
|
||||||
|
box-shadow:inset 0px 0px 32px hsl(103,40%,80%);
|
||||||
|
color:hsl(103,80%,10%);
|
||||||
|
border:2px solid hsl(103,40%,75%);
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.warning,dl.attention {
|
||||||
|
background:linear-gradient(to bottom,hsl(34,80%,90%) 0%,hsl(34,80%,85%) 100%);
|
||||||
|
box-shadow:inset 0px 0px 32px hsl(34,40%,80%);
|
||||||
|
color:hsl(34,80%,10%);
|
||||||
|
border:2px solid hsl(34,40%,75%);
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.deprecated,dl.bug {
|
||||||
|
background:linear-gradient(to bottom,hsl(333,80%,90%) 0%,hsl(333,80%,85%) 100%);
|
||||||
|
box-shadow:inset 0px 0px 32px hsl(333,40%,80%);
|
||||||
|
color:hsl(333,80%,10%);
|
||||||
|
border:2px solid hsl(333,40%,75%);
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.todo,dl.test {
|
||||||
|
background:linear-gradient(to bottom,hsl(200,80%,90%) 0%,hsl(200,80%,85%) 100%);
|
||||||
|
box-shadow:inset 0px 0px 32px hsl(200,40%,80%);
|
||||||
|
color:hsl(200,80%,10%);
|
||||||
|
border:2px solid hsl(200,40%,75%);
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.note,dl.pre,dl.post,dl.invariant,dl.warning,dl.attention,dl.deprecated,dl.bug,dl.todo,dl.test {
|
||||||
|
border-radius:4px;
|
||||||
|
padding:1em;
|
||||||
|
text-shadow:0px 1px 1px hsl(0,0%,100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc {
|
||||||
|
background:linear-gradient(to bottom,hsl(34,0%,95%) 0%,hsl(24,0%,90%) 100%);
|
||||||
|
box-shadow:inset 0px 0px 32px hsl(24,0%,90%);
|
||||||
|
text-shadow:0px 1px 1px hsl(24,0%,100%);
|
||||||
|
color:hsl(0,0%,10%);
|
||||||
|
border:2px solid hsl(24,0%,90%);
|
||||||
|
border-radius:4px;
|
||||||
|
float:none;
|
||||||
|
width:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc h3 {
|
||||||
|
font-size:1.17em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc ul {
|
||||||
|
padding-left:1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toc li {
|
||||||
|
background:none;
|
||||||
|
font-size:1em;
|
||||||
|
padding-left:0em;
|
||||||
|
list-style-type:disc;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ah {
|
||||||
|
background-image:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.fragment,pre.fragment {
|
||||||
|
background-color:hsl(0,0%,20%);
|
||||||
|
border-radius:4px;
|
||||||
|
border-width:0px;
|
||||||
|
padding:0.5em 2em;
|
||||||
|
overflow:auto;
|
||||||
|
border-left:4px solid hsl(0,0%,80%);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.line,pre.fragment {
|
||||||
|
color:hsl(60,30%,96%);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.code,a.code:visited,span.preprocessor,span.comment {
|
||||||
|
color:hsl(80,76%,53%);
|
||||||
|
}
|
||||||
|
|
||||||
|
span.keyword,span.keywordtype,span.keywordflow {
|
||||||
|
color:hsl(190,81%,67%);
|
||||||
|
}
|
||||||
|
|
||||||
|
span.stringliteral {
|
||||||
|
color:hsl(54,70%,68%);
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background-color:hsl(0,0%,95%);
|
||||||
|
padding:0.1em;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
7
docs/footer.html
Normal file
7
docs/footer.html
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<address class="footer">
|
||||||
|
<p>
|
||||||
|
Last update on $date for $projectname $projectnumber
|
||||||
|
</p>
|
||||||
|
</address>
|
||||||
|
</body>
|
||||||
|
</html>
|
34
docs/header.html
Normal file
34
docs/header.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen $doxygenversion"/>
|
||||||
|
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
|
||||||
|
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
|
||||||
|
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="$relpath^jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="$relpath^dynsections.js"></script>
|
||||||
|
$treeview
|
||||||
|
$search
|
||||||
|
$mathjax
|
||||||
|
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
|
||||||
|
$extrastylesheet
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
|
||||||
|
<!--BEGIN TITLEAREA-->
|
||||||
|
<div id="titlearea">
|
||||||
|
<div class="glfwheader">
|
||||||
|
<a href="http://www.glfw.org/index.html" id="glfwhome">GLFW</a>
|
||||||
|
<ul class="glfwnavbar">
|
||||||
|
<li><a href="http://www.glfw.org/documentation.html">Documentation</a></li>
|
||||||
|
<li><a href="http://www.glfw.org/download.html">Download</a></li>
|
||||||
|
<li><a href="http://www.glfw.org/media.html">Media</a></li>
|
||||||
|
<li><a href="http://www.glfw.org/community.html">Community</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--END TITLEAREA-->
|
||||||
|
<!-- end header part -->
|
@ -133,10 +133,38 @@ extern "C" {
|
|||||||
|
|
||||||
/* Most GL/glu.h variants on Windows need wchar_t
|
/* Most GL/glu.h variants on Windows need wchar_t
|
||||||
* OpenGL/gl.h blocks the definition of ptrdiff_t by glext.h on OS X */
|
* OpenGL/gl.h blocks the definition of ptrdiff_t by glext.h on OS X */
|
||||||
#include <stddef.h>
|
#if !defined(GLFW_INCLUDE_NONE)
|
||||||
|
#include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Include the chosen client API headers.
|
||||||
/* ---------------- GLFW related system specific defines ----------------- */
|
*/
|
||||||
|
#if defined(__APPLE_CC__)
|
||||||
|
#if defined(GLFW_INCLUDE_GLCOREARB)
|
||||||
|
#include <OpenGL/gl3.h>
|
||||||
|
#elif !defined(GLFW_INCLUDE_NONE)
|
||||||
|
#define GL_GLEXT_LEGACY
|
||||||
|
#include <OpenGL/gl.h>
|
||||||
|
#endif
|
||||||
|
#if defined(GLFW_INCLUDE_GLU)
|
||||||
|
#include <OpenGL/glu.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if defined(GLFW_INCLUDE_GLCOREARB)
|
||||||
|
#include <GL/glcorearb.h>
|
||||||
|
#elif defined(GLFW_INCLUDE_ES1)
|
||||||
|
#include <GLES/gl.h>
|
||||||
|
#elif defined(GLFW_INCLUDE_ES2)
|
||||||
|
#include <GLES2/gl2.h>
|
||||||
|
#elif defined(GLFW_INCLUDE_ES3)
|
||||||
|
#include <GLES3/gl3.h>
|
||||||
|
#elif !defined(GLFW_INCLUDE_NONE)
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#endif
|
||||||
|
#if defined(GLFW_INCLUDE_GLU)
|
||||||
|
#include <GL/glu.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL)
|
#if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL)
|
||||||
/* GLFW_DLL is defined by users of GLFW when compiling programs that will link
|
/* GLFW_DLL is defined by users of GLFW when compiling programs that will link
|
||||||
@ -173,35 +201,6 @@ extern "C" {
|
|||||||
|
|
||||||
/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */
|
/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */
|
||||||
|
|
||||||
/* Include the chosen client API headers.
|
|
||||||
*/
|
|
||||||
#if defined(__APPLE_CC__)
|
|
||||||
#if defined(GLFW_INCLUDE_GLCOREARB)
|
|
||||||
#include <OpenGL/gl3.h>
|
|
||||||
#elif !defined(GLFW_INCLUDE_NONE)
|
|
||||||
#define GL_GLEXT_LEGACY
|
|
||||||
#include <OpenGL/gl.h>
|
|
||||||
#endif
|
|
||||||
#if defined(GLFW_INCLUDE_GLU)
|
|
||||||
#include <OpenGL/glu.h>
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#if defined(GLFW_INCLUDE_GLCOREARB)
|
|
||||||
#include <GL/glcorearb.h>
|
|
||||||
#elif defined(GLFW_INCLUDE_ES1)
|
|
||||||
#include <GLES/gl.h>
|
|
||||||
#elif defined(GLFW_INCLUDE_ES2)
|
|
||||||
#include <GLES2/gl2.h>
|
|
||||||
#elif defined(GLFW_INCLUDE_ES3)
|
|
||||||
#include <GLES3/gl3.h>
|
|
||||||
#elif !defined(GLFW_INCLUDE_NONE)
|
|
||||||
#include <GL/gl.h>
|
|
||||||
#endif
|
|
||||||
#if defined(GLFW_INCLUDE_GLU)
|
|
||||||
#include <GL/glu.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* GLFW API tokens
|
* GLFW API tokens
|
||||||
@ -228,7 +227,7 @@ extern "C" {
|
|||||||
* API changes.
|
* API changes.
|
||||||
* @ingroup init
|
* @ingroup init
|
||||||
*/
|
*/
|
||||||
#define GLFW_VERSION_REVISION 2
|
#define GLFW_VERSION_REVISION 3
|
||||||
/*! @} */
|
/*! @} */
|
||||||
|
|
||||||
/*! @name Key and button actions
|
/*! @name Key and button actions
|
||||||
@ -793,7 +792,7 @@ typedef void (* GLFWmonitorfun)(GLFWmonitor*,int);
|
|||||||
*
|
*
|
||||||
* @ingroup monitor
|
* @ingroup monitor
|
||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct GLFWvidmode
|
||||||
{
|
{
|
||||||
/*! The width, in screen coordinates, of the video mode.
|
/*! The width, in screen coordinates, of the video mode.
|
||||||
*/
|
*/
|
||||||
@ -823,7 +822,7 @@ typedef struct
|
|||||||
*
|
*
|
||||||
* @ingroup monitor
|
* @ingroup monitor
|
||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct GLFWgammaramp
|
||||||
{
|
{
|
||||||
/*! An array of value describing the response of the red channel.
|
/*! An array of value describing the response of the red channel.
|
||||||
*/
|
*/
|
||||||
@ -1244,6 +1243,10 @@ GLFWAPI void glfwWindowHint(int target, int hint);
|
|||||||
* information from the application's bundle. For more information on bundles,
|
* information from the application's bundle. For more information on bundles,
|
||||||
* see the Bundle Programming Guide provided by Apple.
|
* see the Bundle Programming Guide provided by Apple.
|
||||||
*
|
*
|
||||||
|
* @remarks The swap interval is not set during window creation, but is left at
|
||||||
|
* the default value for that platform. For more information, see @ref
|
||||||
|
* glfwSwapInterval.
|
||||||
|
*
|
||||||
* @note This function may only be called from the main thread.
|
* @note This function may only be called from the main thread.
|
||||||
*
|
*
|
||||||
* @sa glfwDestroyWindow
|
* @sa glfwDestroyWindow
|
||||||
@ -1854,9 +1857,9 @@ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos);
|
|||||||
*
|
*
|
||||||
* @param[in] window The desired window.
|
* @param[in] window The desired window.
|
||||||
* @param[in] xpos The desired x-coordinate, relative to the left edge of the
|
* @param[in] xpos The desired x-coordinate, relative to the left edge of the
|
||||||
* client area, or `NULL`.
|
* client area.
|
||||||
* @param[in] ypos The desired y-coordinate, relative to the top edge of the
|
* @param[in] ypos The desired y-coordinate, relative to the top edge of the
|
||||||
* client area, or `NULL`.
|
* client area.
|
||||||
*
|
*
|
||||||
* @sa glfwGetCursorPos
|
* @sa glfwGetCursorPos
|
||||||
*
|
*
|
||||||
@ -2202,6 +2205,11 @@ GLFWAPI void glfwSwapBuffers(GLFWwindow* window);
|
|||||||
*
|
*
|
||||||
* @remarks This function may be called from secondary threads.
|
* @remarks This function may be called from secondary threads.
|
||||||
*
|
*
|
||||||
|
* @note This function is not called during window creation, leaving the swap
|
||||||
|
* interval set to whatever is the default on that platform. This is done
|
||||||
|
* because some swap interval extensions used by GLFW do not allow the swap
|
||||||
|
* interval to be reset to zero once it has been set to a non-zero value.
|
||||||
|
*
|
||||||
* @note Some GPU drivers do not honor the requested swap interval, either
|
* @note Some GPU drivers do not honor the requested swap interval, either
|
||||||
* because of user settings that override the request or due to bugs in the
|
* because of user settings that override the request or due to bugs in the
|
||||||
* driver.
|
* driver.
|
||||||
|
@ -105,8 +105,6 @@ typedef struct _GLFWlibraryNS
|
|||||||
id autoreleasePool;
|
id autoreleasePool;
|
||||||
id cursor;
|
id cursor;
|
||||||
|
|
||||||
GLboolean cursorHidden;
|
|
||||||
|
|
||||||
char* clipboardString;
|
char* clipboardString;
|
||||||
|
|
||||||
_GLFWjoy joysticks[GLFW_JOYSTICK_LAST + 1];
|
_GLFWjoy joysticks[GLFW_JOYSTICK_LAST + 1];
|
||||||
|
@ -30,6 +30,25 @@
|
|||||||
#include <crt_externs.h>
|
#include <crt_externs.h>
|
||||||
|
|
||||||
|
|
||||||
|
// Center the cursor in the view of the window
|
||||||
|
//
|
||||||
|
static void centerCursor(_GLFWwindow *window)
|
||||||
|
{
|
||||||
|
int width, height;
|
||||||
|
_glfwPlatformGetWindowSize(window, &width, &height);
|
||||||
|
_glfwPlatformSetCursorPos(window, width / 2.0, height / 2.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the cursor to match the specified cursor mode
|
||||||
|
//
|
||||||
|
static void setModeCursor(_GLFWwindow* window, int mode)
|
||||||
|
{
|
||||||
|
if (mode == GLFW_CURSOR_NORMAL)
|
||||||
|
[[NSCursor arrowCursor] set];
|
||||||
|
else
|
||||||
|
[(NSCursor*) _glfw.ns.cursor set];
|
||||||
|
}
|
||||||
|
|
||||||
// Enter fullscreen mode
|
// Enter fullscreen mode
|
||||||
//
|
//
|
||||||
static void enterFullscreenMode(_GLFWwindow* window)
|
static void enterFullscreenMode(_GLFWwindow* window)
|
||||||
@ -94,13 +113,6 @@ static NSRect convertRectToBacking(_GLFWwindow* window, NSRect contentRect)
|
|||||||
|
|
||||||
@implementation GLFWWindowDelegate
|
@implementation GLFWWindowDelegate
|
||||||
|
|
||||||
static void centerCursor(_GLFWwindow *window)
|
|
||||||
{
|
|
||||||
int width, height;
|
|
||||||
_glfwPlatformGetWindowSize(window, &width, &height);
|
|
||||||
_glfwPlatformSetCursorPos(window, width / 2.0, height / 2.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)initWithGlfwWindow:(_GLFWwindow *)initWindow
|
- (id)initWithGlfwWindow:(_GLFWwindow *)initWindow
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
@ -159,14 +171,13 @@ static void centerCursor(_GLFWwindow *window)
|
|||||||
- (void)windowDidBecomeKey:(NSNotification *)notification
|
- (void)windowDidBecomeKey:(NSNotification *)notification
|
||||||
{
|
{
|
||||||
_glfwInputWindowFocus(window, GL_TRUE);
|
_glfwInputWindowFocus(window, GL_TRUE);
|
||||||
|
_glfwPlatformSetCursorMode(window, window->cursorMode);
|
||||||
if (window->cursorMode == GLFW_CURSOR_DISABLED)
|
|
||||||
centerCursor(window);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)windowDidResignKey:(NSNotification *)notification
|
- (void)windowDidResignKey:(NSNotification *)notification
|
||||||
{
|
{
|
||||||
_glfwInputWindowFocus(window, GL_FALSE);
|
_glfwInputWindowFocus(window, GL_FALSE);
|
||||||
|
_glfwPlatformSetCursorMode(window, GLFW_CURSOR_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@ -445,6 +456,11 @@ static int translateKey(unsigned int key)
|
|||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)cursorUpdate:(NSEvent *)event
|
||||||
|
{
|
||||||
|
setModeCursor(window, window->cursorMode);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)mouseDown:(NSEvent *)event
|
- (void)mouseDown:(NSEvent *)event
|
||||||
{
|
{
|
||||||
_glfwInputMouseClick(window,
|
_glfwInputMouseClick(window,
|
||||||
@ -548,7 +564,8 @@ static int translateKey(unsigned int key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited |
|
NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited |
|
||||||
NSTrackingActiveAlways |
|
NSTrackingActiveInKeyWindow |
|
||||||
|
NSTrackingCursorUpdate |
|
||||||
NSTrackingInVisibleRect;
|
NSTrackingInVisibleRect;
|
||||||
|
|
||||||
trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
|
trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
|
||||||
@ -566,9 +583,6 @@ static int translateKey(unsigned int key)
|
|||||||
const int mods = translateFlags([event modifierFlags]);
|
const int mods = translateFlags([event modifierFlags]);
|
||||||
_glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods);
|
_glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods);
|
||||||
|
|
||||||
if (mods & GLFW_MOD_SUPER)
|
|
||||||
return;
|
|
||||||
|
|
||||||
NSString* characters = [event characters];
|
NSString* characters = [event characters];
|
||||||
NSUInteger i, length = [characters length];
|
NSUInteger i, length = [characters length];
|
||||||
|
|
||||||
@ -628,12 +642,6 @@ static int translateKey(unsigned int key)
|
|||||||
_glfwInputScroll(window, deltaX, deltaY);
|
_glfwInputScroll(window, deltaX, deltaY);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)resetCursorRects
|
|
||||||
{
|
|
||||||
[self discardCursorRects];
|
|
||||||
[self addCursorRect:[self bounds] cursor:_glfw.ns.cursor];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
@ -762,7 +770,7 @@ static void createMenuBar(void)
|
|||||||
[NSApp setWindowsMenu:windowMenu];
|
[NSApp setWindowsMenu:windowMenu];
|
||||||
[windowMenuItem setSubmenu:windowMenu];
|
[windowMenuItem setSubmenu:windowMenu];
|
||||||
|
|
||||||
[windowMenu addItemWithTitle:@"Miniaturize"
|
[windowMenu addItemWithTitle:@"Minimize"
|
||||||
action:@selector(performMiniaturize:)
|
action:@selector(performMiniaturize:)
|
||||||
keyEquivalent:@"m"];
|
keyEquivalent:@"m"];
|
||||||
[windowMenu addItemWithTitle:@"Zoom"
|
[windowMenu addItemWithTitle:@"Zoom"
|
||||||
@ -851,7 +859,6 @@ static GLboolean createWindow(_GLFWwindow* window,
|
|||||||
[window->ns.object setContentView:window->ns.view];
|
[window->ns.object setContentView:window->ns.view];
|
||||||
[window->ns.object setDelegate:window->ns.delegate];
|
[window->ns.object setDelegate:window->ns.delegate];
|
||||||
[window->ns.object setAcceptsMouseMovedEvents:YES];
|
[window->ns.object setAcceptsMouseMovedEvents:YES];
|
||||||
[window->ns.object disableCursorRects];
|
|
||||||
[window->ns.object center];
|
[window->ns.object center];
|
||||||
|
|
||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
|
||||||
@ -1061,37 +1068,15 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y)
|
|||||||
|
|
||||||
void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
|
void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
|
||||||
{
|
{
|
||||||
if (mode == GLFW_CURSOR_HIDDEN)
|
setModeCursor(window, mode);
|
||||||
{
|
|
||||||
[window->ns.object enableCursorRects];
|
|
||||||
[window->ns.object invalidateCursorRectsForView:window->ns.view];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[window->ns.object disableCursorRects];
|
|
||||||
[window->ns.object invalidateCursorRectsForView:window->ns.view];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode == GLFW_CURSOR_DISABLED)
|
if (mode == GLFW_CURSOR_DISABLED)
|
||||||
{
|
{
|
||||||
CGAssociateMouseAndMouseCursorPosition(false);
|
CGAssociateMouseAndMouseCursorPosition(false);
|
||||||
|
centerCursor(window);
|
||||||
if (!_glfw.ns.cursorHidden)
|
|
||||||
{
|
|
||||||
[NSCursor hide];
|
|
||||||
_glfw.ns.cursorHidden = GL_TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
CGAssociateMouseAndMouseCursorPosition(true);
|
CGAssociateMouseAndMouseCursorPosition(true);
|
||||||
|
|
||||||
if (_glfw.ns.cursorHidden)
|
|
||||||
{
|
|
||||||
[NSCursor unhide];
|
|
||||||
_glfw.ns.cursorHidden = GL_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -386,7 +386,7 @@ int _glfwCreateContext(_GLFWwindow* window,
|
|||||||
!_glfw.glx.ARB_create_context_profile ||
|
!_glfw.glx.ARB_create_context_profile ||
|
||||||
!_glfw.glx.EXT_create_context_es2_profile)
|
!_glfw.glx.EXT_create_context_es2_profile)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
_glfwInputError(GLFW_API_UNAVAILABLE,
|
||||||
"GLX: OpenGL ES requested but "
|
"GLX: OpenGL ES requested but "
|
||||||
"GLX_EXT_create_context_es2_profile is unavailable");
|
"GLX_EXT_create_context_es2_profile is unavailable");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
|
@ -130,7 +130,7 @@ GLFWAPI int glfwInit(void)
|
|||||||
_glfw.monitors = _glfwPlatformGetMonitors(&_glfw.monitorCount);
|
_glfw.monitors = _glfwPlatformGetMonitors(&_glfw.monitorCount);
|
||||||
if (_glfw.monitors == NULL)
|
if (_glfw.monitors == NULL)
|
||||||
{
|
{
|
||||||
_glfwErrorCallback(GLFW_PLATFORM_ERROR, "No monitors found");
|
_glfwInputError(GLFW_PLATFORM_ERROR, "No monitors found");
|
||||||
_glfwPlatformTerminate();
|
_glfwPlatformTerminate();
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ int _glfwInitContextAPI(void)
|
|||||||
if (pthread_key_create(&_glfw.nsgl.current, NULL) != 0)
|
if (pthread_key_create(&_glfw.nsgl.current, NULL) != 0)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_PLATFORM_ERROR,
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|
||||||
"NSOpenGL: Failed to create context TLS");
|
"NSGL: Failed to create context TLS");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,16 +81,15 @@ int _glfwCreateContext(_GLFWwindow* window,
|
|||||||
if (wndconfig->clientAPI == GLFW_OPENGL_ES_API)
|
if (wndconfig->clientAPI == GLFW_OPENGL_ES_API)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
||||||
"NSOpenGL: This API does not support OpenGL ES");
|
"NSGL: This API does not support OpenGL ES");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
|
||||||
// Fail if any OpenGL version above 2.1 other than 3.2 was requested
|
|
||||||
if (wndconfig->glMajor == 3 && wndconfig->glMinor < 2)
|
if (wndconfig->glMajor == 3 && wndconfig->glMinor < 2)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
||||||
"NSOpenGL: The targeted version of OS X does not "
|
"NSGL: The targeted version of OS X does not "
|
||||||
"support OpenGL 3.0 or 3.1");
|
"support OpenGL 3.0 or 3.1");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
@ -100,7 +99,7 @@ int _glfwCreateContext(_GLFWwindow* window,
|
|||||||
if (!wndconfig->glForward)
|
if (!wndconfig->glForward)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
||||||
"NSOpenGL: The targeted version of OS X only "
|
"NSGL: The targeted version of OS X only "
|
||||||
"supports OpenGL 3.2 and later versions if they "
|
"supports OpenGL 3.2 and later versions if they "
|
||||||
"are forward-compatible");
|
"are forward-compatible");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
@ -109,7 +108,7 @@ int _glfwCreateContext(_GLFWwindow* window,
|
|||||||
if (wndconfig->glProfile != GLFW_OPENGL_CORE_PROFILE)
|
if (wndconfig->glProfile != GLFW_OPENGL_CORE_PROFILE)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
||||||
"NSOpenGL: The targeted version of OS X only "
|
"NSGL: The targeted version of OS X only "
|
||||||
"supports OpenGL 3.2 and later versions if they "
|
"supports OpenGL 3.2 and later versions if they "
|
||||||
"use the core profile");
|
"use the core profile");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
@ -120,7 +119,7 @@ int _glfwCreateContext(_GLFWwindow* window,
|
|||||||
if (wndconfig->glMajor > 2)
|
if (wndconfig->glMajor > 2)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
||||||
"NSOpenGL: The targeted version of OS X does not "
|
"NSGL: The targeted version of OS X does not "
|
||||||
"support OpenGL version 3.0 or above");
|
"support OpenGL version 3.0 or above");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
@ -130,7 +129,7 @@ int _glfwCreateContext(_GLFWwindow* window,
|
|||||||
if (wndconfig->glRobustness)
|
if (wndconfig->glRobustness)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
||||||
"NSOpenGL: OS X does not support OpenGL robustness "
|
"NSGL: OS X does not support OpenGL robustness "
|
||||||
"strategies");
|
"strategies");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
@ -191,7 +190,7 @@ int _glfwCreateContext(_GLFWwindow* window,
|
|||||||
if (window->nsgl.pixelFormat == nil)
|
if (window->nsgl.pixelFormat == nil)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_PLATFORM_ERROR,
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|
||||||
"NSOpenGL: Failed to create OpenGL pixel format");
|
"NSGL: Failed to create OpenGL pixel format");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,7 +205,7 @@ int _glfwCreateContext(_GLFWwindow* window,
|
|||||||
if (window->nsgl.context == nil)
|
if (window->nsgl.context == nil)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_PLATFORM_ERROR,
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|
||||||
"NSOpenGL: Failed to create OpenGL context");
|
"NSGL: Failed to create OpenGL context");
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -529,7 +529,7 @@ int _glfwAnalyzeContext(const _GLFWwindow* window,
|
|||||||
!window->wgl.ARB_create_context_profile ||
|
!window->wgl.ARB_create_context_profile ||
|
||||||
!window->wgl.EXT_create_context_es2_profile)
|
!window->wgl.EXT_create_context_es2_profile)
|
||||||
{
|
{
|
||||||
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
|
_glfwInputError(GLFW_API_UNAVAILABLE,
|
||||||
"WGL: OpenGL ES requested but "
|
"WGL: OpenGL ES requested but "
|
||||||
"WGL_ARB_create_context_es2_profile is unavailable");
|
"WGL_ARB_create_context_es2_profile is unavailable");
|
||||||
return _GLFW_RECREATION_IMPOSSIBLE;
|
return _GLFW_RECREATION_IMPOSSIBLE;
|
||||||
|
@ -52,10 +52,15 @@
|
|||||||
#define UNICODE
|
#define UNICODE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// GLFW requires Windows XP
|
// GLFW requires Windows XP or later
|
||||||
#ifndef WINVER
|
#if WINVER < 0x0501
|
||||||
|
#undef WINVER
|
||||||
#define WINVER 0x0501
|
#define WINVER 0x0501
|
||||||
#endif
|
#endif
|
||||||
|
#if _WIN32_WINNT < 0x0501
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0501
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
|
@ -480,6 +480,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case WM_CHAR:
|
case WM_CHAR:
|
||||||
|
case WM_SYSCHAR:
|
||||||
{
|
{
|
||||||
_glfwInputChar(window, (unsigned int) wParam);
|
_glfwInputChar(window, (unsigned int) wParam);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -48,7 +48,7 @@ static int translateKey(int keyCode)
|
|||||||
// Note: This way we always force "NumLock = ON", which is intentional
|
// Note: This way we always force "NumLock = ON", which is intentional
|
||||||
// since the returned key code should correspond to a physical
|
// since the returned key code should correspond to a physical
|
||||||
// location.
|
// location.
|
||||||
keySym = XkbKeycodeToKeysym(_glfw.x11.display, keyCode, 1, 0);
|
keySym = XkbKeycodeToKeysym(_glfw.x11.display, keyCode, 0, 1);
|
||||||
switch (keySym)
|
switch (keySym)
|
||||||
{
|
{
|
||||||
case XK_KP_0: return GLFW_KEY_KP_0;
|
case XK_KP_0: return GLFW_KEY_KP_0;
|
||||||
|
@ -513,15 +513,12 @@ static void processEvent(XEvent *event)
|
|||||||
{
|
{
|
||||||
const int key = translateKey(event->xkey.keycode);
|
const int key = translateKey(event->xkey.keycode);
|
||||||
const int mods = translateState(event->xkey.state);
|
const int mods = translateState(event->xkey.state);
|
||||||
|
const int character = translateChar(&event->xkey);
|
||||||
|
|
||||||
_glfwInputKey(window, key, event->xkey.keycode, GLFW_PRESS, mods);
|
_glfwInputKey(window, key, event->xkey.keycode, GLFW_PRESS, mods);
|
||||||
|
|
||||||
if (!(mods & GLFW_MOD_CONTROL) && !(mods & GLFW_MOD_ALT))
|
if (character != -1)
|
||||||
{
|
_glfwInputChar(window, character);
|
||||||
const int character = translateChar(&event->xkey);
|
|
||||||
if (character != -1)
|
|
||||||
_glfwInputChar(window, character);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -556,6 +553,16 @@ static void processEvent(XEvent *event)
|
|||||||
else if (event->xbutton.button == Button7)
|
else if (event->xbutton.button == Button7)
|
||||||
_glfwInputScroll(window, 1.0, 0.0);
|
_glfwInputScroll(window, 1.0, 0.0);
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Additional buttons after 7 are treated as regular buttons
|
||||||
|
// We subtract 4 to fill the gap left by scroll input above
|
||||||
|
_glfwInputMouseClick(window,
|
||||||
|
event->xbutton.button - 4,
|
||||||
|
GLFW_PRESS,
|
||||||
|
mods);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -584,6 +591,15 @@ static void processEvent(XEvent *event)
|
|||||||
GLFW_RELEASE,
|
GLFW_RELEASE,
|
||||||
mods);
|
mods);
|
||||||
}
|
}
|
||||||
|
else if (event->xbutton.button > Button7)
|
||||||
|
{
|
||||||
|
// Additional buttons after 7 are treated as regular buttons
|
||||||
|
// We subtract 4 to fill the gap left by scroll input above
|
||||||
|
_glfwInputMouseClick(window,
|
||||||
|
event->xbutton.button - 4,
|
||||||
|
GLFW_RELEASE,
|
||||||
|
mods);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user