1
0
Fork 0
mirror of https://github.com/gwm17/glfw.git synced 2024-11-27 04:28:52 -05:00

Merge branch 'master' of github.com:elmindreda/glfw

This commit is contained in:
Camilla Berglund 2012-03-28 21:58:13 +02:00
commit c9163e56d1
4 changed files with 59 additions and 37 deletions

View File

@ -3,10 +3,12 @@ include_directories(${GLFW_SOURCE_DIR}/src
${GLFW_BINARY_DIR}/src ${GLFW_BINARY_DIR}/src
${glfw_INCLUDE_DIRS}) ${glfw_INCLUDE_DIRS})
set(common_HEADERS ${GLFW_SOURCE_DIR}/include/GL/glfw3.h internal.h)
set(common_SOURCES error.c fullscreen.c gamma.c init.c input.c set(common_SOURCES error.c fullscreen.c gamma.c init.c input.c
joystick.c opengl.c time.c window.c) joystick.c opengl.c time.c window.c)
if (_GLFW_COCOA_NSGL) if (_GLFW_COCOA_NSGL)
set(glfw_HEADERS ${common_HEADERS} cocoa_platform.h)
set(glfw_SOURCES ${common_SOURCES} cocoa_fullscreen.m cocoa_gamma.c set(glfw_SOURCES ${common_SOURCES} cocoa_fullscreen.m cocoa_gamma.c
cocoa_init.m cocoa_input.m cocoa_joystick.m cocoa_init.m cocoa_input.m cocoa_joystick.m
cocoa_opengl.m cocoa_time.c cocoa_window.m) cocoa_opengl.m cocoa_time.c cocoa_window.m)
@ -14,18 +16,20 @@ if (_GLFW_COCOA_NSGL)
# For some reason, CMake doesn't know about .m # For some reason, CMake doesn't know about .m
set_source_files_properties(${glfw_SOURCES} PROPERTIES LANGUAGE C) set_source_files_properties(${glfw_SOURCES} PROPERTIES LANGUAGE C)
elseif (_GLFW_WIN32_WGL) elseif (_GLFW_WIN32_WGL)
set(glfw_HEADERS ${common_HEADERS} win32_platform.h)
set(glfw_SOURCES ${common_SOURCES} win32_fullscreen.c win32_gamma.c set(glfw_SOURCES ${common_SOURCES} win32_fullscreen.c win32_gamma.c
win32_init.c win32_input.c win32_joystick.c win32_init.c win32_input.c win32_joystick.c
win32_opengl.c win32_time.c win32_window.c win32_opengl.c win32_time.c win32_window.c
win32_dllmain.c) win32_dllmain.c)
elseif (_GLFW_X11_GLX) elseif (_GLFW_X11_GLX)
set(glfw_HEADERS ${common_HEADERS} x11_platform.h)
set(glfw_SOURCES ${common_SOURCES} x11_fullscreen.c x11_gamma.c set(glfw_SOURCES ${common_SOURCES} x11_fullscreen.c x11_gamma.c
x11_init.c x11_input.c x11_joystick.c x11_init.c x11_input.c x11_joystick.c
x11_keysym2unicode.c x11_opengl.c x11_time.c x11_keysym2unicode.c x11_opengl.c x11_time.c
x11_window.c) x11_window.c)
endif() endif()
add_library(glfw ${glfw_SOURCES}) add_library(glfw ${glfw_SOURCES} ${glfw_HEADERS})
if (BUILD_SHARED_LIBS) if (BUILD_SHARED_LIBS)

View File

@ -336,7 +336,12 @@ void _glfwInitJoysticks(void)
result = IOMasterPort(bootstrap_port, &masterPort); result = IOMasterPort(bootstrap_port, &masterPort);
hidMatchDictionary = IOServiceMatching(kIOHIDDeviceKey); hidMatchDictionary = IOServiceMatching(kIOHIDDeviceKey);
if (kIOReturnSuccess != result || !hidMatchDictionary) if (kIOReturnSuccess != result || !hidMatchDictionary)
{
if (hidMatchDictionary)
CFRelease(hidMatchDictionary);
return; return;
}
result = IOServiceGetMatchingServices(masterPort, result = IOServiceGetMatchingServices(masterPort,
hidMatchDictionary, hidMatchDictionary,
@ -370,19 +375,27 @@ void _glfwInitJoysticks(void)
/* Check device type */ /* Check device type */
refCF = CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDPrimaryUsagePageKey)); refCF = CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDPrimaryUsagePageKey));
if (refCF) if (refCF)
{
CFNumberGetValue(refCF, kCFNumberLongType, &usagePage); CFNumberGetValue(refCF, kCFNumberLongType, &usagePage);
if (usagePage != kHIDPage_GenericDesktop)
{
/* We are not interested in this device */
continue;
}
}
refCF = CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDPrimaryUsageKey)); refCF = CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDPrimaryUsageKey));
if (refCF) if (refCF)
{
CFNumberGetValue(refCF, kCFNumberLongType, &usage); CFNumberGetValue(refCF, kCFNumberLongType, &usage);
if ((usagePage != kHIDPage_GenericDesktop) || if ((usage != kHIDUsage_GD_Joystick &&
(usage != kHIDUsage_GD_Joystick && usage != kHIDUsage_GD_GamePad &&
usage != kHIDUsage_GD_GamePad && usage != kHIDUsage_GD_MultiAxisController))
usage != kHIDUsage_GD_MultiAxisController)) {
{ /* We are not interested in this device */
/* We don't interested in this device */ continue;
continue; }
} }
_glfwJoystick* joystick = &_glfwJoysticks[deviceCounter]; _glfwJoystick* joystick = &_glfwJoysticks[deviceCounter];

View File

@ -72,8 +72,9 @@ typedef struct _GLFWcontextNSGL
//------------------------------------------------------------------------ //------------------------------------------------------------------------
typedef struct _GLFWwindowNS typedef struct _GLFWwindowNS
{ {
id window; id object;
id delegate; id delegate;
id view;
unsigned int modifierFlags; unsigned int modifierFlags;
} _GLFWwindowNS; } _GLFWwindowNS;

View File

@ -69,7 +69,7 @@
[window->NSGL.context update]; [window->NSGL.context update];
NSRect contentRect = NSRect contentRect =
[window->NS.window contentRectForFrameRect:[window->NS.window frame]]; [window->NS.object contentRectForFrameRect:[window->NS.object frame]];
_glfwInputWindowSize(window, contentRect.size.width, contentRect.size.height); _glfwInputWindowSize(window, contentRect.size.width, contentRect.size.height);
} }
@ -79,7 +79,7 @@
[window->NSGL.context update]; [window->NSGL.context update];
NSRect contentRect = NSRect contentRect =
[window->NS.window contentRectForFrameRect:[window->NS.window frame]]; [window->NS.object contentRectForFrameRect:[window->NS.object frame]];
CGPoint mainScreenOrigin = CGDisplayBounds(CGMainDisplayID()).origin; CGPoint mainScreenOrigin = CGDisplayBounds(CGMainDisplayID()).origin;
double mainScreenHeight = CGDisplayBounds(CGMainDisplayID()).size.height; double mainScreenHeight = CGDisplayBounds(CGMainDisplayID()).size.height;
@ -360,7 +360,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
NSPoint p = [event locationInWindow]; NSPoint p = [event locationInWindow];
// Cocoa coordinate system has origin at lower left // Cocoa coordinate system has origin at lower left
p.y = [[window->NS.window contentView] bounds].size.height - p.y; p.y = [[window->NS.object contentView] bounds].size.height - p.y;
_glfwInputCursorMotion(window, p.x, p.y); _glfwInputCursorMotion(window, p.x, p.y);
} }
@ -667,25 +667,26 @@ static GLboolean createWindow(_GLFWwindow* window,
else else
styleMask = NSBorderlessWindowMask; styleMask = NSBorderlessWindowMask;
window->NS.window = [[NSWindow alloc] window->NS.object = [[NSWindow alloc]
initWithContentRect:NSMakeRect(0, 0, window->width, window->height) initWithContentRect:NSMakeRect(0, 0, window->width, window->height)
styleMask:styleMask styleMask:styleMask
backing:NSBackingStoreBuffered backing:NSBackingStoreBuffered
defer:NO]; defer:NO];
if (window->NS.window == nil) if (window->NS.object == nil)
{ {
_glfwSetError(GLFW_PLATFORM_ERROR, _glfwSetError(GLFW_PLATFORM_ERROR,
"Cocoa/NSOpenGL: Failed to create window"); "Cocoa/NSOpenGL: Failed to create window");
return GL_FALSE; return GL_FALSE;
} }
[window->NS.window setTitle:[NSString stringWithUTF8String:wndconfig->title]]; window->NS.view = [[GLFWContentView alloc] initWithGlfwWindow:window];
[window->NS.window setContentView:[[GLFWContentView alloc]
initWithGlfwWindow:window]]; [window->NS.object setTitle:[NSString stringWithUTF8String:wndconfig->title]];
[window->NS.window setDelegate:window->NS.delegate]; [window->NS.object setContentView:window->NS.view];
[window->NS.window setAcceptsMouseMovedEvents:YES]; [window->NS.object setDelegate:window->NS.delegate];
[window->NS.window center]; [window->NS.object setAcceptsMouseMovedEvents:YES];
[window->NS.object center];
return GL_TRUE; return GL_TRUE;
} }
@ -899,8 +900,8 @@ int _glfwPlatformOpenWindow(_GLFWwindow* window,
if (!createContext(window, wndconfig, fbconfig)) if (!createContext(window, wndconfig, fbconfig))
return GL_FALSE; return GL_FALSE;
[window->NS.window makeKeyAndOrderFront:nil]; [window->NS.object makeKeyAndOrderFront:nil];
[window->NSGL.context setView:[window->NS.window contentView]]; [window->NSGL.context setView:[window->NS.object contentView]];
if (wndconfig->mode == GLFW_FULLSCREEN) if (wndconfig->mode == GLFW_FULLSCREEN)
{ {
@ -914,7 +915,7 @@ int _glfwPlatformOpenWindow(_GLFWwindow* window,
return GL_FALSE; return GL_FALSE;
} }
[[window->NS.window contentView] enterFullScreenMode:[NSScreen mainScreen] [[window->NS.object contentView] enterFullScreenMode:[NSScreen mainScreen]
withOptions:nil]; withOptions:nil];
} }
@ -936,11 +937,11 @@ int _glfwPlatformOpenWindow(_GLFWwindow* window,
void _glfwPlatformCloseWindow(_GLFWwindow* window) void _glfwPlatformCloseWindow(_GLFWwindow* window)
{ {
[window->NS.window orderOut:nil]; [window->NS.object orderOut:nil];
if (window->mode == GLFW_FULLSCREEN) if (window->mode == GLFW_FULLSCREEN)
{ {
[[window->NS.window contentView] exitFullScreenModeWithOptions:nil]; [[window->NS.object contentView] exitFullScreenModeWithOptions:nil];
_glfwRestoreVideoMode(); _glfwRestoreVideoMode();
} }
@ -952,12 +953,15 @@ void _glfwPlatformCloseWindow(_GLFWwindow* window)
[window->NSGL.context release]; [window->NSGL.context release];
window->NSGL.context = nil; window->NSGL.context = nil;
[window->NS.window setDelegate:nil]; [window->NS.object setDelegate:nil];
[window->NS.delegate release]; [window->NS.delegate release];
window->NS.delegate = nil; window->NS.delegate = nil;
[window->NS.window close]; [window->NS.view release];
window->NS.window = nil; window->NS.view = nil;
[window->NS.object close];
window->NS.object = nil;
// TODO: Probably more cleanup // TODO: Probably more cleanup
} }
@ -969,7 +973,7 @@ void _glfwPlatformCloseWindow(_GLFWwindow* window)
void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char *title) void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char *title)
{ {
[window->NS.window setTitle:[NSString stringWithUTF8String:title]]; [window->NS.object setTitle:[NSString stringWithUTF8String:title]];
} }
@ -979,7 +983,7 @@ void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char *title)
void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height)
{ {
[window->NS.window setContentSize:NSMakeSize(width, height)]; [window->NS.object setContentSize:NSMakeSize(width, height)];
} }
@ -990,16 +994,16 @@ void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height)
void _glfwPlatformSetWindowPos(_GLFWwindow* window, int x, int y) void _glfwPlatformSetWindowPos(_GLFWwindow* window, int x, int y)
{ {
NSRect contentRect = NSRect contentRect =
[window->NS.window contentRectForFrameRect:[window->NS.window frame]]; [window->NS.object contentRectForFrameRect:[window->NS.object frame]];
// We assume here that the client code wants to position the window within the // We assume here that the client code wants to position the window within the
// screen the window currently occupies // screen the window currently occupies
NSRect screenRect = [[window->NS.window screen] visibleFrame]; NSRect screenRect = [[window->NS.object screen] visibleFrame];
contentRect.origin = NSMakePoint(screenRect.origin.x + x, contentRect.origin = NSMakePoint(screenRect.origin.x + x,
screenRect.origin.y + screenRect.size.height - screenRect.origin.y + screenRect.size.height -
y - contentRect.size.height); y - contentRect.size.height);
[window->NS.window setFrame:[window->NS.window frameRectForContentRect:contentRect] [window->NS.object setFrame:[window->NS.object frameRectForContentRect:contentRect]
display:YES]; display:YES];
} }
@ -1010,7 +1014,7 @@ void _glfwPlatformSetWindowPos(_GLFWwindow* window, int x, int y)
void _glfwPlatformIconifyWindow(_GLFWwindow* window) void _glfwPlatformIconifyWindow(_GLFWwindow* window)
{ {
[window->NS.window miniaturize:nil]; [window->NS.object miniaturize:nil];
} }
@ -1020,7 +1024,7 @@ void _glfwPlatformIconifyWindow(_GLFWwindow* window)
void _glfwPlatformRestoreWindow(_GLFWwindow* window) void _glfwPlatformRestoreWindow(_GLFWwindow* window)
{ {
[window->NS.window deminiaturize:nil]; [window->NS.object deminiaturize:nil];
} }
@ -1161,7 +1165,7 @@ void _glfwPlatformSetMouseCursorPos(_GLFWwindow* window, int x, int y)
// "global coordinates" are upside down from CG's... // "global coordinates" are upside down from CG's...
NSPoint localPoint = NSMakePoint(x, y); NSPoint localPoint = NSMakePoint(x, y);
NSPoint globalPoint = [window->NS.window convertBaseToScreen:localPoint]; NSPoint globalPoint = [window->NS.object convertBaseToScreen:localPoint];
CGPoint mainScreenOrigin = CGDisplayBounds(CGMainDisplayID()).origin; CGPoint mainScreenOrigin = CGDisplayBounds(CGMainDisplayID()).origin;
double mainScreenHeight = CGDisplayBounds(CGMainDisplayID()).size.height; double mainScreenHeight = CGDisplayBounds(CGMainDisplayID()).size.height;
CGPoint targetPoint = CGPointMake(globalPoint.x - mainScreenOrigin.x, CGPoint targetPoint = CGPointMake(globalPoint.x - mainScreenOrigin.x,