--- sourceforge.net/trunk/rdesktop/xwin.c 2003/10/29 14:14:46 532 +++ sourceforge.net/trunk/rdesktop/xwin.c 2003/10/31 04:29:57 536 @@ -207,7 +207,7 @@ } #define BSWAP16(x) { x = (((x & 0xff) << 8) | (x >> 8)); } -#define BSWAP24(x) { x = (((x & 0xff) << 16) | (x >> 16) | ((x >> 8) & 0xff00)); } +#define BSWAP24(x) { x = (((x & 0xff) << 16) | (x >> 16) | (x & 0xff00)); } #define BSWAP32(x) { x = (((x & 0xff00ff) << 8) | ((x >> 8) & 0xff00ff)); \ x = (x << 16) | (x >> 16); } @@ -481,7 +481,8 @@ if (g_host_be) { - BSWAP16(pixel)} + BSWAP16(pixel); + } value = make_colour(split_colour16(pixel)); @@ -531,30 +532,59 @@ static void translate24to24(uint8 * data, uint8 * out, uint8 * end) { + uint32 pixel; + uint32 value; + while (out < end) { - *(out++) = (*(data++)); + pixel = *(data++) << 16; + pixel |= *(data++) << 8; + pixel |= *(data++); + + value = make_colour(split_colour24(pixel)); + + if (g_xserver_be) + { + *(out++) = value >> 16; + *(out++) = value >> 8; + *(out++) = value; + } + else + { + *(out++) = value; + *(out++) = value >> 8; + *(out++) = value >> 16; + } } } static void translate24to32(uint8 * data, uint8 * out, uint8 * end) { + uint32 pixel; + uint32 value; + while (out < end) { + pixel = *(data++) << 16; + pixel |= *(data++) << 8; + pixel |= *(data++); + + value = make_colour(split_colour24(pixel)); + if (g_xserver_be) { - *(out++) = 0x00; - *(out++) = *(data++); - *(out++) = *(data++); - *(out++) = *(data++); + *(out++) = value >> 24; + *(out++) = value >> 16; + *(out++) = value >> 8; + *(out++) = value; } else { - *(out++) = *(data++); - *(out++) = *(data++); - *(out++) = *(data++); - *(out++) = 0x00; + *(out++) = value; + *(out++) = value >> 8; + *(out++) = value >> 16; + *(out++) = value >> 24; } } } @@ -819,12 +849,11 @@ g_display = NULL; } -#define NULL_POINTER_MASK "\x80" -#define NULL_POINTER_DATA "\x0\x0\x0" - BOOL ui_create_window(void) { + uint8 null_pointer_mask[1] = { 0x80 }; + uint8 null_pointer_data[4] = { 0x00, 0x00, 0x00, 0x00 }; XSetWindowAttributes attribs; XClassHint *classhints; XSizeHints *sizehints; @@ -907,7 +936,7 @@ XSetWMProtocols(g_display, g_wnd, &g_kill_atom, 1); /* create invisible 1x1 cursor to be used as null cursor */ - g_null_cursor = ui_create_cursor(0, 0, 1, 1, NULL_POINTER_MASK, NULL_POINTER_DATA); + g_null_cursor = ui_create_cursor(0, 0, 1, 1, null_pointer_mask, null_pointer_data); return True; }