--- sourceforge.net/trunk/rdesktop/xwin.c 2004/04/15 20:12:42 651 +++ sourceforge.net/trunk/rdesktop/xwin.c 2004/04/26 23:14:07 680 @@ -229,6 +229,15 @@ return make_colour(pc); } +#define UNROLL8(stm) { stm stm stm stm stm stm stm stm } +#define REPEAT(stm) \ +{ \ + while (out <= end - 8 * 4) \ + UNROLL8(stm) \ + while (out < end) \ + { stm } \ +} + static void translate8to8(uint8 * data, uint8 * out, uint8 * end) { @@ -241,7 +250,9 @@ { uint16 value; - if (g_xserver_be) + if (g_arch_match) + REPEAT(*(((uint16*)out)++) = g_colmap[*(data++)];) + else if (g_xserver_be) { while (out < end) { @@ -294,7 +305,9 @@ { uint32 value; - if (g_xserver_be) + if (g_arch_match) + REPEAT(*(((uint32*)out)++) = g_colmap[*(data++)];) + else if (g_xserver_be) { while (out < end) { @@ -1009,6 +1022,27 @@ } void +ui_resize_window() +{ + XSizeHints *sizehints; + + sizehints = XAllocSizeHints(); + if (sizehints) + { + sizehints->flags = PMinSize | PMaxSize; + sizehints->min_width = sizehints->max_width = g_width; + sizehints->min_height = sizehints->max_height = g_height; + XSetWMNormalHints(g_display, g_wnd, sizehints); + XFree(sizehints); + } + + if (!(g_fullscreen || g_embed_wnd)) + { + XResizeWindow(g_display, g_wnd, g_width, g_height); + } +} + +void ui_destroy_window(void) { if (g_IC != NULL) @@ -1765,7 +1799,7 @@ { case 0: /* Solid */ SET_FOREGROUND(fgcolour); - FILL_RECTANGLE(x, y, cx, cy); + FILL_RECTANGLE_BACKSTORE(x, y, cx, cy); break; case 2: /* Hatch */ @@ -1776,7 +1810,7 @@ XSetFillStyle(g_display, g_gc, FillOpaqueStippled); XSetStipple(g_display, g_gc, fill); XSetTSOrigin(g_display, g_gc, brush->xorigin, brush->yorigin); - FILL_RECTANGLE(x, y, cx, cy); + FILL_RECTANGLE_BACKSTORE(x, y, cx, cy); XSetFillStyle(g_display, g_gc, FillSolid); XSetTSOrigin(g_display, g_gc, 0, 0); ui_destroy_glyph((HGLYPH) fill); @@ -1786,15 +1820,12 @@ for (i = 0; i != 8; i++) ipattern[7 - i] = brush->pattern[i]; fill = (Pixmap) ui_create_glyph(8, 8, ipattern); - SET_FOREGROUND(bgcolour); SET_BACKGROUND(fgcolour); XSetFillStyle(g_display, g_gc, FillOpaqueStippled); XSetStipple(g_display, g_gc, fill); XSetTSOrigin(g_display, g_gc, brush->xorigin, brush->yorigin); - - FILL_RECTANGLE(x, y, cx, cy); - + FILL_RECTANGLE_BACKSTORE(x, y, cx, cy); XSetFillStyle(g_display, g_gc, FillSolid); XSetTSOrigin(g_display, g_gc, 0, 0); ui_destroy_glyph((HGLYPH) fill); @@ -1805,6 +1836,9 @@ } RESET_FUNCTION(opcode); + + if (g_ownbackstore) + XCopyArea(g_display, g_backstore, g_wnd, g_gc, x, y, cx, cy, x, y); } void