782
|
1 |
--- qt-x11-free-3.3.8/src/kernel/qpixmap_x11.cpp.orig 2007-02-02 19:31:11.000000000 +0530
|
|
2 |
+++ qt-x11-free-3.3.8/src/kernel/qpixmap_x11.cpp 2008-01-08 20:53:54.083245433 +0530
|
|
3 |
@@ -37,7 +37,19 @@
|
|
4 |
|
|
5 |
// NOT REVISED
|
|
6 |
|
|
7 |
+#include "qplatformdefs.h"
|
|
8 |
+
|
|
9 |
+#if defined(Q_OS_WIN32) && defined(QT_MITSHM)
|
|
10 |
+#undef QT_MITSHM
|
|
11 |
+#endif
|
|
12 |
+
|
|
13 |
+#ifdef QT_MITSHM
|
|
14 |
+
|
|
15 |
+// Use the MIT Shared Memory extension for pixmap<->image conversions
|
|
16 |
+#define QT_MITSHM_CONVERSIONS
|
|
17 |
+
|
|
18 |
// Uncomment the next line to enable the MIT Shared Memory extension
|
|
19 |
+// for QPixmap::xForm()
|
|
20 |
//
|
|
21 |
// WARNING: This has some problems:
|
|
22 |
//
|
|
23 |
@@ -45,14 +57,13 @@
|
|
24 |
// 2. Qt does not handle the ShmCompletion message, so you will
|
|
25 |
// get strange effects if you xForm() repeatedly.
|
|
26 |
//
|
|
27 |
-// #define QT_MITSHM
|
|
28 |
+// #define QT_MITSHM_XFORM
|
|
29 |
|
|
30 |
-#if defined(Q_OS_WIN32) && defined(QT_MITSHM)
|
|
31 |
-#undef QT_MITSHM
|
|
32 |
+#else
|
|
33 |
+#undef QT_MITSHM_CONVERSIONS
|
|
34 |
+#undef QT_MITSHM_XFORM
|
|
35 |
#endif
|
|
36 |
|
|
37 |
-#include "qplatformdefs.h"
|
|
38 |
-
|
|
39 |
#include "qbitmap.h"
|
|
40 |
#include "qpaintdevicemetrics.h"
|
|
41 |
#include "qimage.h"
|
|
42 |
@@ -91,7 +102,7 @@
|
|
43 |
MIT Shared Memory Extension support: makes xForm noticeably (~20%) faster.
|
|
44 |
*****************************************************************************/
|
|
45 |
|
|
46 |
-#if defined(QT_MITSHM)
|
|
47 |
+#if defined(QT_MITSHM_XFORM)
|
|
48 |
|
|
49 |
static bool xshminit = FALSE;
|
|
50 |
static XShmSegmentInfo xshminfo;
|
|
51 |
@@ -173,8 +184,100 @@
|
|
52 |
// return FALSE;
|
|
53 |
// }
|
|
54 |
|
|
55 |
-#endif // QT_MITSHM
|
|
56 |
+#endif // QT_MITSHM_XFORM
|
|
57 |
+
|
|
58 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
59 |
|
|
60 |
+static bool qt_mitshm_error = false;
|
|
61 |
+static int qt_mitshm_errorhandler( Display*, XErrorEvent* )
|
|
62 |
+{
|
|
63 |
+ qt_mitshm_error = true;
|
|
64 |
+ return 0;
|
|
65 |
+}
|
|
66 |
+
|
|
67 |
+static XImage* qt_XShmCreateImage( Display* dpy, Visual* visual, unsigned int depth,
|
|
68 |
+ int format, int /*offset*/, char* /*data*/, unsigned int width, unsigned int height,
|
|
69 |
+ int /*bitmap_pad*/, int /*bytes_per_line*/, XShmSegmentInfo* shminfo )
|
|
70 |
+{
|
|
71 |
+ if( width * height * depth < 100*100*32 )
|
|
72 |
+ return NULL;
|
|
73 |
+ static int shm_inited = -1;
|
|
74 |
+ if( shm_inited == -1 ) {
|
|
75 |
+ if( XShmQueryExtension( dpy ))
|
|
76 |
+ shm_inited = 1;
|
|
77 |
+ else
|
|
78 |
+ shm_inited = 0;
|
|
79 |
+ }
|
|
80 |
+ if( shm_inited == 0 )
|
|
81 |
+ return NULL;
|
|
82 |
+ XImage* xi = XShmCreateImage( dpy, visual, depth, format, NULL, shminfo, width,
|
|
83 |
+ height );
|
|
84 |
+ if( xi == NULL )
|
|
85 |
+ return NULL;
|
|
86 |
+ shminfo->shmid = shmget( IPC_PRIVATE, xi->bytes_per_line * xi->height,
|
|
87 |
+ IPC_CREAT|0600);
|
|
88 |
+ if( shminfo->shmid < 0 ) {
|
|
89 |
+ XDestroyImage( xi );
|
|
90 |
+ return NULL;
|
|
91 |
+ }
|
|
92 |
+ shminfo->readOnly = False;
|
|
93 |
+ shminfo->shmaddr = (char*)shmat( shminfo->shmid, 0, 0 );
|
|
94 |
+ if( shminfo->shmaddr == (char*)-1 ) {
|
|
95 |
+ XDestroyImage( xi );
|
|
96 |
+ shmctl( shminfo->shmid, IPC_RMID, 0 );
|
|
97 |
+ return NULL;
|
|
98 |
+ }
|
|
99 |
+ xi->data = shminfo->shmaddr;
|
|
100 |
+#ifndef QT_MITSHM_RMID_IGNORES_REFCOUNT
|
|
101 |
+ // mark as deleted to automatically free the memory in case
|
|
102 |
+ // of a crash (but this doesn't work e.g. on Solaris)
|
|
103 |
+ shmctl( shminfo->shmid, IPC_RMID, 0 );
|
|
104 |
+#endif
|
|
105 |
+ if( shm_inited == 1 ) { // first time
|
|
106 |
+ XErrorHandler old_h = XSetErrorHandler( qt_mitshm_errorhandler );
|
|
107 |
+ XShmAttach( dpy, shminfo );
|
|
108 |
+ shm_inited = 2;
|
|
109 |
+ XSync( dpy, False );
|
|
110 |
+ XSetErrorHandler( old_h );
|
|
111 |
+ if( qt_mitshm_error ) { // oops ... perhaps we are remote?
|
|
112 |
+ shm_inited = 0;
|
|
113 |
+ XDestroyImage( xi );
|
|
114 |
+ shmdt( shminfo->shmaddr );
|
|
115 |
+#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT
|
|
116 |
+ shmctl( shminfo->shmid, IPC_RMID, 0 );
|
|
117 |
+#endif
|
|
118 |
+ return NULL;
|
|
119 |
+ }
|
|
120 |
+ } else
|
|
121 |
+ XShmAttach( dpy, shminfo );
|
|
122 |
+ return xi;
|
|
123 |
+}
|
|
124 |
+
|
|
125 |
+static void qt_XShmDestroyImage( XImage* xi, XShmSegmentInfo* shminfo )
|
|
126 |
+{
|
|
127 |
+ XShmDetach( QPaintDevice::x11AppDisplay(), shminfo );
|
|
128 |
+ XDestroyImage( xi );
|
|
129 |
+ shmdt( shminfo->shmaddr );
|
|
130 |
+#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT
|
|
131 |
+ shmctl( shminfo->shmid, IPC_RMID, 0 );
|
|
132 |
+#endif
|
|
133 |
+}
|
|
134 |
+
|
|
135 |
+static XImage* qt_XShmGetImage( const QPixmap* pix, int format,
|
|
136 |
+ XShmSegmentInfo* shminfo )
|
|
137 |
+{
|
|
138 |
+ XImage* xi = qt_XShmCreateImage( pix->x11Display(), (Visual*)pix->x11Visual(),
|
|
139 |
+ pix->depth(), format, 0, 0, pix->width(), pix->height(), 32, 0, shminfo );
|
|
140 |
+ if( xi == NULL )
|
|
141 |
+ return NULL;
|
|
142 |
+ if( XShmGetImage( pix->x11Display(), pix->handle(), xi, 0, 0, AllPlanes ) == False ) {
|
|
143 |
+ qt_XShmDestroyImage( xi, shminfo );
|
|
144 |
+ return NULL;
|
|
145 |
+ }
|
|
146 |
+ return xi;
|
|
147 |
+}
|
|
148 |
+
|
|
149 |
+#endif // QT_MITSHM_CONVERSIONS
|
|
150 |
|
|
151 |
/*****************************************************************************
|
|
152 |
Internal functions
|
|
153 |
@@ -627,9 +730,20 @@
|
|
154 |
d = 32; // > 8 ==> 32
|
|
155 |
|
|
156 |
XImage *xi = (XImage *)data->ximage; // any cached ximage?
|
|
157 |
- if ( !xi ) // fetch data from X server
|
|
158 |
- xi = XGetImage( x11Display(), hd, 0, 0, w, h, AllPlanes,
|
|
159 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
160 |
+ bool mitshm_ximage = false;
|
|
161 |
+ XShmSegmentInfo shminfo;
|
|
162 |
+#endif
|
|
163 |
+ if ( !xi ) { // fetch data from X server
|
|
164 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
165 |
+ xi = qt_XShmGetImage( this, mono ? XYPixmap : ZPixmap, &shminfo );
|
|
166 |
+ if( xi ) {
|
|
167 |
+ mitshm_ximage = true;
|
|
168 |
+ } else
|
|
169 |
+#endif
|
|
170 |
+ xi = XGetImage( x11Display(), hd, 0, 0, w, h, AllPlanes,
|
|
171 |
mono ? XYPixmap : ZPixmap );
|
|
172 |
+ }
|
|
173 |
Q_CHECK_PTR( xi );
|
|
174 |
if (!xi)
|
|
175 |
return image; // null image
|
|
176 |
@@ -640,15 +754,31 @@
|
|
177 |
QImage::LittleEndian : QImage::BigEndian;
|
|
178 |
}
|
|
179 |
image.create( w, h, d, 0, bitOrder );
|
|
180 |
- if ( image.isNull() ) // could not create image
|
|
181 |
+ if ( image.isNull() ) { // could not create image
|
|
182 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
183 |
+ if( mitshm_ximage )
|
|
184 |
+ qt_XShmDestroyImage( xi, &shminfo );
|
|
185 |
+ else
|
|
186 |
+#endif
|
|
187 |
+ qSafeXDestroyImage( xi );
|
|
188 |
return image;
|
|
189 |
+ }
|
|
190 |
|
|
191 |
const QPixmap* msk = mask();
|
|
192 |
const QPixmap *alf = data->alphapm;
|
|
193 |
|
|
194 |
QImage alpha;
|
|
195 |
if (alf) {
|
|
196 |
- XImage *axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap);
|
|
197 |
+ XImage* axi;
|
|
198 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
199 |
+ bool mitshm_aximage = false;
|
|
200 |
+ XShmSegmentInfo ashminfo;
|
|
201 |
+ axi = qt_XShmGetImage( alf, ZPixmap, &ashminfo );
|
|
202 |
+ if( axi ) {
|
|
203 |
+ mitshm_aximage = true;
|
|
204 |
+ } else
|
|
205 |
+#endif
|
|
206 |
+ axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap);
|
|
207 |
|
|
208 |
if (axi) {
|
|
209 |
image.setAlphaBuffer( TRUE );
|
|
210 |
@@ -662,7 +792,12 @@
|
|
211 |
src += axi->bytes_per_line;
|
|
212 |
}
|
|
213 |
|
|
214 |
- qSafeXDestroyImage( axi );
|
|
215 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
216 |
+ if( mitshm_aximage )
|
|
217 |
+ qt_XShmDestroyImage( axi, &ashminfo );
|
|
218 |
+ else
|
|
219 |
+#endif
|
|
220 |
+ qSafeXDestroyImage( axi );
|
|
221 |
}
|
|
222 |
} else if (msk) {
|
|
223 |
image.setAlphaBuffer( TRUE );
|
|
224 |
@@ -804,6 +939,12 @@
|
|
225 |
xi->bits_per_pixel );
|
|
226 |
#endif
|
|
227 |
image.reset();
|
|
228 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
229 |
+ if( mitshm_ximage )
|
|
230 |
+ qt_XShmDestroyImage( xi, &shminfo );
|
|
231 |
+ else
|
|
232 |
+#endif
|
|
233 |
+ qSafeXDestroyImage( xi );
|
|
234 |
return image;
|
|
235 |
}
|
|
236 |
|
|
237 |
@@ -909,10 +1050,22 @@
|
|
238 |
delete [] carr;
|
|
239 |
}
|
|
240 |
if ( data->optim != BestOptim ) { // throw away image data
|
|
241 |
- qSafeXDestroyImage( xi );
|
|
242 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
243 |
+ if( mitshm_ximage )
|
|
244 |
+ qt_XShmDestroyImage( xi, &shminfo );
|
|
245 |
+ else
|
|
246 |
+#endif
|
|
247 |
+ qSafeXDestroyImage( xi );
|
|
248 |
((QPixmap*)this)->data->ximage = 0;
|
|
249 |
- } else // keep ximage data
|
|
250 |
+ } else { // keep ximage data
|
|
251 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
252 |
+ if( mitshm_ximage ) { // copy the XImage?
|
|
253 |
+ qt_XShmDestroyImage( xi, &shminfo );
|
|
254 |
+ xi = 0;
|
|
255 |
+ }
|
|
256 |
+#endif
|
|
257 |
((QPixmap*)this)->data->ximage = xi;
|
|
258 |
+ }
|
|
259 |
|
|
260 |
return image;
|
|
261 |
}
|
|
262 |
@@ -1085,6 +1238,11 @@
|
|
263 |
bool trucol = (visual->c_class == TrueColor || visual->c_class == DirectColor);
|
|
264 |
int nbytes = image.numBytes();
|
|
265 |
uchar *newbits= 0;
|
|
266 |
+ int newbits_size = 0;
|
|
267 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
268 |
+ bool mitshm_ximage = false;
|
|
269 |
+ XShmSegmentInfo shminfo;
|
|
270 |
+#endif
|
|
271 |
|
|
272 |
if ( trucol ) { // truecolor display
|
|
273 |
QRgb pix[256]; // pixel translation table
|
|
274 |
@@ -1113,11 +1271,20 @@
|
|
275 |
}
|
|
276 |
}
|
|
277 |
|
|
278 |
- xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 );
|
|
279 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
280 |
+ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo );
|
|
281 |
+ if( xi != NULL ) {
|
|
282 |
+ mitshm_ximage = true;
|
|
283 |
+ newbits = (uchar*)xi->data;
|
|
284 |
+ }
|
|
285 |
+ else
|
|
286 |
+#endif
|
|
287 |
+ xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 );
|
|
288 |
Q_CHECK_PTR( xi );
|
|
289 |
if (!xi)
|
|
290 |
return false;
|
|
291 |
- newbits = (uchar *)malloc( xi->bytes_per_line*h );
|
|
292 |
+ if( newbits == NULL )
|
|
293 |
+ newbits = (uchar *)malloc( xi->bytes_per_line*h );
|
|
294 |
Q_CHECK_PTR( newbits );
|
|
295 |
if ( !newbits ) // no memory
|
|
296 |
return FALSE;
|
|
297 |
@@ -1323,6 +1490,7 @@
|
|
298 |
}
|
|
299 |
|
|
300 |
newbits = (uchar *)malloc( nbytes ); // copy image into newbits
|
|
301 |
+ newbits_size = nbytes;
|
|
302 |
Q_CHECK_PTR( newbits );
|
|
303 |
if ( !newbits ) // no memory
|
|
304 |
return FALSE;
|
|
305 |
@@ -1440,11 +1608,18 @@
|
|
306 |
}
|
|
307 |
|
|
308 |
if ( !xi ) { // X image not created
|
|
309 |
- xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 );
|
|
310 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
311 |
+ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo );
|
|
312 |
+ if( xi != NULL )
|
|
313 |
+ mitshm_ximage = true;
|
|
314 |
+ else
|
|
315 |
+#endif
|
|
316 |
+ xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 );
|
|
317 |
if ( xi->bits_per_pixel == 16 ) { // convert 8 bpp ==> 16 bpp
|
|
318 |
ushort *p2;
|
|
319 |
int p2inc = xi->bytes_per_line/sizeof(ushort);
|
|
320 |
ushort *newerbits = (ushort *)malloc( xi->bytes_per_line * h );
|
|
321 |
+ newbits_size = xi->bytes_per_line * h;
|
|
322 |
Q_CHECK_PTR( newerbits );
|
|
323 |
if ( !newerbits ) // no memory
|
|
324 |
return FALSE;
|
|
325 |
@@ -1462,7 +1637,15 @@
|
|
326 |
"(bpp=%d)", xi->bits_per_pixel );
|
|
327 |
#endif
|
|
328 |
}
|
|
329 |
- xi->data = (char *)newbits;
|
|
330 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
331 |
+ if( newbits_size > 0 && mitshm_ximage ) { // need to copy to shared memory
|
|
332 |
+ memcpy( xi->data, newbits, newbits_size );
|
|
333 |
+ free( newbits );
|
|
334 |
+ newbits = (uchar*)xi->data;
|
|
335 |
+ }
|
|
336 |
+ else
|
|
337 |
+#endif
|
|
338 |
+ xi->data = (char *)newbits;
|
|
339 |
}
|
|
340 |
|
|
341 |
if ( hd && (width() != (int)w || height() != (int)h || this->depth() != dd) ) {
|
|
342 |
@@ -1495,19 +1678,24 @@
|
|
343 |
|
|
344 |
}
|
|
345 |
|
|
346 |
- XPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ),
|
|
347 |
- xi, 0, 0, 0, 0, w, h );
|
|
348 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
349 |
+ if( mitshm_ximage )
|
|
350 |
+ XShmPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ),
|
|
351 |
+ xi, 0, 0, 0, 0, w, h, False );
|
|
352 |
+ else
|
|
353 |
+#endif
|
|
354 |
+ XPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ),
|
|
355 |
+ xi, 0, 0, 0, 0, w, h );
|
|
356 |
|
|
357 |
- if ( data->optim != BestOptim ) { // throw away image
|
|
358 |
- qSafeXDestroyImage( xi );
|
|
359 |
- data->ximage = 0;
|
|
360 |
- } else { // keep ximage that we created
|
|
361 |
- data->ximage = xi;
|
|
362 |
- }
|
|
363 |
data->w = w;
|
|
364 |
data->h = h;
|
|
365 |
data->d = dd;
|
|
366 |
|
|
367 |
+ XImage* axi = NULL;
|
|
368 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
369 |
+ bool mitshm_aximage = false;
|
|
370 |
+ XShmSegmentInfo ashminfo;
|
|
371 |
+#endif
|
|
372 |
if ( image.hasAlphaBuffer() ) {
|
|
373 |
QBitmap m;
|
|
374 |
m = image.createAlphaMask( conversion_flags );
|
|
375 |
@@ -1543,13 +1731,22 @@
|
|
376 |
data->alphapm->rendhd =
|
|
377 |
(HANDLE) XftDrawCreateAlpha( x11Display(), data->alphapm->hd, 8 );
|
|
378 |
|
|
379 |
- XImage *axi = XCreateImage(x11Display(), (Visual *) x11Visual(),
|
|
380 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
381 |
+ axi = qt_XShmCreateImage( x11Display(), (Visual*)x11Visual(),
|
|
382 |
+ 8, ZPixmap, 0, 0, w, h, 8, 0, &ashminfo );
|
|
383 |
+ if( axi != NULL )
|
|
384 |
+ mitshm_aximage = true;
|
|
385 |
+ else
|
|
386 |
+#endif
|
|
387 |
+ axi = XCreateImage(x11Display(), (Visual *) x11Visual(),
|
|
388 |
8, ZPixmap, 0, 0, w, h, 8, 0);
|
|
389 |
|
|
390 |
if (axi) {
|
|
391 |
- // the data is deleted by qSafeXDestroyImage
|
|
392 |
- axi->data = (char *) malloc(h * axi->bytes_per_line);
|
|
393 |
- Q_CHECK_PTR( axi->data );
|
|
394 |
+ if( axi->data==NULL ) {
|
|
395 |
+ // the data is deleted by qSafeXDestroyImage
|
|
396 |
+ axi->data = (char *) malloc(h * axi->bytes_per_line);
|
|
397 |
+ Q_CHECK_PTR( axi->data );
|
|
398 |
+ }
|
|
399 |
char *aptr = axi->data;
|
|
400 |
|
|
401 |
if (image.depth() == 32) {
|
|
402 |
@@ -1567,7 +1764,12 @@
|
|
403 |
}
|
|
404 |
|
|
405 |
GC gc = XCreateGC(x11Display(), data->alphapm->hd, 0, 0);
|
|
406 |
- XPutImage(dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h);
|
|
407 |
+#ifdef QT_MITSHM_CONVERSIONS
|
|
408 |
+ if( mitshm_aximage )
|
|
409 |
+ XShmPutImage( dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h, False );
|
|
410 |
+ else
|
|
411 |
+#endif
|
|
412 |
+ XPutImage(dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h);
|
|
413 |
XFreeGC(x11Display(), gc);
|
|
414 |
qSafeXDestroyImage(axi);
|
|
415 |
}
|
|
416 |
@@ -1737,7 +1939,7 @@
|
|
417 |
return pm;
|
|
418 |
}
|
|
419 |
|
|
420 |
-#if defined(QT_MITSHM)
|
|
421 |
+#if defined(QT_MITSHM_XFORM)
|
|
422 |
static bool try_once = TRUE;
|
|
423 |
if (try_once) {
|
|
424 |
try_once = FALSE;
|
|
425 |
@@ -1770,7 +1972,7 @@
|
|
426 |
dbpl = ((w*bpp+31)/32)*4;
|
|
427 |
dbytes = dbpl*h;
|
|
428 |
|
|
429 |
-#if defined(QT_MITSHM)
|
|
430 |
+#if defined(QT_MITSHM_XFORM)
|
|
431 |
if ( use_mitshm ) {
|
|
432 |
dptr = (uchar *)xshmimg->data;
|
|
433 |
uchar fillbyte = bpp == 8 ? white.pixel() : 0xff;
|
|
434 |
@@ -1786,7 +1988,7 @@
|
|
435 |
memset( dptr, Qt::white.pixel( x11Screen() ), dbytes );
|
|
436 |
else
|
|
437 |
memset( dptr, 0xff, dbytes );
|
|
438 |
-#if defined(QT_MITSHM)
|
|
439 |
+#if defined(QT_MITSHM_XFORM)
|
|
440 |
}
|
|
441 |
#endif
|
|
442 |
|
|
443 |
@@ -1817,7 +2019,7 @@
|
|
444 |
} else {
|
|
445 |
xbpl = (w*bpp)/8;
|
|
446 |
p_inc = dbpl - xbpl;
|
|
447 |
-#if defined(QT_MITSHM)
|
|
448 |
+#if defined(QT_MITSHM_XFORM)
|
|
449 |
if ( use_mitshm )
|
|
450 |
p_inc = xshmimg->bytes_per_line - xbpl;
|
|
451 |
#endif
|
|
452 |
@@ -1854,7 +2056,7 @@
|
|
453 |
QPixmap pm( w, h );
|
|
454 |
pm.data->uninit = FALSE;
|
|
455 |
pm.x11SetScreen( x11Screen() );
|
|
456 |
-#if defined(QT_MITSHM)
|
|
457 |
+#if defined(QT_MITSHM_XFORM)
|
|
458 |
if ( use_mitshm ) {
|
|
459 |
XCopyArea( dpy, xshmpm, pm.handle(), gc, 0, 0, w, h, 0, 0 );
|
|
460 |
} else {
|
|
461 |
@@ -1863,7 +2065,7 @@
|
|
462 |
ZPixmap, 0, (char *)dptr, w, h, 32, 0 );
|
|
463 |
XPutImage( dpy, pm.handle(), gc, xi, 0, 0, 0, 0, w, h);
|
|
464 |
qSafeXDestroyImage( xi );
|
|
465 |
-#if defined(QT_MITSHM)
|
|
466 |
+#if defined(QT_MITSHM_XFORM)
|
|
467 |
}
|
|
468 |
#endif
|
|
469 |
|
|
470 |
--- qt-x11-free-3.3.8/mkspecs/linux-g++/qplatformdefs.h.orig 2008-01-08 20:53:20.515026849 +0530
|
|
471 |
+++ qt-x11-free-3.3.8/mkspecs/linux-g++/qplatformdefs.h 2008-01-08 20:53:32.448225016 +0530
|
|
472 |
@@ -102,5 +102,6 @@
|
|
473 |
#define QT_VSNPRINTF ::vsnprintf
|
|
474 |
#endif
|
|
475 |
|
|
476 |
+#define QT_MITSHM
|
|
477 |
|
|
478 |
#endif // QPLATFORMDEFS_H
|