Hi!
This is just a heads-up for my patches, since I don' want to commit
them without your feedback.
1. I implemented key repeat support for keyboard events in GServerEvent
2. I implemented mouse position setting support in GSDisplayServer and
XGServerWindow. I really need that feature in any serious OpenGL
application.
3. I did some NSOpenGL improvements, like multisampling support. I
think I should coordinate my work there with Xavier and Matt.
Thanks
TOM
Index: Source/x11/XGServerWindow.m
===================================================================
--- Source/x11/XGServerWindow.m (Revision 28048)
+++ Source/x11/XGServerWindow.m (Arbeitskopie)
@@ -3626,6 +3626,22 @@
grab_window = NULL;
}
+- (void) setmouseposition: (int)x :(int)y :(int)win
+{
+ gswindow_device_t *window;
+ window = WINDOW_WITH_TAG(win);
+
+ unsigned int style = window->win_attrs.window_style;
+ float t, b, l, r;
+
+ [self styleoffsets: &l : &r : &t : &b : style : window->ident];
+
+ float xx = x - l;
+ float xy = NSHeight(window->xframe) - y + b;
+
+ XWarpPointer(dpy,None,window->ident,0,0,0,0,xx,xy);
+}
+
- (void) setinputfocus: (int)win
{
gswindow_device_t *window = WINDOW_WITH_TAG(win);
Index: Source/x11/XGGLContext.m
===================================================================
--- Source/x11/XGGLContext.m (Revision 28048)
+++ Source/x11/XGGLContext.m (Arbeitskopie)
@@ -29,6 +29,7 @@
#ifdef HAVE_GLX
#include <Foundation/NSDebug.h>
#include <Foundation/NSException.h>
+#include <Foundation/NSDictionary.h>
#include <GNUstepGUI/GSDisplayServer.h>
#include <AppKit/NSView.h>
#include <AppKit/NSWindow.h>
@@ -232,7 +233,7 @@
{
MAKE_DISPLAY(dpy);
- if (GSglxMinorVersion(dpy) >= 3)
+ if ([XGGLPixelFormat glxMinorVersion] >= 3)
{
if ( !glXMakeContextCurrent(dpy, None, None, NULL) )
NSDebugMLLog( @"GLX", @"Can not clear current GL context - Errror %u",
@@ -434,26 +435,22 @@
if (xSubWindow == nil)
[NSException raise: NSGenericException
- format: @"GL Context is not bind, cannot be made current"];
+ format: @"GL Context has no view attached, cannot be made current"];
NSAssert(glx_context != None && glx_drawable != None,
NSInternalInconsistencyException);
- if (GSglxMinorVersion(dpy) >= 3)
+ if ([XGGLPixelFormat glxMinorVersion] >= 3)
{
- //NSDebugMLLog(@"GLX", @"before glXMakeContextCurrent");
if ( !glXMakeContextCurrent(dpy, glx_drawable, glx_drawable, glx_context) )
NSDebugMLLog( @"GLX", @"Can not make GL context %@ current - Errror %u",
self, glGetError() );
- //NSDebugMLLog(@"GLX", @"after glXMakeContextCurrent");
}
else
{
- //NSDebugMLLog(@"GLX", @"before glXMakeCurrent");
if ( !glXMakeCurrent(dpy, glx_drawable, glx_context) )
NSDebugMLLog( @"GLX", @"Can not make GL context %@ current - Errror %u",
self, glGetError() );
- //NSDebugMLLog(@"GLX", @"after glXMakeCurrent");
}
currentGLContext = self;
@@ -497,7 +494,7 @@
[current_view _setIgnoresBacking: saved_ignores_backing];
}
ASSIGN(xSubWindow, [XGXSubWindow subwindowOnView: view
- visualinfo: [pixelFormat xvinfo]]);
+ visualinfo: [pixelFormat visualinfo]]);
glx_drawable = [pixelFormat drawableForWindow: xSubWindow->xwindowid];
saved_ignores_backing = [view _ignoresBacking];
[view _setIgnoresBacking: YES];
Index: Source/x11/XGServerEvent.m
===================================================================
--- Source/x11/XGServerEvent.m (Revision 28048)
+++ Source/x11/XGServerEvent.m (Arbeitskopie)
@@ -90,6 +90,8 @@
static BOOL _is_keyboard_initialized = NO;
static BOOL _mod_ignore_shift = NO;
+static BOOL next_event_is_a_keyrepeat;
+
void __objc_xgcontextevent_linking (void)
{
}
@@ -342,6 +344,7 @@
NSGraphicsContext *gcontext;
float deltaX;
float deltaY;
+ int buttonNumber;
gcontext = GSCurrentContext();
xEvent = *event;
@@ -404,24 +407,35 @@
deltaY = 0.0;
if (xEvent.xbutton.button == generic.lMouse)
+ {
eventType = NSLeftMouseDown;
+ buttonNumber = generic.lMouse;
+ }
else if (xEvent.xbutton.button == generic.rMouse
&& generic.rMouse != 0)
+ {
eventType = NSRightMouseDown;
+ buttonNumber = generic.rMouse;
+ }
else if (xEvent.xbutton.button == generic.mMouse
&& generic.mMouse != 0)
+ {
eventType = NSOtherMouseDown;
+ buttonNumber = generic.mMouse;
+ }
else if (xEvent.xbutton.button == generic.upMouse
&& generic.upMouse != 0)
{
deltaY = 1.;
eventType = NSScrollWheel;
+ buttonNumber = generic.upMouse;
}
else if (xEvent.xbutton.button == generic.downMouse
&& generic.downMouse != 0)
{
deltaY = -1.;
eventType = NSScrollWheel;
+ buttonNumber = generic.downMouse;
}
else
{
@@ -471,7 +485,7 @@
eventNumber: xEvent.xbutton.serial
clickCount: clickCount
pressure: 1.0
- buttonNumber: 0 /* FIXME */
+ buttonNumber: buttonNumber /* FIXME */
deltaX: 0.
deltaY: deltaY
deltaZ: 0.];
@@ -482,13 +496,22 @@
xEvent.xbutton.window);
[self setLastTime: xEvent.xbutton.time];
if (xEvent.xbutton.button == generic.lMouse)
+ {
eventType = NSLeftMouseUp;
+ buttonNumber = generic.lMouse;
+ }
else if (xEvent.xbutton.button == generic.rMouse
&& generic.rMouse != 0)
+ {
eventType = NSRightMouseUp;
+ buttonNumber = generic.rMouse;
+ }
else if (xEvent.xbutton.button == generic.mMouse
&& generic.mMouse != 0)
+ {
eventType = NSOtherMouseUp;
+ buttonNumber = generic.mMouse;
+ }
else
{
// we ignore release of scrollUp or scrollDown
@@ -516,7 +539,7 @@
eventNumber: xEvent.xbutton.serial
clickCount: clickCount
pressure: 1.0
- buttonNumber: 0 /* FIXMME */
+ buttonNumber: buttonNumber /* FIXMME */
deltaX: 0.0
deltaY: 0.0
deltaZ: 0.0];
@@ -1925,6 +1948,7 @@
int alt_key = 0;
int help_key = 0;
KeySym modKeysym; // process modifier independently of shift, etc.
+ XEvent next_event;
if (_is_keyboard_initialized == NO)
initialize_keyboard ();
@@ -2057,6 +2081,27 @@
eventType = NSFlagsChanged;
}
+ BOOL keyRepeat = NO;
+
+ if ( next_event_is_a_keyrepeat == YES )
+ {
+ keyRepeat = YES;
+ next_event_is_a_keyrepeat = NO;
+ }
+ else if( XEventsQueued( [context xDisplay], QueuedAfterReading ) )
+ {
+ XPeekEvent( [context xDisplay], &next_event );
+ if( next_event.xkey.window == xEvent->xkey.window &&
+ next_event.xkey.keycode == xEvent->xkey.keycode &&
+ next_event.xkey.time == xEvent->xkey.time )
+ {
+ // Do not report anything for this event
+ keyRepeat = YES;
+ next_event_is_a_keyrepeat = YES;
+ }
+ }
+
+
if (help_key)
{
unicode = NSHelpFunctionKey;
@@ -2071,7 +2116,7 @@
context: GSCurrentContext()
characters: keys
charactersIgnoringModifiers: keys
- isARepeat: NO
+ isARepeat: keyRepeat
keyCode: keyCode];
[event_queue addObject: event];
event = [NSEvent keyEventWithType: NSFlagsChanged
@@ -2107,7 +2152,7 @@
context: GSCurrentContext()
characters: keys
charactersIgnoringModifiers: keys
- isARepeat: NO
+ isARepeat: keyRepeat
keyCode: keyCode];
return event;
}
@@ -2145,7 +2190,7 @@
context: GSCurrentContext()
characters: keys
charactersIgnoringModifiers: ukeys
- isARepeat: NO /* isARepeat can't be supported with X */
+ isARepeat: keyRepeat
keyCode: keyCode];
return event;
Index: Source/x11/XGGLFormat.m
===================================================================
--- Source/x11/XGGLFormat.m (Revision 28048)
+++ Source/x11/XGGLFormat.m (Arbeitskopie)
@@ -26,71 +26,103 @@
*/
#include "config.h"
+
#ifdef HAVE_GLX
+
#include <Foundation/NSDebug.h>
#include <Foundation/NSException.h>
#include <Foundation/NSData.h>
+#include <Foundation/NSDictionary.h>
#include <GNUstepGUI/GSDisplayServer.h>
#include "x11/XGServer.h"
#include "x11/XGOpenGL.h"
#include <X11/Xlib.h>
+#include <math.h>
-#define MAKE_DISPLAY(dpy) Display *dpy;\
- dpy = [(XGServer *)GSCurrentServer() xDisplay];\
- NSAssert(dpy != NULL, NSInternalInconsistencyException)
-
@implementation XGGLPixelFormat
-/* FIXME:
- we assume that the ABI of NSOpenGLPixelFormatAttribute matches the ABI
- of glX. Apparently, this is true for the most useful attributes.
-*/
++ (int) glxMinorVersion
+{
+ Display * display = [ (XGServer *)GSCurrentServer() xDisplay ];
+ NSDictionary * attributes = [ GSCurrentServer() attributes ];
+ NSString * sn = [ attributes objectForKey: GSScreenNumber ];
+ NSString * glxServerVersion = [ NSString stringWithFormat:@"%s", glXQueryServerString(display, [sn intValue], GLX_VERSION) ];
+ NSString * glxClientVersion = [ NSString stringWithFormat:@"%s", glXGetClientString(display, GLX_VERSION) ];
+
+ float serverversion = [ glxServerVersion floatValue ];
+ float clientversion = [ glxClientVersion floatValue ];
+
+ float serverIntegerPart;
+ float clientIntegerPart;
+ float fracServer = modff(serverversion, &serverIntegerPart);
+ float fracClient = modff(clientversion, &clientIntegerPart);
+
+ if ( serverIntegerPart == 1.0f && clientIntegerPart == 1.0f )
+ {
+ fracServer = rintf(fracServer * 10.0f);
+ fracClient = rintf(fracClient * 10.0f);
+
+ NSDebugMLLog(@"GLX", @"server %f client %f", fracServer, fracClient );
+
+ return (int)MIN(fracServer, fracClient);
+ }
+
+ return -1;
+}
+
+// Works for some attributes only
- (void) getValues: (GLint *)vals
forAttribute: (NSOpenGLPixelFormatAttribute)attrib
forVirtualScreen: (GLint)screen
{
- MAKE_DISPLAY(dpy);
- GLint error;
-
- NSAssert(((GSglxMinorVersion (dpy) >= 3) ? (void *)configurations.fbconfig : (void *)configurations.visualinfo) != NULL
- && configurationCount > 0,
+ NSAssert((fbconfig != NULL || visualinfo != NULL) && configurationCount > 0,
NSInternalInconsistencyException);
- if (GSglxMinorVersion(dpy) >= 3)
+ int error;
+
+ if (glxminorversion >= 3)
{
- error = glXGetFBConfigAttrib(dpy, configurations.fbconfig[0], attrib, vals);
+ error = glXGetFBConfigAttrib(display, fbconfig[0], attrib, vals);
if ( error != 0 )
NSDebugMLLog( @"GLX", @"Can not get FB attribute for pixel format %@ - Errror %u",
self, error );
}
else
{
- error = glXGetConfig(dpy, configurations.visualinfo, attrib, vals);
+ error = glXGetConfig(display, visualinfo, attrib, vals);
if ( error != 0 )
NSDebugMLLog( @"GLX", @"Can not get FB attribute for pixel format %@ - Errror %u",
self, error );
- if ( error != 0 )
- NSDebugMLLog( @"GLX", @"Can not get FB attribute for pixel format %@ - Errror %u",
- self, error );
}
}
-- (id)initWithAttributes:(NSOpenGLPixelFormatAttribute *)attribs
+- (NSMutableData *) assembleGLXAttributes:(NSOpenGLPixelFormatAttribute *)pixelFormatAttributes
{
int AccumSize;
- NSOpenGLPixelFormatAttribute *ptr = attribs;
+ NSOpenGLPixelFormatAttribute *ptr = pixelFormatAttributes;
NSMutableData *data = [NSMutableData data];
- MAKE_DISPLAY(dpy);
- GLint drawable_type = 0;
-#define append(a, b) do {int v1 = a; int v2 = b; [data appendBytes: &v1 length: sizeof(v1)];\
- [data appendBytes: &v2 length: sizeof(v2)];} while (0)
+#define append(a, b) \
+do \
+{ \
+ int v1 = a; \
+ int v2 = b; \
+ [data appendBytes: &v1 length: sizeof(v1)]; \
+ [data appendBytes: &v2 length: sizeof(v2)]; \
+} while (0)
-#define append1(a) do {int v1 = a; [data appendBytes: &v1 length: sizeof(v1)];} while (0)
+#define append1(a) \
+do \
+{ \
+ int v1 = a; \
+ [data appendBytes: &v1 length: sizeof(v1)]; \
+} while (0)
- if (GSglxMinorVersion (dpy) < 3)
+ GLint drawable_type = 0;
+
+ if (glxminorversion < 3)
{
append1 (GLX_RGBA);
}
@@ -110,95 +142,138 @@
case NSOpenGLPFASingleRenderer:
case NSOpenGLPFAAllRenderers:
case NSOpenGLPFAAccelerated:
- if (GSglxMinorVersion(dpy) < 3)
- append(GLX_USE_GL,YES);
- break;
+ if (glxminorversion < 3)
+ {
+ append(GLX_USE_GL,YES);
+ break;
+ }
case NSOpenGLPFADoubleBuffer:
- append(GLX_DOUBLEBUFFER, YES);
- break;
+ {
+ append(GLX_DOUBLEBUFFER, YES);
+ break;
+ }
case NSOpenGLPFAStereo:
- append(GLX_STEREO, YES);
- break;
+ {
+ append(GLX_STEREO, YES);
+ break;
+ }
case NSOpenGLPFAAuxBuffers:
- ptr++;
- append(GLX_AUX_BUFFERS, *ptr);
- break;
+ {
+ ptr++;
+ append(GLX_AUX_BUFFERS, *ptr);
+ break;
+ }
case NSOpenGLPFAColorSize:
- ptr++;
- append(GLX_RED_SIZE, *ptr);
- append(GLX_GREEN_SIZE, *ptr);
- append(GLX_BLUE_SIZE, *ptr);
- break;
+ {
+ ptr++;
+ append(GLX_RED_SIZE, *ptr);
+ append(GLX_GREEN_SIZE, *ptr);
+ append(GLX_BLUE_SIZE, *ptr);
+ break;
+ }
case NSOpenGLPFAAlphaSize:
- ptr++;
- append(GLX_ALPHA_SIZE, *ptr);
- break;
+ {
+ ptr++;
+ append(GLX_ALPHA_SIZE, *ptr);
+ break;
+ }
case NSOpenGLPFADepthSize:
- ptr++;
- append(GLX_DEPTH_SIZE, *ptr);
- break;
+ {
+ ptr++;
+ append(GLX_DEPTH_SIZE, *ptr);
+ break;
+ }
case NSOpenGLPFAStencilSize:
- ptr++;
- append(GLX_STENCIL_SIZE, *ptr);
- break;
+ {
+ ptr++;
+ append(GLX_STENCIL_SIZE, *ptr);
+ break;
+ }
case NSOpenGLPFAAccumSize:
- ptr++;
- //has to been tested - I did it in that way....
- //FIXME? I don't understand...
- //append(GLX_ACCUM_RED_SIZE, *ptr/3);
- //append(GLX_ACCUM_GREEN_SIZE, *ptr/3);
- //append(GLX_ACCUM_BLUE_SIZE, *ptr/3);
- AccumSize=*ptr;
- switch (AccumSize)
- {
- case 8:
- append(GLX_ACCUM_RED_SIZE, 3);
- append(GLX_ACCUM_GREEN_SIZE, 3);
- append(GLX_ACCUM_BLUE_SIZE, 2);
- append(GLX_ACCUM_ALPHA_SIZE, 0);
- break;
- case 15:
- case 16:
- append(GLX_ACCUM_RED_SIZE, 5);
- append(GLX_ACCUM_GREEN_SIZE, 5);
- append(GLX_ACCUM_BLUE_SIZE, 5);
- append(GLX_ACCUM_ALPHA_SIZE, 0);
- break;
- case 24:
- append(GLX_ACCUM_RED_SIZE, 8);
- append(GLX_ACCUM_GREEN_SIZE, 8);
- append(GLX_ACCUM_BLUE_SIZE, 8);
- append(GLX_ACCUM_ALPHA_SIZE, 0);
- break;
- case 32:
- append(GLX_ACCUM_RED_SIZE, 8);
- append(GLX_ACCUM_GREEN_SIZE, 8);
- append(GLX_ACCUM_BLUE_SIZE, 8);
- append(GLX_ACCUM_ALPHA_SIZE, 8);
- break;
- }
- break;
- case NSOpenGLPFAWindow:
- drawable_type |= GLX_WINDOW_BIT;
- break;
- case NSOpenGLPFAPixelBuffer:
- drawable_type |= GLX_PBUFFER_BIT;
- break;
+ {
+ ptr++;
+ AccumSize=*ptr;
+ switch (AccumSize)
+ {
+ case 8:
+ append(GLX_ACCUM_RED_SIZE, 3);
+ append(GLX_ACCUM_GREEN_SIZE, 3);
+ append(GLX_ACCUM_BLUE_SIZE, 2);
+ append(GLX_ACCUM_ALPHA_SIZE, 0);
+ break;
+ case 15:
+ case 16:
+ append(GLX_ACCUM_RED_SIZE, 5);
+ append(GLX_ACCUM_GREEN_SIZE, 5);
+ append(GLX_ACCUM_BLUE_SIZE, 5);
+ append(GLX_ACCUM_ALPHA_SIZE, 0);
+ break;
+ case 24:
+ append(GLX_ACCUM_RED_SIZE, 8);
+ append(GLX_ACCUM_GREEN_SIZE, 8);
+ append(GLX_ACCUM_BLUE_SIZE, 8);
+ append(GLX_ACCUM_ALPHA_SIZE, 0);
+ break;
+ case 32:
+ append(GLX_ACCUM_RED_SIZE, 8);
+ append(GLX_ACCUM_GREEN_SIZE, 8);
+ append(GLX_ACCUM_BLUE_SIZE, 8);
+ append(GLX_ACCUM_ALPHA_SIZE, 8);
+ break;
+ }
+ break;
+ }
+
+ case NSOpenGLPFAWindow:
+ {
+ drawable_type |= GLX_WINDOW_BIT;
+ break;
+ }
+ case NSOpenGLPFAPixelBuffer:
+ {
+ drawable_type |= GLX_PBUFFER_BIT;
+ break;
+ }
case NSOpenGLPFAOffScreen:
- drawable_type |= GLX_PIXMAP_BIT;
- break;
+ {
+ drawable_type |= GLX_PIXMAP_BIT;
+ break;
+ }
//can not be handle by X11
case NSOpenGLPFAMinimumPolicy:
- break;
+ {
+ break;
+ }
// can not be handle by X11
case NSOpenGLPFAMaximumPolicy:
- break;
+ {
+ break;
+ }
- //FIXME all of this stuff...
case NSOpenGLPFAFullScreen:
+ {
+ break;
+ }
case NSOpenGLPFASampleBuffers:
+ {
+ if ( glxminorversion >= 4 )
+ {
+ ptr++;
+ append(GLX_SAMPLE_BUFFERS, *ptr);
+ break;
+ }
+ }
case NSOpenGLPFASamples:
+ {
+ if ( glxminorversion >= 4 )
+ {
+ ptr++;
+ append(GLX_SAMPLES, *ptr);
+ break;
+ }
+ }
+
case NSOpenGLPFAAuxDepthStencil:
case NSOpenGLPFARendererID:
case NSOpenGLPFANoRecovery:
@@ -228,29 +303,40 @@
append1(None);
- //FIXME, what screen number ?
- if (GSglxMinorVersion (dpy) >= 3)
+ return data;
+
+#undef append
+#undef append1
+
+}
+
+- (id)initWithAttributes:(NSOpenGLPixelFormatAttribute *)attribs
+{
+ self = [ super init ];
+
+ fbconfig = NULL;
+ visualinfo = NULL;
+
+ display = [(XGServer *)GSCurrentServer() xDisplay];
+ NSAssert(display != NULL, NSInternalInconsistencyException);
+
+ glxminorversion = [ XGGLPixelFormat glxMinorVersion ];
+ NSDebugMLLog(@"GLX", @"minor version %d", glxminorversion );
+
+ NSMutableData * glxAttributes = [ self assembleGLXAttributes:attribs ];
+ NSDictionary * dsattributes = [ GSCurrentServer() attributes ];
+
+ if (glxminorversion >= 3)
{
- configurations.fbconfig = glXChooseFBConfig(dpy, DefaultScreen(dpy),
- [data mutableBytes],
- &configurationCount);
- if ( configurations.fbconfig == NULL )
- NSDebugMLLog( @"GLX", @"Can not choose FB config for pixel format %@",
- self );
+ fbconfig = glXChooseFBConfig(display, [[dsattributes objectForKey: GSScreenNumber] intValue], [glxAttributes mutableBytes], &configurationCount);
+ visualinfo = glXGetVisualFromFBConfig(display,fbconfig[0]);
}
else
{
- configurations.visualinfo = glXChooseVisual(dpy, DefaultScreen(dpy),
- [data mutableBytes]);
- if((void *)configurations.visualinfo != NULL)
- configurationCount = 1;
- else
- NSDebugMLLog( @"GLX", @"Can not choose FB config for pixel format %@",
- self );
+ visualinfo = glXChooseVisual(display, [[dsattributes objectForKey: GSScreenNumber] intValue], [glxAttributes mutableBytes]);
}
- if (((GSglxMinorVersion (dpy) >= 3) ? (void *)configurations.fbconfig :
- (void *)configurations.visualinfo) == NULL)
+ if (fbconfig == NULL && visualinfo == NULL)
{
NSDebugMLLog(@"GLX", @"no pixel format found matching what is required");
RELEASE(self);
@@ -265,33 +351,28 @@
}
}
-- (XVisualInfo *)xvinfo
+- (Display *) display
{
- MAKE_DISPLAY(dpy);
+ return display;
+}
- if (GSglxMinorVersion(dpy) >= 3)
- {
- return glXGetVisualFromFBConfig(dpy, configurations.fbconfig[0]);
- }
- else
- {
- return configurations.visualinfo;
- }
+- (XVisualInfo *) visualinfo
+{
+ return visualinfo;
}
- (GLXContext)createGLXContext: (XGGLContext *)share
{
GLXContext context;
- MAKE_DISPLAY(dpy);
- if (GSglxMinorVersion(dpy) >= 3)
+ if (glxminorversion >= 3)
{
- context = glXCreateNewContext(dpy, configurations.fbconfig[0],
+ context = glXCreateNewContext(display, fbconfig[0],
GLX_RGBA_TYPE, [share glxcontext], YES);
}
else
{
- context = glXCreateContext(dpy, configurations.visualinfo,
+ context = glXCreateContext(display, visualinfo,
[share glxcontext], GL_TRUE);
}
if ( context == NULL )
@@ -304,12 +385,10 @@
- (GLXWindow) drawableForWindow: (Window)xwindowid
{
GLXWindow win;
- MAKE_DISPLAY(dpy);
- if (GSglxMinorVersion(dpy) >= 3)
+ if (glxminorversion >= 3)
{
- win = glXCreateWindow(dpy, configurations.fbconfig[0],
- xwindowid, NULL);
+ win = glXCreateWindow(display, fbconfig[0], xwindowid, NULL);
}
else
{
@@ -327,17 +406,14 @@
{
//FIXME
//are we sure that X Connection is still up here ?
- MAKE_DISPLAY(dpy);
- if (GSglxMinorVersion(dpy) >= 3)
+ if (glxminorversion >= 3)
{
- XFree(configurations.fbconfig);
+ XFree(fbconfig);
}
- else
- {
- XFree(configurations.visualinfo);
- }
+ XFree(visualinfo);
+
NSDebugMLLog(@"GLX", @"deallocation");
[super dealloc];
}
@@ -350,4 +426,5 @@
}
@end
+
#endif
Index: Headers/x11/XGOpenGL.h
===================================================================
--- Headers/x11/XGOpenGL.h (Revision 28048)
+++ Headers/x11/XGOpenGL.h (Arbeitskopie)
@@ -25,23 +25,19 @@
Boston, MA 02110-1301, USA.
*/
-#ifndef _GNUstep_H_XGOpenGL
-#define _GNUstep_H_XGOpenGL
+#ifndef _GNUstep_H_XGOpenGL_
+#define _GNUstep_H_XGOpenGL_
+#include <GL/glx.h>
#include <AppKit/NSOpenGL.h>
-#define id _gs_avoid_id_collision
-#define BOOL XWINDOWSBOOL
-#include <GL/glx.h>
-#undef id
-#undef BOOL
-
@class NSView;
@class XGXSubWindow;
@class XGGLPixelFormat;
@interface XGGLContext : NSOpenGLContext
{
+ int glxminorversion;
GLXContext glx_context;
GLXWindow glx_drawable;
XGXSubWindow *xSubWindow;
@@ -55,33 +51,19 @@
@interface XGGLPixelFormat : NSOpenGLPixelFormat
{
- @public
- union
- {
- GLXFBConfig *fbconfig;
- XVisualInfo *visualinfo;
- } configurations;
-
+ Display * display;
+ long int glxminorversion;
+ GLXFBConfig *fbconfig;
+ XVisualInfo *visualinfo;
int configurationCount;
}
-- (XVisualInfo *)xvinfo;
-- (GLXContext)createGLXContext: (XGGLContext *)share;
++ (int) glxMinorVersion;
+- (Display *) display;
+- (XVisualInfo *) visualinfo;
+- (GLXContext) createGLXContext: (XGGLContext *)share;
- (GLXWindow) drawableForWindow: (Window)xwindowid;
@end
-static inline int
-GSglxMinorVersion(Display *dpy)
-{
- int major, minor;
-
- if (False == glXQueryVersion(dpy, &major, &minor))
- {
- return -1;
- }
-
- return minor;
-}
-
#endif
Index: Source/GSDisplayServer.m
===================================================================
--- Source/GSDisplayServer.m (Revision 28048)
+++ Source/GSDisplayServer.m (Arbeitskopie)
@@ -857,6 +857,11 @@
[self subclassResponsibility: _cmd];
}
+- (void) setmouseposition: (int)x :(int)y :(int)win;
+{
+ [self subclassResponsibility: _cmd];
+}
+
/** Hides the cursor */
- (void) hidecursor
{
Index: Headers/Additions/GNUstepGUI/GSDisplayServer.h
===================================================================
--- Headers/Additions/GNUstepGUI/GSDisplayServer.h (Revision 28048)
+++ Headers/Additions/GNUstepGUI/GSDisplayServer.h (Arbeitskopie)
@@ -156,6 +156,7 @@
- (NSPoint) mouseLocationOnScreen: (int)aScreen window: (int *)win;
- (BOOL) capturemouse: (int)win;
- (void) releasemouse;
+- (void) setmouseposition:(int)x :(int)y :(int)win;
- (void) hidecursor;
- (void) showcursor;
- (void) standardcursor: (int) style : (void**)cid;
_______________________________________________
Gnustep-dev mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnustep-dev