summaryrefslogtreecommitdiffstats
path: root/xorg
diff options
context:
space:
mode:
authorJim Grandy <jgrandy@authentic8.com>2013-07-03 10:45:46 -0700
committerJim Grandy <jgrandy@authentic8.com>2013-07-26 12:25:01 -0700
commitcac958fc3747979f68330a79ca88f0a0d47d27fd (patch)
treef882c71a4f1abeb7a656c9171941ab01baab9c20 /xorg
parent3454e19a12e0274b68051ac9b30800a4cef33da9 (diff)
downloadxrdp-proprietary-cac958fc3747979f68330a79ca88f0a0d47d27fd.tar.gz
xrdp-proprietary-cac958fc3747979f68330a79ca88f0a0d47d27fd.zip
Hand-apply patches (drawing configuration) from Authentic8 branch: 34b92df f994298 38e2def
Diffstat (limited to 'xorg')
-rw-r--r--xorg/X11R7.6/rdp/rdpdraw.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/xorg/X11R7.6/rdp/rdpdraw.c b/xorg/X11R7.6/rdp/rdpdraw.c
index 602342b7..69a9c72d 100644
--- a/xorg/X11R7.6/rdp/rdpdraw.c
+++ b/xorg/X11R7.6/rdp/rdpdraw.c
@@ -487,6 +487,7 @@ draw_item_pack(PixmapPtr pix, rdpPixmapRec *priv)
{
struct rdp_draw_item *di;
struct rdp_draw_item *di_prev;
+ RegionRec treg;
#if 1
@@ -500,19 +501,17 @@ draw_item_pack(PixmapPtr pix, rdpPixmapRec *priv)
while (di != 0)
{
- if ((di_prev->type == RDI_IMGLL) && (di->type == RDI_IMGLL))
+ if ((di_prev->type == RDI_IMGLL || di_prev->type == RDI_IMGLY ||
+ di_prev->type == RDI_FILL) &&
+ (di->type == RDI_IMGLL || di->type == RDI_IMGLY ||
+ di->type == RDI_FILL))
{
- LLOGLN(10, ("draw_item_pack: packing RDI_IMGLL"));
- RegionUnion(di_prev->reg, di_prev->reg, di->reg);
- draw_item_remove(priv, di);
- di = di_prev->next;
- }
- else if ((di_prev->type == RDI_IMGLY) && (di->type == RDI_IMGLY))
- {
- LLOGLN(10, ("draw_item_pack: packing RDI_IMGLY"));
+ LLOGLN(10, ("draw_item_pack: packing RDI_IMGLL / RDI_IMGLY / "
+ "RDI_FILL"));
RegionUnion(di_prev->reg, di_prev->reg, di->reg);
draw_item_remove(priv, di);
di = di_prev->next;
+ di_prev->type = RDI_IMGLL;
}
else
{
@@ -547,7 +546,14 @@ draw_item_pack(PixmapPtr pix, rdpPixmapRec *priv)
while (di_prev != 0)
{
/* D = M - S */
- RegionSubtract(di_prev->reg, di_prev->reg, di->reg);
+ RegionInit(&treg, NullBox, 0);
+ RegionSubtract(&treg, di_prev->reg, di->reg);
+ if (!RegionNotEmpty(&treg))
+ {
+ /* copy empty region so this draw item will get removed below */
+ RegionCopy(di_prev->reg, &treg);
+ }
+ RegionUninit(&treg);
di_prev = di_prev->prev;
}
}