#define PIXEL_FORMAT_ARGB15 PIXEL_FORMAT_A1R5G5B5_F(0)
#define PIXEL_FORMAT_ARGB15_VF PIXEL_FORMAT_A1R5G5B5_F(1)
-#define PIXEL_FORMAT_X1R5G5B5_F(_flip) FREERDP_PIXEL_FORMAT(_flip, 16, FREERDP_PIXEL_FORMAT_TYPE_ARGB, 0, 5, 5, 5)
+#define PIXEL_FORMAT_X1R5G5B5_F(_flip) FREERDP_PIXEL_FORMAT(_flip, 15, FREERDP_PIXEL_FORMAT_TYPE_ARGB, 0, 5, 5, 5)
#define PIXEL_FORMAT_RGB15 PIXEL_FORMAT_X1R5G5B5_F(0)
#define PIXEL_FORMAT_RGB15_VF PIXEL_FORMAT_X1R5G5B5_F(1)
#define PIXEL_FORMAT_ABGR15 PIXEL_FORMAT_A1B5G5R5_F(0)
#define PIXEL_FORMAT_ABGR15_VF PIXEL_FORMAT_A1B5G5R5_F(1)
-#define PIXEL_FORMAT_X1B5G5R5_F(_flip) FREERDP_PIXEL_FORMAT(_flip, 16, FREERDP_PIXEL_FORMAT_TYPE_ABGR, 0, 5, 5, 5)
+#define PIXEL_FORMAT_X1B5G5R5_F(_flip) FREERDP_PIXEL_FORMAT(_flip, 15, FREERDP_PIXEL_FORMAT_TYPE_ABGR, 0, 5, 5, 5)
#define PIXEL_FORMAT_BGR15 PIXEL_FORMAT_X1B5G5R5_F(0)
#define PIXEL_FORMAT_BGR15_VF PIXEL_FORMAT_X1B5G5R5_F(1)
case PIXEL_FORMAT_ARGB15:
return (((_r >> 3) & 0x1F) << 10) | (((_g >> 3) & 0x1F) << 5) | ((
- _b >> 3) & 0x1F);
+ _b >> 3) & 0x1F) | (_a ? 0x8000 : 0x0000);
case PIXEL_FORMAT_ABGR15:
return (((_b >> 3) & 0x1F) << 10) | (((_g >> 3) & 0x1F) << 5) | ((
- _r >> 3) & 0x1F);
+ _r >> 3) & 0x1F) | (_a ? 0x8000 : 0x0000);
/* 15bpp formats */
case PIXEL_FORMAT_RGB15:
case PIXEL_FORMAT_BGR15:
return (((_b >> 3) & 0x1F) << 10) | (((_g >> 3) & 0x1F) << 5) | ((
- _r >> 3) & 0x1F);;
+ _r >> 3) & 0x1F);
/* 8bpp formats */
case PIXEL_FORMAT_RGB8:
break;
case 16:
+ color = ((UINT32)src[1] << 8) | src[0];
+ break;
+
case 15:
color = ((UINT32)src[1] << 8) | src[0];
+
+ if (!ColorHasAlpha(format))
+ color = color & 0x7FFF;
+
break;
case 8:
- case 4:
- case 1:
color = *src;
break;
break;
case 16:
+ dst[1] = color >> 8;
+ dst[0] = color;
+ break;
+
case 15:
+ if (!ColorHasAlpha(format))
+ color = color & 0x7FFF;
+
dst[1] = color >> 8;
dst[0] = color;
break;
case 8:
- case 4:
- case 1:
dst[0] = color;
break;
*/
static BOOL gdi_rop_color(UINT32 rop, BYTE* pixelPtr, UINT32 pen, UINT32 format)
{
- UINT32 pixel = ReadColor(pixelPtr, format);
+ const UINT32 srcPixel = ReadColor(pixelPtr, format);
+ UINT32 dstPixel;
switch (rop)
{
case GDI_R2_BLACK: /* LineTo_BLACK */
- pixel = GetColor(format, 0, 0, 0, 0xFF);
+ dstPixel = GetColor(format, 0, 0, 0, 0xFF);
break;
case GDI_R2_NOTMERGEPEN: /* LineTo_NOTMERGEPEN */
- pixel = ~(pixel | pen);
+ dstPixel = ~(srcPixel | pen);
break;
case GDI_R2_MASKNOTPEN: /* LineTo_MASKNOTPEN */
- pixel &= ~pen;
+ dstPixel = srcPixel & ~pen;
break;
case GDI_R2_NOTCOPYPEN: /* LineTo_NOTCOPYPEN */
- pixel = ~pen;
+ dstPixel = ~pen;
break;
case GDI_R2_MASKPENNOT: /* LineTo_MASKPENNOT */
- pixel = pen & ~pixel;
+ dstPixel = pen & ~srcPixel;
break;
case GDI_R2_NOT: /* LineTo_NOT */
- pixel = ~pixel;
+ dstPixel = ~srcPixel;
break;
case GDI_R2_XORPEN: /* LineTo_XORPEN */
- pixel = pixel ^ pen;
+ dstPixel = srcPixel ^ pen;
break;
case GDI_R2_NOTMASKPEN: /* LineTo_NOTMASKPEN */
- pixel = ~(pixel & pen);
+ dstPixel = ~(srcPixel & pen);
break;
case GDI_R2_MASKPEN: /* LineTo_MASKPEN */
- pixel &= pen;
+ dstPixel = srcPixel & pen;
break;
case GDI_R2_NOTXORPEN: /* LineTo_NOTXORPEN */
- pixel = ~(pixel ^ pen);
+ dstPixel = ~(srcPixel ^ pen);
break;
case GDI_R2_NOP: /* LineTo_NOP */
+ dstPixel = srcPixel;
break;
case GDI_R2_MERGENOTPEN: /* LineTo_MERGENOTPEN */
- pixel |= ~pen;
+ dstPixel = srcPixel | ~pen;
break;
case GDI_R2_COPYPEN: /* LineTo_COPYPEN */
- pixel = pen;
+ dstPixel = pen;
break;
case GDI_R2_MERGEPENNOT: /* LineTo_MERGEPENNOT */
- pixel = pixel | ~pen;
+ dstPixel = srcPixel | ~pen;
break;
case GDI_R2_MERGEPEN: /* LineTo_MERGEPEN */
- pixel = pixel | pen;
+ dstPixel = srcPixel | pen;
break;
case GDI_R2_WHITE: /* LineTo_WHITE */
- pixel = GetColor(format, 0, 0, 0, 0);
+ dstPixel = GetColor(format, 0xFF, 0xFF, 0xFF, 0xFF);
break;
default:
return FALSE;
}
- WriteColor(pixelPtr, format, pixel);
- return TRUE;
+ return WriteColor(pixelPtr, format, dstPixel);
}
BOOL gdi_LineTo(HGDI_DC hdc, UINT32 nXEnd, UINT32 nYEnd)
const UINT32 map_size = sizeof(rop_map) / sizeof(rop_map[0]);
HGDI_BITMAP hBmp_LineTo[LINTETO_NUMBER] = {NULL};
gdiPalette* hPalette = &g;
+ UINT32 penColor;
const UINT32 format = colorFormats[i];
g.format = format;
hdc->format = format;
gdi_SetNullClipRgn(hdc);
+ penColor = GetColor(format, 0xFF, 0xFF, 0xFF, 0xFF);
- if (!(pen = gdi_CreatePen(1, 1, 0, format, hPalette)))
+ if (!(pen = gdi_CreatePen(1, 1, penColor, format, hPalette)))
{
printf("gdi_CreatePen failed\n");
goto fail;
for (x = 0; x < map_size; x++)
{
+ char name[1024];
+ _snprintf(name, sizeof(name), "%s [%s]", gdi_rop_to_string(rop_map[x].rop),
+ GetColorFormatName(hdc->format));
+
/* Test Case 13: (0,0) -> (16,16), R2_NOTMERGEPEN */
if (!gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS, hPalette))
{
gdi_LineTo(hdc, 16, 16);
if (!test_assert_bitmaps_equal(hBmp, rop_map[x].bmp,
- gdi_rop_to_string(rop_map[x].rop),
+ name,
hPalette))
goto fail;
}