xfreerdp: remove usage of XAllocColor (slow)
authorMarc-André Moreau <marcandre.moreau@gmail.com>
Mon, 10 Nov 2014 16:15:37 +0000 (11:15 -0500)
committerMarc-André Moreau <marcandre.moreau@gmail.com>
Mon, 10 Nov 2014 16:15:37 +0000 (11:15 -0500)
client/X11/xf_gdi.c
client/X11/xf_graphics.c
client/X11/xfreerdp.h

index 78d536f..17d7363 100644 (file)
@@ -217,28 +217,6 @@ BOOL xf_set_rop3(xfContext* xfc, int rop3)
        return TRUE;
 }
 
-unsigned long xf_gdi_get_color(xfContext* xfc, GDI_COLOR color)
-{
-       XColor x11_color;
-
-       x11_color.flags = DoRed | DoGreen | DoBlue;
-       GetRGB32(x11_color.red, x11_color.green, x11_color.blue, color);
-       x11_color.red = x11_color.red << 8;
-       x11_color.green = x11_color.green << 8;
-       x11_color.blue = x11_color.blue << 8;
-
-       if (XAllocColor(xfc->display, xfc->colormap, &x11_color) != 0)
-       {
-               XFreeColors(xfc->display, xfc->colormap, &x11_color.pixel, 1, 0);
-       }
-       else
-       {
-               x11_color.pixel = BlackPixel(xfc->display, xfc->screen_number);
-       }
-
-       return x11_color.pixel;
-}
-
 Pixmap xf_brush_new(xfContext* xfc, int width, int height, int bpp, BYTE* data)
 {
        GC gc;
@@ -488,9 +466,7 @@ void xf_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt)
        xf_set_rop3(xfc, gdi_rop3_code(patblt->bRop));
 
        foreColor = freerdp_convert_gdi_order_color(patblt->foreColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       foreColor = xf_gdi_get_color(xfc, foreColor);
        backColor = freerdp_convert_gdi_order_color(patblt->backColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       backColor = xf_gdi_get_color(xfc, backColor);
 
        if (brush->style == GDI_BS_SOLID)
        {
@@ -610,7 +586,6 @@ void xf_gdi_opaque_rect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect)
        xf_lock_x11(xfc, FALSE);
 
        color = freerdp_convert_gdi_order_color(opaque_rect->color, context->settings->ColorDepth, xfc->format, xfc->palette);
-       color = xf_gdi_get_color(xfc, color);
 
        XSetFunction(xfc->display, xfc->gc, GXcopy);
        XSetFillStyle(xfc->display, xfc->gc, FillSolid);
@@ -646,7 +621,6 @@ void xf_gdi_multi_opaque_rect(rdpContext* context, MULTI_OPAQUE_RECT_ORDER* mult
        xf_lock_x11(xfc, FALSE);
 
        color = freerdp_convert_gdi_order_color(multi_opaque_rect->color, context->settings->ColorDepth, xfc->format, xfc->palette);
-       color = xf_gdi_get_color(xfc, color);
 
        XSetFunction(xfc->display, xfc->gc, GXcopy);
        XSetFillStyle(xfc->display, xfc->gc, FillSolid);
@@ -689,7 +663,6 @@ void xf_gdi_line_to(rdpContext* context, LINE_TO_ORDER* line_to)
 
        xf_set_rop2(xfc, line_to->bRop2);
        color = freerdp_convert_gdi_order_color(line_to->penColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       color = xf_gdi_get_color(xfc, color);
 
        XSetFillStyle(xfc->display, xfc->gc, FillSolid);
        XSetForeground(xfc->display, xfc->gc, color);
@@ -741,7 +714,6 @@ void xf_gdi_polyline(rdpContext* context, POLYLINE_ORDER* polyline)
 
        xf_set_rop2(xfc, polyline->bRop2);
        color = freerdp_convert_gdi_order_color(polyline->penColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       color = xf_gdi_get_color(xfc, color);
 
        XSetFillStyle(xfc->display, xfc->gc, FillSolid);
        XSetForeground(xfc->display, xfc->gc, color);
@@ -841,9 +813,7 @@ void xf_gdi_mem3blt(rdpContext* context, MEM3BLT_ORDER* mem3blt)
        bitmap = (xfBitmap*) mem3blt->bitmap;
        xf_set_rop3(xfc, gdi_rop3_code(mem3blt->bRop));
        foreColor = freerdp_convert_gdi_order_color(mem3blt->foreColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       foreColor = xf_gdi_get_color(xfc, foreColor);
        backColor = freerdp_convert_gdi_order_color(mem3blt->backColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       backColor = xf_gdi_get_color(xfc, backColor);
 
        if (brush->style == GDI_BS_PATTERN)
        {
@@ -916,7 +886,6 @@ void xf_gdi_polygon_sc(rdpContext* context, POLYGON_SC_ORDER* polygon_sc)
 
        xf_set_rop2(xfc, polygon_sc->bRop2);
        brush_color = freerdp_convert_gdi_order_color(polygon_sc->brushColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       brush_color = xf_gdi_get_color(xfc, brush_color);
 
        npoints = polygon_sc->numPoints + 1;
        points = malloc(sizeof(XPoint) * npoints);
@@ -978,9 +947,7 @@ void xf_gdi_polygon_cb(rdpContext* context, POLYGON_CB_ORDER* polygon_cb)
        brush = &(polygon_cb->brush);
        xf_set_rop2(xfc, polygon_cb->bRop2);
        foreColor = freerdp_convert_gdi_order_color(polygon_cb->foreColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       foreColor = xf_gdi_get_color(xfc, foreColor);
        backColor = freerdp_convert_gdi_order_color(polygon_cb->backColor, context->settings->ColorDepth, xfc->format, xfc->palette);
-       backColor = xf_gdi_get_color(xfc, backColor);
 
        npoints = polygon_cb->numPoints + 1;
        points = malloc(sizeof(XPoint) * npoints);
@@ -1005,7 +972,7 @@ void xf_gdi_polygon_cb(rdpContext* context, POLYGON_CB_ORDER* polygon_cb)
                        break;
 
                default:
-                       WLog_ERR(TAG,  "PolygonCB unknown fillMode: %d", polygon_cb->fillMode);
+                       WLog_ERR(TAG, "PolygonCB unknown fillMode: %d", polygon_cb->fillMode);
                        break;
        }
 
index 18f8d0c..e73833a 100644 (file)
@@ -386,9 +386,6 @@ void xf_Glyph_BeginDraw(rdpContext* context, int x, int y, int width, int height
 
        xf_lock_x11(xfc, FALSE);
 
-       fgcolor = xf_gdi_get_color(xfc, fgcolor);
-       bgcolor = xf_gdi_get_color(xfc, bgcolor);
-
        XSetFunction(xfc->display, xfc->gc, GXcopy);
 
        if (width && height)
index bb222a9..4c66e24 100644 (file)
@@ -248,8 +248,6 @@ void xf_unlock_x11(xfContext* xfc, BOOL display);
 void xf_draw_screen_scaled(xfContext* xfc, int x, int y, int w, int h, BOOL scale);
 void xf_transform_window(xfContext* xfc);
 
-unsigned long xf_gdi_get_color(xfContext* xfc, GDI_COLOR color);
-
 FREERDP_API DWORD xf_exit_code_from_disconnect_reason(DWORD reason);
 
 #endif /* __XFREERDP_H */