|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include <freerdp/gdi/gdi.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include <freerdp/gdi/dc.h>
|
|
Packit |
1fb8d4 |
#include <freerdp/gdi/pen.h>
|
|
Packit |
1fb8d4 |
#include <freerdp/gdi/region.h>
|
|
Packit |
1fb8d4 |
#include <freerdp/gdi/bitmap.h>
|
|
Packit |
1fb8d4 |
#include <freerdp/gdi/gdi.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include <winpr/crt.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include "line.h"
|
|
Packit |
1fb8d4 |
#include "brush.h"
|
|
Packit |
1fb8d4 |
#include "drawing.h"
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
static const UINT32 colorFormatList[] = {
|
|
Packit Service |
5a9772 |
PIXEL_FORMAT_RGB15, PIXEL_FORMAT_BGR15, PIXEL_FORMAT_RGB16, PIXEL_FORMAT_BGR16,
|
|
Packit Service |
5a9772 |
PIXEL_FORMAT_RGB24, PIXEL_FORMAT_BGR24, PIXEL_FORMAT_ARGB32, PIXEL_FORMAT_ABGR32,
|
|
Packit Service |
5a9772 |
PIXEL_FORMAT_XRGB32, PIXEL_FORMAT_XBGR32, PIXEL_FORMAT_RGBX32, PIXEL_FORMAT_BGRX32
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
};
|
|
Packit Service |
5a9772 |
static const UINT32 colorFormatCount = sizeof(colorFormatList) / sizeof(colorFormatList[0]);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_GetDC(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_DC hdc;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hdc = gdi_GetDC()))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to get gdi device context\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hdc->format != PIXEL_FORMAT_XRGB32)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hdc->drawMode != GDI_R2_BLACK)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_CreateCompatibleDC(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_DC hdc = NULL;
|
|
Packit |
1fb8d4 |
HGDI_DC chdc = NULL;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hdc = gdi_GetDC()))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to get gdi device context\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
hdc->format = PIXEL_FORMAT_RGB16;
|
|
Packit |
1fb8d4 |
hdc->drawMode = GDI_R2_XORPEN;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(chdc = gdi_CreateCompatibleDC(hdc)))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("gdi_CreateCompatibleDC failed\n");
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (chdc->format != hdc->format)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (chdc->drawMode != hdc->drawMode)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (chdc)
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(chdc);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_CreateBitmap(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
UINT32 format = PIXEL_FORMAT_ARGB32;
|
|
Packit Service |
5a9772 |
INT32 width;
|
|
Packit Service |
5a9772 |
INT32 height;
|
|
Packit |
1fb8d4 |
BYTE* data;
|
|
Packit |
1fb8d4 |
HGDI_BITMAP hBitmap = NULL;
|
|
Packit |
1fb8d4 |
width = 32;
|
|
Packit |
1fb8d4 |
height = 16;
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
if (!(data = (BYTE*)_aligned_malloc(width * height * 4, 16)))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to allocate aligned bitmap data memory\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hBitmap = gdi_CreateBitmap(width, height, format, data)))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("gdi_CreateBitmap failed\n");
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->objectType != GDIOBJECT_BITMAP)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->format != format)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->width != width)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->height != height)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->data != data)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap)
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
else
|
|
Packit |
1fb8d4 |
free(data);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_CreateCompatibleBitmap(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_DC hdc;
|
|
Packit Service |
5a9772 |
INT32 width;
|
|
Packit Service |
5a9772 |
INT32 height;
|
|
Packit |
1fb8d4 |
HGDI_BITMAP hBitmap = NULL;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hdc = gdi_GetDC()))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to get gdi device context\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
hdc->format = PIXEL_FORMAT_ARGB32;
|
|
Packit |
1fb8d4 |
width = 32;
|
|
Packit |
1fb8d4 |
height = 16;
|
|
Packit |
1fb8d4 |
hBitmap = gdi_CreateCompatibleBitmap(hdc, width, height);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->objectType != GDIOBJECT_BITMAP)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->format != hdc->format)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->width != width)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap->height != height)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!hBitmap->data)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap)
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_CreatePen(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
const UINT32 format = PIXEL_FORMAT_RGBA32;
|
|
Packit Service |
5a9772 |
HGDI_PEN hPen = gdi_CreatePen(GDI_PS_SOLID, 8, 0xAABBCCDD, format, NULL);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!hPen)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("gdi_CreatePen failed\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hPen->style != GDI_PS_SOLID)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hPen->width != 8)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hPen->color != 0xAABBCCDD)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hPen);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_CreateSolidBrush(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_BRUSH hBrush = gdi_CreateSolidBrush(0xAABBCCDD);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBrush->objectType != GDIOBJECT_BRUSH)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBrush->style != GDI_BS_SOLID)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBrush->color != 0xAABBCCDD)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBrush);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_CreatePatternBrush(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_BRUSH hBrush;
|
|
Packit |
1fb8d4 |
HGDI_BITMAP hBitmap;
|
|
Packit |
1fb8d4 |
hBitmap = gdi_CreateBitmap(64, 64, 32, NULL);
|
|
Packit |
1fb8d4 |
hBrush = gdi_CreatePatternBrush(hBitmap);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!hBitmap || !hBrush)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBrush->objectType != GDIOBJECT_BRUSH)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBrush->style != GDI_BS_PATTERN)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBrush->pattern != hBitmap)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBitmap)
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hBrush)
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBrush);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_CreateRectRgn(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit Service |
5a9772 |
INT32 x1 = 32;
|
|
Packit Service |
5a9772 |
INT32 y1 = 64;
|
|
Packit Service |
5a9772 |
INT32 x2 = 128;
|
|
Packit Service |
5a9772 |
INT32 y2 = 256;
|
|
Packit |
1fb8d4 |
HGDI_RGN hRegion = gdi_CreateRectRgn(x1, y1, x2, y2);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!hRegion)
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRegion->objectType != GDIOBJECT_REGION)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRegion->x != x1)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRegion->y != y1)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRegion->w != x2 - x1 + 1)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRegion->h != y2 - y1 + 1)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRegion->null)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hRegion);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_CreateRect(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_RECT hRect;
|
|
Packit Service |
5a9772 |
INT32 x1 = 32;
|
|
Packit Service |
5a9772 |
INT32 y1 = 64;
|
|
Packit Service |
5a9772 |
INT32 x2 = 128;
|
|
Packit Service |
5a9772 |
INT32 y2 = 256;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hRect = gdi_CreateRect(x1, y1, x2, y2)))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("gdi_CreateRect failed\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRect->objectType != GDIOBJECT_RECT)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRect->left != x1)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRect->top != y1)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRect->right != x2)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hRect->bottom != y2)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hRect);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static BOOL test_gdi_GetPixel(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
BOOL rc = TRUE;
|
|
Packit |
1fb8d4 |
UINT32 x;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
for (x = 0; x < colorFormatCount; x++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
UINT32 i, j;
|
|
Packit |
1fb8d4 |
UINT32 bpp;
|
|
Packit |
1fb8d4 |
HGDI_DC hdc;
|
|
Packit |
1fb8d4 |
UINT32 width = 128;
|
|
Packit |
1fb8d4 |
UINT32 height = 64;
|
|
Packit |
1fb8d4 |
HGDI_BITMAP hBitmap;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hdc = gdi_GetDC()))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to get gdi device context\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
hdc->format = colorFormatList[x];
|
|
Packit |
1fb8d4 |
hBitmap = gdi_CreateCompatibleBitmap(hdc, width, height);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!hBitmap)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
gdi_SelectObject(hdc, (HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
bpp = GetBytesPerPixel(hBitmap->format);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
for (i = 0; i < height; i++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
for (j = 0; j < width; j++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
UINT32 pixel;
|
|
Packit Service |
5a9772 |
const UINT32 color =
|
|
Packit Service |
5a9772 |
FreeRDPGetColor(hBitmap->format, rand(), rand(), rand(), rand());
|
|
Packit Service |
5a9772 |
WriteColor(&hBitmap->data[i * hBitmap->scanline + j * bpp], hBitmap->format, color);
|
|
Packit |
1fb8d4 |
pixel = gdi_GetPixel(hdc, j, i);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (pixel != color)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
rc = FALSE;
|
|
Packit |
1fb8d4 |
break;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!rc)
|
|
Packit |
1fb8d4 |
break;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static BOOL test_gdi_SetPixel(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
BOOL rc = TRUE;
|
|
Packit |
1fb8d4 |
UINT32 x;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
for (x = 0; x < colorFormatCount; x++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
UINT32 i, j, bpp;
|
|
Packit |
1fb8d4 |
HGDI_DC hdc;
|
|
Packit |
1fb8d4 |
UINT32 width = 128;
|
|
Packit |
1fb8d4 |
UINT32 height = 64;
|
|
Packit |
1fb8d4 |
HGDI_BITMAP hBitmap;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hdc = gdi_GetDC()))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to get gdi device context\n");
|
|
Packit |
1fb8d4 |
return FALSE;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
hdc->format = colorFormatList[x];
|
|
Packit |
1fb8d4 |
hBitmap = gdi_CreateCompatibleBitmap(hdc, width, height);
|
|
Packit Service |
5a9772 |
gdi_SelectObject(hdc, (HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
bpp = GetBytesPerPixel(hBitmap->format);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
for (i = 0; i < height; i++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
for (j = 0; j < width; j++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
UINT32 pixel;
|
|
Packit Service |
5a9772 |
const UINT32 color =
|
|
Packit Service |
5a9772 |
FreeRDPGetColor(hBitmap->format, rand(), rand(), rand(), rand());
|
|
Packit |
1fb8d4 |
gdi_SetPixel(hdc, j, i, color);
|
|
Packit Service |
5a9772 |
pixel = ReadColor(&hBitmap->data[i * hBitmap->scanline + j * bpp], hBitmap->format);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (pixel != color)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
rc = FALSE;
|
|
Packit |
1fb8d4 |
break;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!rc)
|
|
Packit |
1fb8d4 |
break;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_SetROP2(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_DC hdc;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hdc = gdi_GetDC()))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to get gdi device context\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
gdi_SetROP2(hdc, GDI_R2_BLACK);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hdc->drawMode != GDI_R2_BLACK)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_MoveToEx(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_DC hdc;
|
|
Packit |
1fb8d4 |
HGDI_PEN hPen = NULL;
|
|
Packit |
1fb8d4 |
HGDI_POINT prevPoint = NULL;
|
|
Packit |
1fb8d4 |
const UINT32 format = PIXEL_FORMAT_RGBA32;
|
|
Packit |
1fb8d4 |
gdiPalette* palette = NULL;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hdc = gdi_GetDC()))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to get gdi device context\n");
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hPen = gdi_CreatePen(GDI_PS_SOLID, 8, 0xAABBCCDD, format, palette)))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("gdi_CreatePen failed\n");
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
gdi_SelectObject(hdc, (HGDIOBJECT)hPen);
|
|
Packit |
1fb8d4 |
gdi_MoveToEx(hdc, 128, 256, NULL);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hdc->pen->posX != 128)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hdc->pen->posY != 256)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
prevPoint = (HGDI_POINT)malloc(sizeof(GDI_POINT));
|
|
Packit |
1fb8d4 |
ZeroMemory(prevPoint, sizeof(GDI_POINT));
|
|
Packit |
1fb8d4 |
gdi_MoveToEx(hdc, 64, 128, prevPoint);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (prevPoint->x != 128)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (prevPoint->y != 256)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hdc->pen->posX != 64)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hdc->pen->posY != 128)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (hPen)
|
|
Packit |
1fb8d4 |
gdi_DeleteObject((HGDIOBJECT)hPen);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
free(prevPoint);
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
int TestGdiCreate(int argc, char* argv[])
|
|
Packit |
1fb8d4 |
{
|
|
Packit Service |
5a9772 |
WINPR_UNUSED(argc);
|
|
Packit Service |
5a9772 |
WINPR_UNUSED(argv);
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_GetDC()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_GetDC() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_CreateCompatibleDC()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_CreateCompatibleDC() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_CreateBitmap()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_CreateBitmap() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_CreateCompatibleBitmap()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_CreateCompatibleBitmap() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_CreatePen()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_CreatePen() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_CreateSolidBrush()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_CreateSolidBrush() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_CreatePatternBrush()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_CreatePatternBrush() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_CreateRectRgn()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_CreateRectRgn() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_CreateRect()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_CreateRect() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_GetPixel()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!test_gdi_GetPixel())
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_SetPixel()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!test_gdi_SetPixel())
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_SetROP2()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_SetROP2() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
fprintf(stderr, "test_gdi_MoveToEx()\n");
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_MoveToEx() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
return 0;
|
|
Packit |
1fb8d4 |
}
|