57 |
static Atom g_protocol_atom, g_kill_atom; |
static Atom g_protocol_atom, g_kill_atom; |
58 |
static BOOL g_focused; |
static BOOL g_focused; |
59 |
static BOOL g_mouse_in_wnd; |
static BOOL g_mouse_in_wnd; |
60 |
|
static BOOL g_arch_match = False; /* set to True if RGB XServer and little endian */ |
61 |
|
|
62 |
/* endianness */ |
/* endianness */ |
63 |
static BOOL g_host_be; |
static BOOL g_host_be; |
598 |
static uint8 * |
static uint8 * |
599 |
translate_image(int width, int height, uint8 * data) |
translate_image(int width, int height, uint8 * data) |
600 |
{ |
{ |
601 |
int size = width * height * g_bpp / 8; |
int size; |
602 |
uint8 *out = (uint8 *) xmalloc(size); |
uint8 *out; |
603 |
uint8 *end = out + size; |
uint8 *end; |
604 |
|
|
605 |
|
/* if server and xserver bpp match, */ |
606 |
|
/* and arch(endian) matches, no need to translate */ |
607 |
|
/* just return data */ |
608 |
|
if (g_depth > 8) |
609 |
|
if (g_arch_match) |
610 |
|
if (g_depth == g_server_bpp) |
611 |
|
return data; |
612 |
|
|
613 |
|
size = width * height * (g_bpp / 8); |
614 |
|
out = (uint8 *) xmalloc(size); |
615 |
|
end = out + size; |
616 |
|
|
617 |
switch (g_server_bpp) |
switch (g_server_bpp) |
618 |
{ |
{ |
750 |
TrueColorVisual = True; |
TrueColorVisual = True; |
751 |
} |
} |
752 |
|
|
753 |
|
test = 1; |
754 |
|
g_host_be = !(BOOL) (*(uint8 *) (&test)); |
755 |
|
g_xserver_be = (ImageByteOrder(g_display) == MSBFirst); |
756 |
|
|
757 |
if ((g_server_bpp == 8) && ((!TrueColorVisual) || (g_depth <= 8))) |
if ((g_server_bpp == 8) && ((!TrueColorVisual) || (g_depth <= 8))) |
758 |
{ |
{ |
759 |
/* we use a colourmap, so the default visual should do */ |
/* we use a colourmap, so the default visual should do */ |
780 |
calculate_shifts(vi.red_mask, &g_red_shift_r, &g_red_shift_l); |
calculate_shifts(vi.red_mask, &g_red_shift_r, &g_red_shift_l); |
781 |
calculate_shifts(vi.blue_mask, &g_blue_shift_r, &g_blue_shift_l); |
calculate_shifts(vi.blue_mask, &g_blue_shift_r, &g_blue_shift_l); |
782 |
calculate_shifts(vi.green_mask, &g_green_shift_r, &g_green_shift_l); |
calculate_shifts(vi.green_mask, &g_green_shift_r, &g_green_shift_l); |
783 |
|
|
784 |
|
/* if RGB video and averything is little endian */ |
785 |
|
if (vi.red_mask > vi.green_mask && vi.green_mask > vi.blue_mask) |
786 |
|
if (!g_xserver_be && !g_host_be) |
787 |
|
g_arch_match = True; |
788 |
} |
} |
789 |
|
|
790 |
pfm = XListPixmapFormats(g_display, &i); |
pfm = XListPixmapFormats(g_display, &i); |
824 |
g_ownbackstore = True; |
g_ownbackstore = True; |
825 |
} |
} |
826 |
|
|
|
test = 1; |
|
|
g_host_be = !(BOOL) (*(uint8 *) (&test)); |
|
|
g_xserver_be = (ImageByteOrder(g_display) == MSBFirst); |
|
|
|
|
827 |
/* |
/* |
828 |
* Determine desktop size |
* Determine desktop size |
829 |
*/ |
*/ |
1399 |
XPutImage(g_display, bitmap, g_gc, image, 0, 0, 0, 0, width, height); |
XPutImage(g_display, bitmap, g_gc, image, 0, 0, 0, 0, width, height); |
1400 |
|
|
1401 |
XFree(image); |
XFree(image); |
1402 |
if (!g_owncolmap) |
if (tdata != data) |
1403 |
xfree(tdata); |
xfree(tdata); |
1404 |
return (HBITMAP) bitmap; |
return (HBITMAP) bitmap; |
1405 |
} |
} |
1438 |
} |
} |
1439 |
|
|
1440 |
XFree(image); |
XFree(image); |
1441 |
if (!g_owncolmap) |
if (tdata != data) |
1442 |
xfree(tdata); |
xfree(tdata); |
1443 |
} |
} |
1444 |
|
|