patblt opcode fix
This commit is contained in:
parent
05178d0733
commit
b5efd2034e
@ -236,6 +236,7 @@ xrdp_painter_fill_rect(struct xrdp_painter* self,
|
|||||||
int k;
|
int k;
|
||||||
int dx;
|
int dx;
|
||||||
int dy;
|
int dy;
|
||||||
|
int rop;
|
||||||
|
|
||||||
if (self == 0)
|
if (self == 0)
|
||||||
{
|
{
|
||||||
@ -286,12 +287,32 @@ xrdp_painter_fill_rect(struct xrdp_painter* self,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
k = 0;
|
k = 0;
|
||||||
|
rop = self->rop;
|
||||||
|
/* if opcode is in the form 0x00, 0x11, 0x22, ... convert it */
|
||||||
|
if (((rop & 0xf0) >> 4) == (rop & 0xf))
|
||||||
|
{
|
||||||
|
switch (rop)
|
||||||
|
{
|
||||||
|
case 0x66: /* xor */
|
||||||
|
rop = 0x5a;
|
||||||
|
break;
|
||||||
|
case 0xaa: /* noop */
|
||||||
|
rop = 0xfb;
|
||||||
|
break;
|
||||||
|
case 0xcc: /* copy */
|
||||||
|
rop = 0xf0;
|
||||||
|
break;
|
||||||
|
case 0x88: /* and */
|
||||||
|
rop = 0xc0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
while (xrdp_region_get_rect(region, k, &rect) == 0)
|
while (xrdp_region_get_rect(region, k, &rect) == 0)
|
||||||
{
|
{
|
||||||
if (rect_intersect(&rect, &clip_rect, &draw_rect))
|
if (rect_intersect(&rect, &clip_rect, &draw_rect))
|
||||||
{
|
{
|
||||||
libxrdp_orders_pat_blt(self->session, x, y, cx, cy,
|
libxrdp_orders_pat_blt(self->session, x, y, cx, cy,
|
||||||
self->rop, self->bg_color, self->fg_color,
|
rop, self->bg_color, self->fg_color,
|
||||||
&self->brush, &draw_rect);
|
&self->brush, &draw_rect);
|
||||||
}
|
}
|
||||||
k++;
|
k++;
|
||||||
|
Loading…
Reference in New Issue
Block a user