Compare commits

...

16 Commits

Author SHA1 Message Date
Camilla Berglund fd4ea8bc25 Added description of 3.0.3 release. 2013-09-19 14:30:47 +02:00
Camilla Berglund d3f3e2d6c5 Removed unused flag. 2013-09-19 01:12:50 +02:00
Camilla Berglund 546c794321 Fixed OS X cursor bugs #3, #72 and #88. 2013-09-19 01:05:51 +02:00
Camilla Berglund d69796d9e0 Updated menu label for minimization. 2013-09-16 15:58:05 +02:00
Camilla Berglund 4ff8095dee Workaround for libXi and CMake 2.8.7. 2013-09-13 14:42:45 +02:00
Camilla Berglund 3415f3ccde Conditionally define API version macros. 2013-09-13 12:27:43 +02:00
Camilla Berglund 6770ae0556 Added workaround for legacy MinGW.
When building on legacy 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.
2013-09-13 12:26:55 +02:00
Camilla Berglund bb5581690d Documentation fixes for glfwSetCursorPos. 2013-09-09 23:31:59 +02:00
Camilla Berglund 57b8be1c24 Added support for mouse buttons 4-n. 2013-09-08 16:09:23 +02:00
Camilla Berglund c93b120252 Disabled stddef.h for GLFW_INCLUDE_NONE, cleanup. 2013-09-08 16:07:34 +02:00
Camilla Berglund 5cf8587269 Merge pull request #121 from Systemcluster/patch-1
Declared unnamed typedef structs as their types.
2013-09-03 04:51:29 -07:00
Camilla Berglund b998d4fe01 Fixed _WIN32_WINNT not being set to Windows XP. 2013-09-03 13:38:16 +02:00
Systemcluster d0a0e37b2b Declared unnamed typedef structs as their types
Without defining them as structs it was impossible to forward declare `GLFWgammaramp` and `GLFWvidmode`.
2013-08-29 06:15:55 +02:00
Camilla Berglund 3f74712540 Updated NSGL error tag. 2013-08-26 22:48:07 +02:00
Camilla Berglund 124bc392ab Removed stale comment. 2013-08-26 20:18:49 +02:00
Camilla Berglund 8c1588b14e Started 3.0.3. 2013-08-26 16:22:06 +02:00
8 changed files with 127 additions and 127 deletions
+15 -2
View File
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 2.8)
set(GLFW_VERSION_MAJOR "3")
set(GLFW_VERSION_MINOR "0")
set(GLFW_VERSION_PATCH "2")
set(GLFW_VERSION_PATCH "3")
set(GLFW_VERSION_EXTRA "")
set(GLFW_VERSION "${GLFW_VERSION_MAJOR}.${GLFW_VERSION_MINOR}")
set(GLFW_VERSION_FULL "${GLFW_VERSION}.${GLFW_VERSION_PATCH}${GLFW_VERSION_EXTRA}")
@@ -163,6 +163,13 @@ if (_GLFW_WIN32)
if (GLFW_USE_OPTIMUS_HPG)
set(_GLFW_USE_OPTIMUS_HPG 1)
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()
#--------------------------------------------------------------------
@@ -204,7 +211,13 @@ if (_GLFW_X11)
endif()
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")
# Check for Xf86VidMode (fallback gamma control)
+10 -31
View File
@@ -6,8 +6,8 @@ GLFW is a free, Open Source, portable library for OpenGL and OpenGL ES
application development. It provides a simple, platform-independent API for
creating windows and contexts, reading input, handling events, etc.
Version 3.0.2 adds support for OpenGL 4 on and precise scrolling deltas on OS
X and fixes for a number of bugs that together affect all supported platforms.
Version 3.0.3 adds fixes for a number of bugs that together affect all supported
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
@@ -205,35 +205,13 @@ See the [GLFW documentation](http://www.glfw.org/docs/latest/).
## Changelog
- Allowed character callback to be triggered regardless of modifier keys
- Bugfix: The `-Wall` flag was not used with Clang and other GCC compatibles
- Bugfix: The default for `GLFW_ALPHA_BITS` was set to zero
- Bugfix: `glfwInit` would segfault if monitor enumeration failed and no error
callback was set
- [Win32] Added `_GLFW_USE_DWM_SWAP_INTERVAL` for forcing the swap interval
to be set even when DWM compositing is enabled
- [Win32] Added support for forcing the use of the high-performance GPU
on nVidia Optimus systems
- [Win32] Bugfix: The clipboard string was not freed on terminate
- [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`
- [X11] Bugfix: Key release events for `GLFW_KEY_KP_5` were discarded.
- [Win32] Bugfix: `_WIN32_WINNT` was not set to Windows XP or later
- [Win32] Bugfix: Legacy MinGW needs `WINVER` and `UNICODE` before `stddef.h`
- [Cocoa] Bugfix: Cursor was not visible in normal mode in full screen
- [Cocoa] Bugfix: Cursor was not actually hidden in hidden mode
- [Cocoa] Bugfix: Cursor modes were not applied to inactive windows
- [X11] Bugfix: Events for mouse buttons 4 and above were not reported
- [X11] Bugfix: CMake 2.8.7 does not set `X11_Xinput_LIB` even when found
## Contact
@@ -304,6 +282,7 @@ skills.
- Bruce Mitchener
- Jeff Molofee
- Jon Morton
- Pierre Moulon
- Julian Møller
- Ozzy
- Peoro
+36 -37
View File
@@ -133,10 +133,38 @@ extern "C" {
/* 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 */
#include <stddef.h>
#if !defined(GLFW_INCLUDE_NONE)
#include <stddef.h>
#endif
/* ---------------- GLFW related system specific defines ----------------- */
/* 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
#if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL)
/* GLFW_DLL is defined by users of GLFW when compiling programs that will link
@@ -173,35 +201,6 @@ extern "C" {
/* -------------------- 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
@@ -228,7 +227,7 @@ extern "C" {
* API changes.
* @ingroup init
*/
#define GLFW_VERSION_REVISION 2
#define GLFW_VERSION_REVISION 3
/*! @} */
/*! @name Key and button actions
@@ -793,7 +792,7 @@ typedef void (* GLFWmonitorfun)(GLFWmonitor*,int);
*
* @ingroup monitor
*/
typedef struct
typedef struct GLFWvidmode
{
/*! The width, in screen coordinates, of the video mode.
*/
@@ -823,7 +822,7 @@ typedef struct
*
* @ingroup monitor
*/
typedef struct
typedef struct GLFWgammaramp
{
/*! An array of value describing the response of the red channel.
*/
@@ -1854,9 +1853,9 @@ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos);
*
* @param[in] window The desired window.
* @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
* client area, or `NULL`.
* client area.
*
* @sa glfwGetCursorPos
*
-2
View File
@@ -105,8 +105,6 @@ typedef struct _GLFWlibraryNS
id autoreleasePool;
id cursor;
GLboolean cursorHidden;
char* clipboardString;
_GLFWjoy joysticks[GLFW_JOYSTICK_LAST + 1];
+31 -43
View File
@@ -30,6 +30,25 @@
#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
//
static void enterFullscreenMode(_GLFWwindow* window)
@@ -94,13 +113,6 @@ static NSRect convertRectToBacking(_GLFWwindow* window, NSRect contentRect)
@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
{
self = [super init];
@@ -159,14 +171,13 @@ static void centerCursor(_GLFWwindow *window)
- (void)windowDidBecomeKey:(NSNotification *)notification
{
_glfwInputWindowFocus(window, GL_TRUE);
if (window->cursorMode == GLFW_CURSOR_DISABLED)
centerCursor(window);
_glfwPlatformSetCursorMode(window, window->cursorMode);
}
- (void)windowDidResignKey:(NSNotification *)notification
{
_glfwInputWindowFocus(window, GL_FALSE);
_glfwPlatformSetCursorMode(window, GLFW_CURSOR_NORMAL);
}
@end
@@ -445,6 +456,11 @@ static int translateKey(unsigned int key)
return YES;
}
- (void)cursorUpdate:(NSEvent *)event
{
setModeCursor(window, window->cursorMode);
}
- (void)mouseDown:(NSEvent *)event
{
_glfwInputMouseClick(window,
@@ -548,7 +564,8 @@ static int translateKey(unsigned int key)
}
NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited |
NSTrackingActiveAlways |
NSTrackingActiveInKeyWindow |
NSTrackingCursorUpdate |
NSTrackingInVisibleRect;
trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
@@ -625,12 +642,6 @@ static int translateKey(unsigned int key)
_glfwInputScroll(window, deltaX, deltaY);
}
- (void)resetCursorRects
{
[self discardCursorRects];
[self addCursorRect:[self bounds] cursor:_glfw.ns.cursor];
}
@end
@@ -759,7 +770,7 @@ static void createMenuBar(void)
[NSApp setWindowsMenu:windowMenu];
[windowMenuItem setSubmenu:windowMenu];
[windowMenu addItemWithTitle:@"Miniaturize"
[windowMenu addItemWithTitle:@"Minimize"
action:@selector(performMiniaturize:)
keyEquivalent:@"m"];
[windowMenu addItemWithTitle:@"Zoom"
@@ -848,7 +859,6 @@ static GLboolean createWindow(_GLFWwindow* window,
[window->ns.object setContentView:window->ns.view];
[window->ns.object setDelegate:window->ns.delegate];
[window->ns.object setAcceptsMouseMovedEvents:YES];
[window->ns.object disableCursorRects];
[window->ns.object center];
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
@@ -1058,37 +1068,15 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y)
void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
{
if (mode == GLFW_CURSOR_HIDDEN)
{
[window->ns.object enableCursorRects];
[window->ns.object invalidateCursorRectsForView:window->ns.view];
}
else
{
[window->ns.object disableCursorRects];
[window->ns.object invalidateCursorRectsForView:window->ns.view];
}
setModeCursor(window, mode);
if (mode == GLFW_CURSOR_DISABLED)
{
CGAssociateMouseAndMouseCursorPosition(false);
if (!_glfw.ns.cursorHidden)
{
[NSCursor hide];
_glfw.ns.cursorHidden = GL_TRUE;
}
centerCursor(window);
}
else
{
CGAssociateMouseAndMouseCursorPosition(true);
if (_glfw.ns.cursorHidden)
{
[NSCursor unhide];
_glfw.ns.cursorHidden = GL_FALSE;
}
}
}
+9 -10
View File
@@ -40,7 +40,7 @@ int _glfwInitContextAPI(void)
if (pthread_key_create(&_glfw.nsgl.current, NULL) != 0)
{
_glfwInputError(GLFW_PLATFORM_ERROR,
"NSOpenGL: Failed to create context TLS");
"NSGL: Failed to create context TLS");
return GL_FALSE;
}
@@ -81,16 +81,15 @@ int _glfwCreateContext(_GLFWwindow* window,
if (wndconfig->clientAPI == GLFW_OPENGL_ES_API)
{
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
"NSOpenGL: This API does not support OpenGL ES");
"NSGL: This API does not support OpenGL ES");
return GL_FALSE;
}
#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)
{
_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");
return GL_FALSE;
}
@@ -100,7 +99,7 @@ int _glfwCreateContext(_GLFWwindow* window,
if (!wndconfig->glForward)
{
_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 "
"are forward-compatible");
return GL_FALSE;
@@ -109,7 +108,7 @@ int _glfwCreateContext(_GLFWwindow* window,
if (wndconfig->glProfile != GLFW_OPENGL_CORE_PROFILE)
{
_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 "
"use the core profile");
return GL_FALSE;
@@ -120,7 +119,7 @@ int _glfwCreateContext(_GLFWwindow* window,
if (wndconfig->glMajor > 2)
{
_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");
return GL_FALSE;
}
@@ -130,7 +129,7 @@ int _glfwCreateContext(_GLFWwindow* window,
if (wndconfig->glRobustness)
{
_glfwInputError(GLFW_VERSION_UNAVAILABLE,
"NSOpenGL: OS X does not support OpenGL robustness "
"NSGL: OS X does not support OpenGL robustness "
"strategies");
return GL_FALSE;
}
@@ -191,7 +190,7 @@ int _glfwCreateContext(_GLFWwindow* window,
if (window->nsgl.pixelFormat == nil)
{
_glfwInputError(GLFW_PLATFORM_ERROR,
"NSOpenGL: Failed to create OpenGL pixel format");
"NSGL: Failed to create OpenGL pixel format");
return GL_FALSE;
}
@@ -206,7 +205,7 @@ int _glfwCreateContext(_GLFWwindow* window,
if (window->nsgl.context == nil)
{
_glfwInputError(GLFW_PLATFORM_ERROR,
"NSOpenGL: Failed to create OpenGL context");
"NSGL: Failed to create OpenGL context");
return GL_FALSE;
}
+7 -2
View File
@@ -52,10 +52,15 @@
#define UNICODE
#endif
// GLFW requires Windows XP
#ifndef WINVER
// GLFW requires Windows XP or later
#if WINVER < 0x0501
#undef WINVER
#define WINVER 0x0501
#endif
#if _WIN32_WINNT < 0x0501
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <windows.h>
#include <mmsystem.h>
+19
View File
@@ -553,6 +553,16 @@ static void processEvent(XEvent *event)
else if (event->xbutton.button == Button7)
_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;
}
@@ -581,6 +591,15 @@ static void processEvent(XEvent *event)
GLFW_RELEASE,
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;
}