|
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/shape.h>
|
|
Packit |
1fb8d4 |
#include <freerdp/gdi/region.h>
|
|
Packit |
1fb8d4 |
#include <freerdp/gdi/bitmap.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include <winpr/crt.h>
|
|
Packit |
1fb8d4 |
#include <winpr/print.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include "line.h"
|
|
Packit |
1fb8d4 |
#include "brush.h"
|
|
Packit |
1fb8d4 |
#include "clipping.h"
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
static int test_gdi_PtInRect(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_RECT hRect;
|
|
Packit |
1fb8d4 |
UINT32 left = 20;
|
|
Packit |
1fb8d4 |
UINT32 top = 40;
|
|
Packit |
1fb8d4 |
UINT32 right = 60;
|
|
Packit |
1fb8d4 |
UINT32 bottom = 80;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hRect = gdi_CreateRect(left, top, right, bottom)))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("gdi_CreateRect failed\n");
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (gdi_PtInRect(hRect, 0, 0))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (gdi_PtInRect(hRect, 500, 500))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (gdi_PtInRect(hRect, 40, 100))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (gdi_PtInRect(hRect, 10, 40))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!gdi_PtInRect(hRect, 30, 50))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!gdi_PtInRect(hRect, left, top))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!gdi_PtInRect(hRect, right, bottom))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!gdi_PtInRect(hRect, right, 60))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!gdi_PtInRect(hRect, 40, bottom))
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit |
1fb8d4 |
gdi_DeleteObject((HGDIOBJECT)hRect);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
int test_gdi_FillRect(void)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
int rc = -1;
|
|
Packit |
1fb8d4 |
HGDI_DC hdc = NULL;
|
|
Packit |
1fb8d4 |
HGDI_RECT hRect = NULL;
|
|
Packit |
1fb8d4 |
HGDI_BRUSH hBrush = NULL;
|
|
Packit |
1fb8d4 |
HGDI_BITMAP hBitmap = NULL;
|
|
Packit |
1fb8d4 |
UINT32 color;
|
|
Packit |
1fb8d4 |
UINT32 pixel;
|
|
Packit |
1fb8d4 |
UINT32 rawPixel;
|
|
Packit |
1fb8d4 |
UINT32 x, y;
|
|
Packit |
1fb8d4 |
UINT32 badPixels;
|
|
Packit |
1fb8d4 |
UINT32 goodPixels;
|
|
Packit |
1fb8d4 |
UINT32 width = 200;
|
|
Packit |
1fb8d4 |
UINT32 height = 300;
|
|
Packit |
1fb8d4 |
UINT32 left = 20;
|
|
Packit |
1fb8d4 |
UINT32 top = 40;
|
|
Packit |
1fb8d4 |
UINT32 right = 60;
|
|
Packit |
1fb8d4 |
UINT32 bottom = 80;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hdc = gdi_GetDC()))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("failed to get gdi device context\n");
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
hdc->format = PIXEL_FORMAT_XRGB32;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (!(hRect = gdi_CreateRect(left, top, right, bottom)))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("gdi_CreateRect failed\n");
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
hBitmap = gdi_CreateCompatibleBitmap(hdc, width, height);
|
|
Packit |
1fb8d4 |
ZeroMemory(hBitmap->data, width * height * GetBytesPerPixel(hdc->format));
|
|
Packit Service |
5a9772 |
gdi_SelectObject(hdc, (HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
color = FreeRDPGetColor(PIXEL_FORMAT_ARGB32, 0xAA, 0xBB, 0xCC, 0xFF);
|
|
Packit |
1fb8d4 |
hBrush = gdi_CreateSolidBrush(color);
|
|
Packit |
1fb8d4 |
gdi_FillRect(hdc, hRect, hBrush);
|
|
Packit |
1fb8d4 |
badPixels = 0;
|
|
Packit |
1fb8d4 |
goodPixels = 0;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
for (x = 0; x < width; x++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
for (y = 0; y < height; y++)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
rawPixel = gdi_GetPixel(hdc, x, y);
|
|
Packit |
1fb8d4 |
pixel = FreeRDPConvertColor(rawPixel, hdc->format, PIXEL_FORMAT_ARGB32, NULL);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (gdi_PtInRect(hRect, x, y))
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
if (pixel == color)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
goodPixels++;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
else
|
|
Packit |
1fb8d4 |
{
|
|
Packit Service |
5a9772 |
printf("actual:%08" PRIX32 " expected:%08" PRIX32 "\n", gdi_GetPixel(hdc, x, y),
|
|
Packit Service |
5a9772 |
color);
|
|
Packit |
1fb8d4 |
badPixels++;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
else
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
if (pixel == color)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
badPixels++;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
else
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
goodPixels++;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (goodPixels != width * height)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (badPixels != 0)
|
|
Packit |
1fb8d4 |
goto fail;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
rc = 0;
|
|
Packit |
1fb8d4 |
fail:
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBrush);
|
|
Packit Service |
5a9772 |
gdi_DeleteObject((HGDIOBJECT)hBitmap);
|
|
Packit |
1fb8d4 |
gdi_DeleteObject((HGDIOBJECT)hRect);
|
|
Packit |
1fb8d4 |
gdi_DeleteDC(hdc);
|
|
Packit |
1fb8d4 |
return rc;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
int TestGdiRect(int argc, char* argv[])
|
|
Packit |
1fb8d4 |
{
|
|
Packit Service |
5a9772 |
WINPR_UNUSED(argc);
|
|
Packit Service |
5a9772 |
WINPR_UNUSED(argv);
|
|
Packit Service |
5a9772 |
|
|
Packit |
1fb8d4 |
if (test_gdi_PtInRect() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (test_gdi_FillRect() < 0)
|
|
Packit |
1fb8d4 |
return -1;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
return 0;
|
|
Packit |
1fb8d4 |
}
|