FreeRDP/libfreerdp/gdi/test/TestGdiEllipse.c

186 lines
6.2 KiB
C
Raw Normal View History

#include <freerdp/gdi/gdi.h>
#include <freerdp/gdi/dc.h>
#include <freerdp/gdi/pen.h>
#include <freerdp/gdi/shape.h>
#include <freerdp/gdi/region.h>
#include <freerdp/gdi/bitmap.h>
#include <winpr/crt.h>
#include <winpr/print.h>
#include "line.h"
#include "brush.h"
#include "clipping.h"
2016-07-15 17:22:09 +03:00
#include "helpers.h"
/* Ellipse() Test Data */
2016-07-15 17:22:09 +03:00
static const BYTE ellipse_case_1[256] =
{
"\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
"\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
"\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
"\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
"\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
};
2016-07-15 17:22:09 +03:00
static const BYTE ellipse_case_2[256] =
{
"\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
"\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
"\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
"\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
};
2016-07-15 17:22:09 +03:00
static const BYTE ellipse_case_3[256] =
{
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
"\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
"\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
};
int TestGdiEllipse(int argc, char* argv[])
{
2016-07-15 17:22:09 +03:00
int rc = -1;
2016-08-18 11:03:28 +03:00
UINT32 i, j;
2016-07-15 17:22:09 +03:00
const UINT32 RawFormat = PIXEL_FORMAT_RGB8;
const UINT32 colorFormats[] =
{
2016-07-15 17:22:09 +03:00
PIXEL_FORMAT_RGB15,
PIXEL_FORMAT_ARGB15,
PIXEL_FORMAT_RGB16,
PIXEL_FORMAT_RGB24,
PIXEL_FORMAT_ARGB32,
PIXEL_FORMAT_XRGB32,
PIXEL_FORMAT_RGBA32,
PIXEL_FORMAT_RGBX32,
PIXEL_FORMAT_BGR15,
PIXEL_FORMAT_ABGR15,
PIXEL_FORMAT_BGR16,
PIXEL_FORMAT_BGR24,
PIXEL_FORMAT_ABGR32,
PIXEL_FORMAT_XBGR32,
PIXEL_FORMAT_BGRA32,
PIXEL_FORMAT_BGRX32
};
const UINT32 number_formats = sizeof(colorFormats) / sizeof(colorFormats[0]);
gdiPalette g;
for (i = 0; i < number_formats; i++)
{
2016-08-18 12:54:29 +03:00
HGDI_DC hdc = NULL;
HGDI_PEN pen = NULL;
HGDI_BITMAP hBmp = NULL;
HGDI_BITMAP hBmp_Ellipse_1 = NULL;
HGDI_BITMAP hBmp_Ellipse_2 = NULL;
HGDI_BITMAP hBmp_Ellipse_3 = NULL;
2016-07-15 17:22:09 +03:00
const UINT32 format = colorFormats[i];
2016-07-18 13:36:22 +03:00
gdiPalette* hPalette = &g;
2016-07-15 17:22:09 +03:00
g.format = format;
2016-08-18 11:03:28 +03:00
for (j = 0; j < 256; j++)
2017-11-24 15:19:48 +03:00
g.palette[i] = FreeRDPGetColor(format, j, j, j, 0xFF);
2016-07-15 17:22:09 +03:00
rc = -1;
if (!(hdc = gdi_GetDC()))
{
printf("failed to get gdi device context\n");
goto fail;
}
hdc->format = format;
gdi_SetNullClipRgn(hdc);
if (!(pen = gdi_CreatePen(1, 1, 0, format, hPalette)))
{
printf("gdi_CreatePen failed\n");
goto fail;
}
gdi_SelectObject(hdc, (HGDIOBJECT) pen);
hBmp = gdi_CreateCompatibleBitmap(hdc, 16, 16);
gdi_SelectObject(hdc, (HGDIOBJECT) hBmp);
hBmp_Ellipse_1 = test_convert_to_bitmap(ellipse_case_1, RawFormat, 0, 0, 0,
format, 0, 0, 0, 16, 16, hPalette);
if (!hBmp_Ellipse_1)
goto fail;
hBmp_Ellipse_2 = test_convert_to_bitmap(ellipse_case_2, RawFormat, 0, 0, 0,
format, 0, 0, 0, 16, 16, hPalette);
if (!hBmp_Ellipse_2)
goto fail;
hBmp_Ellipse_3 = test_convert_to_bitmap(ellipse_case_3, RawFormat, 0, 0, 0,
format, 0, 0, 0, 16, 16, hPalette);
if (!hBmp_Ellipse_3)
goto fail;
/* Test Case 1: (0,0) -> (16, 16) */
if (!gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS, hPalette))
{
printf("gdi_BitBlt failed (line #%u)\n", __LINE__);
2016-08-17 10:01:27 +03:00
goto fail;
2016-07-15 17:22:09 +03:00
}
2016-08-18 12:54:29 +03:00
if (!gdi_Ellipse(hdc, 0, 0, 15, 15))
2016-07-15 17:22:09 +03:00
goto fail;
rc = 0;
fail:
gdi_DeleteObject((HGDIOBJECT) hBmp_Ellipse_1);
gdi_DeleteObject((HGDIOBJECT) hBmp_Ellipse_2);
gdi_DeleteObject((HGDIOBJECT) hBmp_Ellipse_3);
2016-08-18 12:54:29 +03:00
gdi_DeleteObject((HGDIOBJECT) hBmp);
2016-07-15 17:22:09 +03:00
gdi_DeleteObject((HGDIOBJECT) pen);
gdi_DeleteDC(hdc);
if (rc != 0)
break;
}
2016-07-15 17:22:09 +03:00
return rc;
}