Blame libfreerdp/gdi/test/TestGdiRect.c

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
}