comparison src/video/x11/SDL_x11dyn.c @ 1662:782fd950bd46 SDL-1.3

Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API. WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid. The code is now run through a consistent indent format: indent -i4 -nut -nsc -br -ce The headers are being converted to automatically generate doxygen documentation.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 28 May 2006 13:04:16 +0000
parents 14717b52abc0
children 4da1ee79c9af
comparison
equal deleted inserted replaced
1661:281d3f4870e5 1662:782fd950bd46
51 #endif 51 #endif
52 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR 52 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR
53 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR NULL 53 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR NULL
54 #endif 54 #endif
55 55
56 static x11dynlib x11libs[] = 56 static x11dynlib x11libs[] = {
57 { 57 {NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC},
58 { NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC }, 58 {NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT},
59 { NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT }, 59 {NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER},
60 { NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER }, 60 {NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR},
61 { NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR },
62 }; 61 };
63 62
64 static void X11_GetSym(const char *fnname, int *rc, void **fn) 63 static void
64 X11_GetSym (const char *fnname, int *rc, void **fn)
65 { 65 {
66 int i; 66 int i;
67 for (i = 0; i < SDL_TABLESIZE(x11libs); i++) { 67 for (i = 0; i < SDL_TABLESIZE (x11libs); i++) {
68 if (x11libs[i].lib != NULL) 68 if (x11libs[i].lib != NULL) {
69 { 69 *fn = SDL_LoadFunction (x11libs[i].lib, fnname);
70 *fn = SDL_LoadFunction(x11libs[i].lib, fnname); 70 if (*fn != NULL)
71 if (*fn != NULL) 71 break;
72 break; 72 }
73 } 73 }
74 }
75 74
76 #if DEBUG_DYNAMIC_X11 75 #if DEBUG_DYNAMIC_X11
77 if (*fn != NULL) 76 if (*fn != NULL)
78 printf("X11: Found '%s' in %s (%p)\n", fnname, x11libs[i].libname, *fn); 77 printf ("X11: Found '%s' in %s (%p)\n", fnname, x11libs[i].libname,
79 else 78 *fn);
80 printf("X11: Symbol '%s' NOT FOUND!\n", fnname); 79 else
81 #endif 80 printf ("X11: Symbol '%s' NOT FOUND!\n", fnname);
81 #endif
82 82
83 if (*fn == NULL) 83 if (*fn == NULL)
84 *rc = 0; /* kill this module. */ 84 *rc = 0; /* kill this module. */
85 } 85 }
86 86
87 87
88 /* Define all the function pointers and wrappers... */ 88 /* Define all the function pointers and wrappers... */
89 #define SDL_X11_MODULE(modname) 89 #define SDL_X11_MODULE(modname)
91 static rc (*p##fn) params = NULL; \ 91 static rc (*p##fn) params = NULL; \
92 rc fn params { ret p##fn args ; } 92 rc fn params { ret p##fn args ; }
93 #include "SDL_x11sym.h" 93 #include "SDL_x11sym.h"
94 #undef SDL_X11_MODULE 94 #undef SDL_X11_MODULE
95 #undef SDL_X11_SYM 95 #undef SDL_X11_SYM
96 #endif /* SDL_VIDEO_DRIVER_X11_DYNAMIC */ 96 #endif /* SDL_VIDEO_DRIVER_X11_DYNAMIC */
97 97
98 /* Annoying varargs entry point... */ 98 /* Annoying varargs entry point... */
99 #ifdef X_HAVE_UTF8_STRING 99 #ifdef X_HAVE_UTF8_STRING
100 XIC (*pXCreateIC)(XIM,...) = NULL; 100 XIC (*pXCreateIC) (XIM,...) = NULL;
101 #endif 101 #endif
102 102
103 /* These SDL_X11_HAVE_* flags are here whether you have dynamic X11 or not. */ 103 /* These SDL_X11_HAVE_* flags are here whether you have dynamic X11 or not. */
104 #define SDL_X11_MODULE(modname) int SDL_X11_HAVE_##modname = 1; 104 #define SDL_X11_MODULE(modname) int SDL_X11_HAVE_##modname = 1;
105 #define SDL_X11_SYM(rc,fn,params,args,ret) 105 #define SDL_X11_SYM(rc,fn,params,args,ret)
108 #undef SDL_X11_SYM 108 #undef SDL_X11_SYM
109 109
110 110
111 static int x11_load_refcount = 0; 111 static int x11_load_refcount = 0;
112 112
113 void SDL_X11_UnloadSymbols(void) 113 void
114 SDL_X11_UnloadSymbols (void)
114 { 115 {
115 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC 116 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC
116 /* Don't actually unload if more than one module is using the libs... */ 117 /* Don't actually unload if more than one module is using the libs... */
117 if (x11_load_refcount > 0) { 118 if (x11_load_refcount > 0) {
118 if (--x11_load_refcount == 0) { 119 if (--x11_load_refcount == 0) {
119 int i; 120 int i;
120 121
121 /* set all the function pointers to NULL. */ 122 /* set all the function pointers to NULL. */
122 #define SDL_X11_MODULE(modname) SDL_X11_HAVE_##modname = 1; 123 #define SDL_X11_MODULE(modname) SDL_X11_HAVE_##modname = 1;
123 #define SDL_X11_SYM(rc,fn,params,args,ret) p##fn = NULL; 124 #define SDL_X11_SYM(rc,fn,params,args,ret) p##fn = NULL;
124 #include "SDL_x11sym.h" 125 #include "SDL_x11sym.h"
125 #undef SDL_X11_MODULE 126 #undef SDL_X11_MODULE
126 #undef SDL_X11_SYM 127 #undef SDL_X11_SYM
127 128
128 #ifdef X_HAVE_UTF8_STRING 129 #ifdef X_HAVE_UTF8_STRING
129 pXCreateIC = NULL; 130 pXCreateIC = NULL;
130 #endif 131 #endif
131 132
132 for (i = 0; i < SDL_TABLESIZE(x11libs); i++) { 133 for (i = 0; i < SDL_TABLESIZE (x11libs); i++) {
133 if (x11libs[i].lib != NULL) { 134 if (x11libs[i].lib != NULL) {
134 SDL_UnloadObject(x11libs[i].lib); 135 SDL_UnloadObject (x11libs[i].lib);
135 x11libs[i].lib = NULL; 136 x11libs[i].lib = NULL;
136 } 137 }
137 } 138 }
138 } 139 }
139 } 140 }
140 #endif 141 #endif
141 } 142 }
142 143
143 /* returns non-zero if all needed symbols were loaded. */ 144 /* returns non-zero if all needed symbols were loaded. */
144 int SDL_X11_LoadSymbols(void) 145 int
146 SDL_X11_LoadSymbols (void)
145 { 147 {
146 int rc = 1; /* always succeed if not using Dynamic X11 stuff. */ 148 int rc = 1; /* always succeed if not using Dynamic X11 stuff. */
147 149
148 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC 150 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC
149 /* deal with multiple modules (dga, x11, etc) needing these symbols... */ 151 /* deal with multiple modules (dga, x11, etc) needing these symbols... */
150 if (x11_load_refcount++ == 0) { 152 if (x11_load_refcount++ == 0) {
151 int i; 153 int i;
152 int *thismod = NULL; 154 int *thismod = NULL;
153 for (i = 0; i < SDL_TABLESIZE(x11libs); i++) { 155 for (i = 0; i < SDL_TABLESIZE (x11libs); i++) {
154 if (x11libs[i].libname != NULL) { 156 if (x11libs[i].libname != NULL) {
155 x11libs[i].lib = SDL_LoadObject(x11libs[i].libname); 157 x11libs[i].lib = SDL_LoadObject (x11libs[i].libname);
156 } 158 }
157 } 159 }
158 #define SDL_X11_MODULE(modname) thismod = &SDL_X11_HAVE_##modname; 160 #define SDL_X11_MODULE(modname) thismod = &SDL_X11_HAVE_##modname;
159 #define SDL_X11_SYM(a,fn,x,y,z) X11_GetSym(#fn,thismod,(void**)&p##fn); 161 #define SDL_X11_SYM(a,fn,x,y,z) X11_GetSym(#fn,thismod,(void**)&p##fn);
160 #include "SDL_x11sym.h" 162 #include "SDL_x11sym.h"
161 #undef SDL_X11_MODULE 163 #undef SDL_X11_MODULE
162 #undef SDL_X11_SYM 164 #undef SDL_X11_SYM
163 165
164 #ifdef X_HAVE_UTF8_STRING 166 #ifdef X_HAVE_UTF8_STRING
165 X11_GetSym("XCreateIC",&SDL_X11_HAVE_UTF8,(void **)&pXCreateIC); 167 X11_GetSym ("XCreateIC", &SDL_X11_HAVE_UTF8, (void **) &pXCreateIC);
166 #endif 168 #endif
167 169
168 if (!SDL_X11_HAVE_BASEXLIB) { /* some required symbol didn't load. */ 170 if (!SDL_X11_HAVE_BASEXLIB) { /* some required symbol didn't load. */
169 SDL_X11_UnloadSymbols(); /* in case something got loaded... */ 171 SDL_X11_UnloadSymbols (); /* in case something got loaded... */
170 rc = 0; 172 rc = 0;
171 } 173 }
172 } 174 }
173 #else 175 #else
174 #ifdef X_HAVE_UTF8_STRING 176 #ifdef X_HAVE_UTF8_STRING
175 pXCreateIC = XCreateIC; 177 pXCreateIC = XCreateIC;
176 #endif 178 #endif
177 #endif 179 #endif
178 180
179 return rc; 181 return rc;
180 } 182 }
181 183
182 /* end of SDL_x11dyn.c ... */ 184 /* end of SDL_x11dyn.c ... */
183 185 /* vi: set ts=4 sw=4 expandtab: */