| @@ -26,7 +26,7 @@ | |||
| #include <vector> | |||
| #if DISTRHO_OS_LINUX | |||
| # include <X11/Xlib.h> | |||
| # include "pugl/pugl_x11.h" | |||
| #endif | |||
| START_NAMESPACE_DISTRHO | |||
| @@ -660,7 +660,7 @@ public: | |||
| OpenGLDialog(PuglView* parentView, const Size& parentSize, const Image& image_, const char* title) | |||
| : image(image_) | |||
| { | |||
| #if 0 //DISTRHO_OS_LINUX | |||
| #if DISTRHO_OS_LINUX | |||
| bool addToDesktop = false; | |||
| #else | |||
| bool addToDesktop = true; | |||
| @@ -682,10 +682,11 @@ public: | |||
| puglSetReshapeFunc(view, onReshapeCallback); | |||
| puglSetCloseFunc(view, onCloseCallback); | |||
| #if 0 //DISTRHO_OS_LINUX | |||
| Display* display = view->impl->display; | |||
| Window thisWindow = view->impl->win; | |||
| Window parentWindow = parentView->impl->win; | |||
| #if DISTRHO_OS_LINUX | |||
| PuglInternals* impl = puglGetInternalsImpl(view); | |||
| Display* display = impl->display; | |||
| Window thisWindow = impl->win; | |||
| Window parentWindow = puglGetInternalsImpl(parentView)->win; | |||
| int x = (parentSize.getWidth()-image.getWidth())/2; | |||
| int y = (parentSize.getHeight()-image.getHeight())/2; | |||
| @@ -722,9 +723,10 @@ public: | |||
| { | |||
| if (view) | |||
| { | |||
| #if 0 //DISTRHO_OS_LINUX | |||
| Display* display = view->impl->display; | |||
| Window window = view->impl->win; | |||
| #if DISTRHO_OS_LINUX | |||
| PuglInternals* impl = puglGetInternalsImpl(view); | |||
| Display* display = impl->display; | |||
| Window window = impl->win; | |||
| XRaiseWindow(display, window); | |||
| XSetInputFocus(display, window, RevertToPointerRoot, CurrentTime); | |||
| #endif | |||
| @@ -841,7 +843,7 @@ enum ObjectType { | |||
| OBJECT_SLIDER = 3 | |||
| }; | |||
| #if 0 //DISTRHO_OS_LINUX | |||
| #if DISTRHO_OS_LINUX | |||
| struct LinuxData { | |||
| Display* display; | |||
| Window window; | |||
| @@ -879,7 +881,7 @@ struct OpenGLExtUIPrivateData { | |||
| std::vector<ImageSlider*> sliders; | |||
| OpenGLDialog* dialog; | |||
| #if 0 //DISTRHO_OS_LINUX | |||
| #if DISTRHO_OS_LINUX | |||
| LinuxData linuxData; | |||
| #endif | |||
| @@ -896,7 +898,7 @@ struct OpenGLExtUIPrivateData { | |||
| void showCursor() | |||
| { | |||
| #if 0 //DISTRHO_OS_LINUX | |||
| #if DISTRHO_OS_LINUX | |||
| if (lastCursorPos != Point(-1, -2)) | |||
| XWarpPointer(linuxData.display, None, DefaultRootWindow(linuxData.display), 0, 0, 0, 0, lastCursorPos.getX(), lastCursorPos.getY()); | |||
| @@ -906,7 +908,7 @@ struct OpenGLExtUIPrivateData { | |||
| void hideCursor() | |||
| { | |||
| #if 0 //DISTRHO_OS_LINUX | |||
| #if DISTRHO_OS_LINUX | |||
| Window root, child; | |||
| int rootX, rootY, winX, winY; | |||
| unsigned int mask; | |||
| @@ -1022,9 +1024,10 @@ void OpenGLExtUI::d_onInit() | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glLoadIdentity(); | |||
| #if 0 //DISTRHO_OS_LINUX | |||
| data->linuxData.display = OpenGLUI::data->widget->impl->display; | |||
| data->linuxData.window = OpenGLUI::data->widget->impl->win; | |||
| #if DISTRHO_OS_LINUX | |||
| PuglInternals* dataImpl = puglGetInternalsImpl(OpenGLUI::data->widget); | |||
| data->linuxData.display = dataImpl->display; | |||
| data->linuxData.window = dataImpl->win; | |||
| data->linuxData.pixmapBlack = XCreateBitmapFromData(data->linuxData.display, data->linuxData.window, data->linuxData.colorData, 8, 8); | |||
| data->linuxData.cursorBlack = XCreatePixmapCursor(data->linuxData.display, data->linuxData.pixmapBlack, data->linuxData.pixmapBlack, | |||
| &data->linuxData.colorBlack, &data->linuxData.colorBlack, 0, 0); | |||
| @@ -227,7 +227,7 @@ puglCreate(PuglNativeWindow parent, | |||
| int height, | |||
| bool resizable, | |||
| bool addToDesktop = true, | |||
| long* x11Display = NULL); | |||
| const char* x11Display = NULL); | |||
| /** | |||
| Set the handle to be passed to all callbacks. | |||
| @@ -229,7 +229,7 @@ puglCreate(PuglNativeWindow parent, | |||
| int height, | |||
| bool resizable, | |||
| bool addToDesktop, | |||
| long* x11Display) | |||
| const char* x11Display) | |||
| { | |||
| PuglView* view = (PuglView*)calloc(1, sizeof(PuglView)); | |||
| PuglInternals* impl = (PuglInternals*)calloc(1, sizeof(PuglInternals)); | |||
| @@ -47,7 +47,7 @@ puglCreate(PuglNativeWindow parent, | |||
| int height, | |||
| bool resizable, | |||
| bool addToDesktop, | |||
| long* x11Display) | |||
| const char* x11Display) | |||
| { | |||
| PuglView* view = (PuglView*)calloc(1, sizeof(PuglView)); | |||
| PuglInternals* impl = (PuglInternals*)calloc(1, sizeof(PuglInternals)); | |||
| @@ -23,22 +23,9 @@ | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <GL/gl.h> | |||
| #include <GL/glx.h> | |||
| #include <X11/Xatom.h> | |||
| #include <X11/Xlib.h> | |||
| #include <X11/keysym.h> | |||
| #include "pugl_x11.h" | |||
| #include "pugl_internal.h" | |||
| struct PuglInternalsImpl { | |||
| Display* display; | |||
| int screen; | |||
| Window win; | |||
| GLXContext ctx; | |||
| Bool doubleBuffered; | |||
| }; | |||
| /** | |||
| Attributes for single-buffered RGBA with at least | |||
| 4 bits per color and a 16 bit depth buffer. | |||
| @@ -72,7 +59,7 @@ puglCreate(PuglNativeWindow parent, | |||
| int height, | |||
| bool resizable, | |||
| bool addToDesktop, | |||
| long* x11Display) | |||
| const char* x11Display) | |||
| { | |||
| PuglView* view = (PuglView*)calloc(1, sizeof(PuglView)); | |||
| PuglInternals* impl = (PuglInternals*)calloc(1, sizeof(PuglInternals)); | |||
| @@ -84,7 +71,7 @@ puglCreate(PuglNativeWindow parent, | |||
| view->width = width; | |||
| view->height = height; | |||
| impl->display = XOpenDisplay(x11Display ? *x11Display : 0); | |||
| impl->display = XOpenDisplay(x11Display); | |||
| impl->screen = DefaultScreen(impl->display); | |||
| XVisualInfo* vi = glXChooseVisual(impl->display, impl->screen, attrListDbl); | |||
| @@ -384,3 +371,9 @@ puglGetNativeWindow(PuglView* view) | |||
| { | |||
| return view->impl->win; | |||
| } | |||
| PuglInternals* | |||
| puglGetInternalsImpl(PuglView* view) | |||
| { | |||
| return view->impl; | |||
| } | |||
| @@ -0,0 +1,41 @@ | |||
| /* | |||
| Copyright 2012 David Robillard <http://drobilla.net> | |||
| Copyright 2011-2012 Ben Loftis, Harrison Consoles | |||
| Permission to use, copy, modify, and/or distribute this software for any | |||
| purpose with or without fee is hereby granted, provided that the above | |||
| copyright notice and this permission notice appear in all copies. | |||
| THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
| WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||
| MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||
| ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||
| OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
| */ | |||
| /** | |||
| @file pugl_x11.h X11 Pugl Implementation (PuglInternalsImpl only). | |||
| */ | |||
| #include "pugl.h" | |||
| #include <GL/gl.h> | |||
| #include <GL/glx.h> | |||
| #include <X11/Xatom.h> | |||
| #include <X11/Xlib.h> | |||
| #include <X11/keysym.h> | |||
| struct PuglInternalsImpl { | |||
| Display* display; | |||
| int screen; | |||
| Window win; | |||
| GLXContext ctx; | |||
| Bool doubleBuffered; | |||
| }; | |||
| typedef struct PuglInternalsImpl PuglInternals; | |||
| PuglInternals* | |||
| puglGetInternalsImpl(PuglView* view); | |||