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