Conflicts: src/CMakeLists.txtmaster
						commit
						ea36557b93
					
				
				 13 changed files with 695 additions and 11 deletions
			
			
		@ -0,0 +1,78 @@ | 
				
			|||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// GLFW - An OpenGL library
 | 
				
			||||||
 | 
					// Platform:    Any
 | 
				
			||||||
 | 
					// API version: 3.0
 | 
				
			||||||
 | 
					// WWW:         http://www.glfw.org/
 | 
				
			||||||
 | 
					//------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Copyright (c) 2010 Camilla Berglund <elmindreda@elmindreda.org>
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					// warranty. In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					// arising from the use of this software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					// including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					// freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					//    claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					//    in a product, an acknowledgment in the product documentation would
 | 
				
			||||||
 | 
					//    be appreciated but is not required.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 2. Altered source versions must be plainly marked as such, and must not
 | 
				
			||||||
 | 
					//    be misrepresented as being the original software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 3. This notice may not be removed or altered from any source
 | 
				
			||||||
 | 
					//    distribution.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "internal.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <math.h> | 
				
			||||||
 | 
					#include <string.h> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					//////                        GLFW public API                       //////
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Set the clipboard contents
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLFWAPI void glfwSetClipboardData(void *data, size_t size, int format) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    if (!_glfwInitialized) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        _glfwSetError(GLFW_NOT_INITIALIZED, NULL); | 
				
			||||||
 | 
					        return; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (format == GLFW_CLIPBOARD_FORMAT_NONE) | 
				
			||||||
 | 
					        return; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _glfwPlatformSetClipboardData(data, size, format); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Return the current clipboard contents
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLFWAPI size_t glfwGetClipboardData(void *data, size_t size, int format) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    if (!_glfwInitialized) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        _glfwSetError(GLFW_NOT_INITIALIZED, NULL); | 
				
			||||||
 | 
					        return 0; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (format == GLFW_CLIPBOARD_FORMAT_NONE) | 
				
			||||||
 | 
					        return 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!data || !size) | 
				
			||||||
 | 
					        return 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return _glfwPlatformGetClipboardData(data, size, format); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,56 @@ | 
				
			|||||||
 | 
					//======================================================================== | 
				
			||||||
 | 
					// GLFW - An OpenGL library | 
				
			||||||
 | 
					// Platform:    Cocoa/NSOpenGL | 
				
			||||||
 | 
					// API version: 3.0 | 
				
			||||||
 | 
					// WWW:         http://www.glfw.org/ | 
				
			||||||
 | 
					//------------------------------------------------------------------------ | 
				
			||||||
 | 
					// Copyright (c) 2010 Camilla Berglund <elmindreda@elmindreda.org> | 
				
			||||||
 | 
					// | 
				
			||||||
 | 
					// This software is provided 'as-is', without any express or implied | 
				
			||||||
 | 
					// warranty. In no event will the authors be held liable for any damages | 
				
			||||||
 | 
					// arising from the use of this software. | 
				
			||||||
 | 
					// | 
				
			||||||
 | 
					// Permission is granted to anyone to use this software for any purpose, | 
				
			||||||
 | 
					// including commercial applications, and to alter it and redistribute it | 
				
			||||||
 | 
					// freely, subject to the following restrictions: | 
				
			||||||
 | 
					// | 
				
			||||||
 | 
					// 1. The origin of this software must not be misrepresented; you must not | 
				
			||||||
 | 
					//    claim that you wrote the original software. If you use this software | 
				
			||||||
 | 
					//    in a product, an acknowledgment in the product documentation would | 
				
			||||||
 | 
					//    be appreciated but is not required. | 
				
			||||||
 | 
					// | 
				
			||||||
 | 
					// 2. Altered source versions must be plainly marked as such, and must not | 
				
			||||||
 | 
					//    be misrepresented as being the original software. | 
				
			||||||
 | 
					// | 
				
			||||||
 | 
					// 3. This notice may not be removed or altered from any source | 
				
			||||||
 | 
					//    distribution. | 
				
			||||||
 | 
					// | 
				
			||||||
 | 
					//======================================================================== | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "internal.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <limits.h> | 
				
			||||||
 | 
					#include <string.h> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					////////////////////////////////////////////////////////////////////////// | 
				
			||||||
 | 
					//////                       GLFW platform API                      ////// | 
				
			||||||
 | 
					////////////////////////////////////////////////////////////////////////// | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//======================================================================== | 
				
			||||||
 | 
					// Set the clipboard contents | 
				
			||||||
 | 
					//======================================================================== | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void _glfwPlatformSetClipboardData(void *data, size_t size, int format) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//======================================================================== | 
				
			||||||
 | 
					// Return the current clipboard contents | 
				
			||||||
 | 
					//======================================================================== | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					size_t _glfwPlatformGetClipboardData(void *data, size_t size, int format) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						return 0; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,56 @@ | 
				
			|||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// GLFW - An OpenGL library
 | 
				
			||||||
 | 
					// Platform:    Win32/WGL
 | 
				
			||||||
 | 
					// API version: 3.0
 | 
				
			||||||
 | 
					// WWW:         http://www.glfw.org/
 | 
				
			||||||
 | 
					//------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Copyright (c) 2010 Camilla Berglund <elmindreda@elmindreda.org>
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					// warranty. In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					// arising from the use of this software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					// including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					// freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					//    claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					//    in a product, an acknowledgment in the product documentation would
 | 
				
			||||||
 | 
					//    be appreciated but is not required.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 2. Altered source versions must be plainly marked as such, and must not
 | 
				
			||||||
 | 
					//    be misrepresented as being the original software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 3. This notice may not be removed or altered from any source
 | 
				
			||||||
 | 
					//    distribution.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "internal.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <limits.h> | 
				
			||||||
 | 
					#include <string.h> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					//////                       GLFW platform API                      //////
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Set the clipboard contents
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void _glfwPlatformSetClipboardData(void *data, size_t size, int format) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Return the current clipboard contents
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					size_t _glfwPlatformGetClipboardData(void *data, size_t size, int format) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
						return 0; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,248 @@ | 
				
			|||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// GLFW - An OpenGL library
 | 
				
			||||||
 | 
					// Platform:    X11/GLX
 | 
				
			||||||
 | 
					// API version: 3.0
 | 
				
			||||||
 | 
					// WWW:         http://www.glfw.org/
 | 
				
			||||||
 | 
					//------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Copyright (c) 2010 Camilla Berglund <elmindreda@elmindreda.org>
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					// warranty. In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					// arising from the use of this software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					// including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					// freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					//    claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					//    in a product, an acknowledgment in the product documentation would
 | 
				
			||||||
 | 
					//    be appreciated but is not required.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 2. Altered source versions must be plainly marked as such, and must not
 | 
				
			||||||
 | 
					//    be misrepresented as being the original software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 3. This notice may not be removed or altered from any source
 | 
				
			||||||
 | 
					//    distribution.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO: Incremental support? Overkill perhaps.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "internal.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h> | 
				
			||||||
 | 
					#include <limits.h> | 
				
			||||||
 | 
					#include <string.h> | 
				
			||||||
 | 
					#include <stdlib.h> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					//////                       GLFW platform API                      //////
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Get the corresponding X11 format for a given GLFW format.
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static Atom *getInternalFormat(int fmt) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    // Get the necessary atoms
 | 
				
			||||||
 | 
					    switch (fmt) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        case GLFW_CLIPBOARD_FORMAT_STRING: | 
				
			||||||
 | 
					            return _glfwLibrary.X11.selection.atoms.string; | 
				
			||||||
 | 
					        default: | 
				
			||||||
 | 
					            return 0; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// X11 selection request event
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Atom _glfwSelectionRequest(XSelectionRequestEvent *request) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    Atom *atoms = _glfwLibrary.X11.selection.atoms.string; | 
				
			||||||
 | 
					    if (request->target == XA_STRING) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        // TODO: ISO Latin-1 specific characters don't get converted
 | 
				
			||||||
 | 
					        // (yet). For cleanliness, would we need something like iconv?
 | 
				
			||||||
 | 
					        XChangeProperty(_glfwLibrary.X11.display, | 
				
			||||||
 | 
					            request->requestor, | 
				
			||||||
 | 
					            request->target, | 
				
			||||||
 | 
					            request->target, | 
				
			||||||
 | 
					            8, | 
				
			||||||
 | 
					            PropModeReplace, | 
				
			||||||
 | 
					            (unsigned char *)_glfwLibrary.X11.selection.clipboard.string, | 
				
			||||||
 | 
					            8); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    else if (request->target == atoms[_GLFW_STRING_ATOM_COMPOUND] || | 
				
			||||||
 | 
					             request->target == atoms[_GLFW_STRING_ATOM_UTF8]) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        XChangeProperty(_glfwLibrary.X11.display, | 
				
			||||||
 | 
					            request->requestor, | 
				
			||||||
 | 
					            request->target, | 
				
			||||||
 | 
					            request->target, | 
				
			||||||
 | 
					            8, | 
				
			||||||
 | 
					            PropModeReplace, | 
				
			||||||
 | 
					            (unsigned char *)_glfwLibrary.X11.selection.clipboard.string, | 
				
			||||||
 | 
					            _glfwLibrary.X11.selection.clipboard.stringlen); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    else | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        // TODO: Should we set an error? Probably not.
 | 
				
			||||||
 | 
					        return None; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    return request->target; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Set the clipboard contents
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void _glfwPlatformSetClipboardData(void *data, size_t size, int format) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    switch (format) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        case GLFW_CLIPBOARD_FORMAT_STRING: | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					            // Allocate memory to keep track of the clipboard
 | 
				
			||||||
 | 
					            char *cb = malloc(size+1); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Copy the clipboard data
 | 
				
			||||||
 | 
					            memcpy(cb, data, size); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Set the string length
 | 
				
			||||||
 | 
					            _glfwLibrary.X11.selection.clipboard.stringlen = size; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Check if existing clipboard memory needs to be freed
 | 
				
			||||||
 | 
					            if (_glfwLibrary.X11.selection.clipboard.string) | 
				
			||||||
 | 
					                free(_glfwLibrary.X11.selection.clipboard.string); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Now set the clipboard (awaiting the event SelectionRequest)
 | 
				
			||||||
 | 
					            _glfwLibrary.X11.selection.clipboard.string = cb; | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        default: | 
				
			||||||
 | 
					            _glfwSetError(GLFW_CLIPBOARD_FORMAT_UNAVAILABLE, | 
				
			||||||
 | 
					                          "X11/GLX: Unavailable clipboard format"); | 
				
			||||||
 | 
					            return; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Set the selection owner to our active window
 | 
				
			||||||
 | 
					    XSetSelectionOwner(_glfwLibrary.X11.display, XA_PRIMARY, | 
				
			||||||
 | 
					        _glfwLibrary.activeWindow->X11.handle, CurrentTime); | 
				
			||||||
 | 
					    XSetSelectionOwner(_glfwLibrary.X11.display, | 
				
			||||||
 | 
					        _glfwLibrary.X11.selection.atoms.clipboard | 
				
			||||||
 | 
					        [_GLFW_CLIPBOARD_ATOM_CLIPBOARD], | 
				
			||||||
 | 
					        _glfwLibrary.activeWindow->X11.handle, CurrentTime); | 
				
			||||||
 | 
					    XFlush(_glfwLibrary.X11.display); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Return the current clipboard contents
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					size_t _glfwPlatformGetClipboardData(void *data, size_t size, int format) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    size_t len, rembytes, dummy; | 
				
			||||||
 | 
					    unsigned char *d; | 
				
			||||||
 | 
					    int fmt; | 
				
			||||||
 | 
					    Atom type; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Try different clipboards and formats that relate to the GLFW
 | 
				
			||||||
 | 
					    // format with preference for more appropriate formats first
 | 
				
			||||||
 | 
					    Atom *xcbrd = _glfwLibrary.X11.selection.atoms.clipboard; | 
				
			||||||
 | 
					    Atom *xcbrdend = _glfwLibrary.X11.selection.atoms.clipboard + | 
				
			||||||
 | 
					        _GLFW_CLIPBOARD_ATOM_COUNT; | 
				
			||||||
 | 
					    Atom *xfmt = getInternalFormat(format); | 
				
			||||||
 | 
					    Atom *xfmtend = xfmt + _GLFW_STRING_ATOM_COUNT; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Get the currently active window
 | 
				
			||||||
 | 
					    Window window = _glfwLibrary.activeWindow->X11.handle; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (; xcbrd != xcbrdend; xcbrd++) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        for (; xfmt != xfmtend; xfmt++) | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					            // Specify the format we would like.
 | 
				
			||||||
 | 
					            _glfwLibrary.X11.selection.request = *xfmt; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Convert the selection into a format we would like.
 | 
				
			||||||
 | 
					            XConvertSelection(_glfwLibrary.X11.display, *xcbrd, | 
				
			||||||
 | 
					                *xfmt, None, window, CurrentTime); | 
				
			||||||
 | 
					            XFlush(_glfwLibrary.X11.display); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Process pending events until we get a SelectionNotify.
 | 
				
			||||||
 | 
					            while (!_glfwLibrary.X11.selection.converted) | 
				
			||||||
 | 
					                _glfwPlatformWaitEvents(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Successful?
 | 
				
			||||||
 | 
					            if (_glfwLibrary.X11.selection.converted == 1) | 
				
			||||||
 | 
					                break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Successful?
 | 
				
			||||||
 | 
					        if (_glfwLibrary.X11.selection.converted == 1) | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					            _glfwLibrary.X11.selection.converted = 0; | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Unsuccessful conversion, bail with no clipboard data
 | 
				
			||||||
 | 
					    if (_glfwLibrary.X11.selection.converted) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        _glfwSetError(GLFW_CLIPBOARD_FORMAT_UNAVAILABLE, | 
				
			||||||
 | 
					                      "X11/GLX: Unavailable clipboard format"); | 
				
			||||||
 | 
					        return 0; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Reset for the next selection
 | 
				
			||||||
 | 
					    _glfwLibrary.X11.selection.converted = 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Check the length of data to receive (rembytes)
 | 
				
			||||||
 | 
					    XGetWindowProperty(_glfwLibrary.X11.display, | 
				
			||||||
 | 
					                       window, | 
				
			||||||
 | 
					                       *xfmt, | 
				
			||||||
 | 
					                       0, 0, | 
				
			||||||
 | 
					                       0, | 
				
			||||||
 | 
					                       AnyPropertyType, | 
				
			||||||
 | 
					                       &type, | 
				
			||||||
 | 
					                       &fmt, | 
				
			||||||
 | 
					                       &len, &rembytes, | 
				
			||||||
 | 
					                       &d); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // The number of bytes remaining (which is all of them)
 | 
				
			||||||
 | 
					    if (rembytes > 0) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        int result = XGetWindowProperty(_glfwLibrary.X11.display, window, | 
				
			||||||
 | 
					                                    *xfmt, 0, rembytes, 0, | 
				
			||||||
 | 
					                                    AnyPropertyType, &type, &fmt, | 
				
			||||||
 | 
					                                    &len, &dummy, &d); | 
				
			||||||
 | 
					        if (result == Success) | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					            size_t s = size - 1 > rembytes ? rembytes : size - 1; | 
				
			||||||
 | 
					            // Copy the data out.
 | 
				
			||||||
 | 
					            memcpy(data, d, s); | 
				
			||||||
 | 
					            // Null-terminate strings.
 | 
				
			||||||
 | 
					            if (format == GLFW_CLIPBOARD_FORMAT_STRING) | 
				
			||||||
 | 
					            { | 
				
			||||||
 | 
					                ((char *)data)[s] = '\0'; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // Free the data allocated using X11.
 | 
				
			||||||
 | 
					            XFree(d); | 
				
			||||||
 | 
					            // Return the actual number of bytes.
 | 
				
			||||||
 | 
					            return rembytes; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        else | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					            // Free the data allocated using X11.
 | 
				
			||||||
 | 
					            XFree(d); | 
				
			||||||
 | 
					            return 0; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    return 0; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,147 @@ | 
				
			|||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					// Gamma correction test program
 | 
				
			||||||
 | 
					// Copyright (c) Camilla Berglund <elmindreda@elmindreda.org>
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					// warranty. In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					// arising from the use of this software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					// including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					// freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					//    claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					//    in a product, an acknowledgment in the product documentation would
 | 
				
			||||||
 | 
					//    be appreciated but is not required.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 2. Altered source versions must be plainly marked as such, and must not
 | 
				
			||||||
 | 
					//    be misrepresented as being the original software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 3. This notice may not be removed or altered from any source
 | 
				
			||||||
 | 
					//    distribution.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This program is used to test the clipboard functionality.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//========================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <GL/glfw3.h> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h> | 
				
			||||||
 | 
					#include <stdlib.h> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "getopt.h" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void usage(void) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    printf("Usage: clipboard [-h]\n"); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void key_callback(GLFWwindow window, int key, int action) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    static int control = GL_FALSE; | 
				
			||||||
 | 
					    if (key == GLFW_KEY_LEFT_CONTROL) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        control = (action == GLFW_PRESS); | 
				
			||||||
 | 
					        return; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (action != GLFW_PRESS) | 
				
			||||||
 | 
					        return; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (key) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        case GLFW_KEY_ESCAPE: | 
				
			||||||
 | 
					            glfwCloseWindow(window); | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        case GLFW_KEY_V: | 
				
			||||||
 | 
					            if (control) | 
				
			||||||
 | 
					            { | 
				
			||||||
 | 
					                char buffer[4096]; | 
				
			||||||
 | 
					                size_t size; | 
				
			||||||
 | 
					                printf("Paste test.\n"); | 
				
			||||||
 | 
					                size = glfwGetClipboardData(buffer, sizeof(buffer), GLFW_CLIPBOARD_FORMAT_STRING); | 
				
			||||||
 | 
					                if (size >= sizeof(buffer)) | 
				
			||||||
 | 
					                { | 
				
			||||||
 | 
					                    printf("Buffer wasn't big enough to hold clipboard data.\n"); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                printf("[%ld]: %s\n", size, buffer); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        case GLFW_KEY_C: | 
				
			||||||
 | 
					            if (control) | 
				
			||||||
 | 
					            { | 
				
			||||||
 | 
					                glfwSetClipboardData("Hello GLFW World!", sizeof("Hello GLFW World!"), | 
				
			||||||
 | 
					                                     GLFW_CLIPBOARD_FORMAT_STRING); | 
				
			||||||
 | 
					                printf("Setting clipboard to: %s\n", "Hello GLFW World!"); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void size_callback(GLFWwindow window, int width, int height) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    glViewport(0, 0, width, height); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char** argv) | 
				
			||||||
 | 
					{ | 
				
			||||||
 | 
					    int ch; | 
				
			||||||
 | 
					    GLFWwindow window; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while ((ch = getopt(argc, argv, "h")) != -1) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        switch (ch) | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					            case 'h': | 
				
			||||||
 | 
					                usage(); | 
				
			||||||
 | 
					                exit(EXIT_SUCCESS); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            default: | 
				
			||||||
 | 
					                usage(); | 
				
			||||||
 | 
					                exit(EXIT_FAILURE); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!glfwInit()) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError())); | 
				
			||||||
 | 
					        exit(EXIT_FAILURE); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    window = glfwOpenWindow(0, 0, GLFW_WINDOWED, "Clipboard Test", NULL); | 
				
			||||||
 | 
					    if (!window) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        glfwTerminate(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError())); | 
				
			||||||
 | 
					        exit(EXIT_FAILURE); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    glfwSwapInterval(1); | 
				
			||||||
 | 
					    glfwSetKeyCallback(key_callback); | 
				
			||||||
 | 
					    glfwSetWindowSizeCallback(size_callback); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    glMatrixMode(GL_PROJECTION); | 
				
			||||||
 | 
					    glOrtho(-1.f, 1.f, -1.f, 1.f, -1.f, 1.f); | 
				
			||||||
 | 
					    glMatrixMode(GL_MODELVIEW); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    glClearColor(0.5f, 0.5f, 0.5f, 0); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (glfwIsWindow(window)) | 
				
			||||||
 | 
					    { | 
				
			||||||
 | 
					        glClear(GL_COLOR_BUFFER_BIT); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        glColor3f(0.8f, 0.2f, 0.4f); | 
				
			||||||
 | 
					        glRectf(-0.5f, -0.5f, 0.5f, 0.5f); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        glfwSwapBuffers(); | 
				
			||||||
 | 
					        glfwPollEvents(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    glfwTerminate(); | 
				
			||||||
 | 
					    exit(EXIT_SUCCESS); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue