FreeRDP
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
TestGdiEllipse.c
1
2#include <freerdp/gdi/gdi.h>
3
4#include <freerdp/gdi/dc.h>
5#include <freerdp/gdi/pen.h>
6#include <freerdp/gdi/shape.h>
7#include <freerdp/gdi/region.h>
8#include <freerdp/gdi/bitmap.h>
9
10#include <winpr/crt.h>
11#include <winpr/print.h>
12
13#include "line.h"
14#include "brush.h"
15#include "clipping.h"
16#include "helpers.h"
17
18/* Ellipse() Test Data */
19
20static const BYTE ellipse_case_1[256] = {
21 "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
22 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
23 "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
24 "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
25 "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
26 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
27 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
28 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
29 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
30 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
31 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
32 "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
33 "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
34 "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
35 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
36 "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
37};
38
39static const BYTE ellipse_case_2[256] = {
40 "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
41 "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
42 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
43 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
44 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
45 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
46 "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
47 "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
48 "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
49 "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
50 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
51 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
52 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
53 "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
54 "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
55 "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
56};
57
58static const BYTE ellipse_case_3[256] = {
59 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
60 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
61 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
62 "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
63 "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
64 "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
65 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
66 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
67 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
68 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
69 "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
70 "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
71 "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
72 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
73 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
74 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
75};
76
77int TestGdiEllipse(int argc, char* argv[])
78{
79 int rc = -1;
80 const UINT32 RawFormat = PIXEL_FORMAT_RGB8;
81 const UINT32 colorFormats[] = { PIXEL_FORMAT_RGB15, PIXEL_FORMAT_ARGB15, PIXEL_FORMAT_RGB16,
82 PIXEL_FORMAT_RGB24, PIXEL_FORMAT_ARGB32, PIXEL_FORMAT_XRGB32,
83 PIXEL_FORMAT_RGBA32, PIXEL_FORMAT_RGBX32, PIXEL_FORMAT_BGR15,
84 PIXEL_FORMAT_ABGR15, PIXEL_FORMAT_BGR16, PIXEL_FORMAT_BGR24,
85 PIXEL_FORMAT_ABGR32, PIXEL_FORMAT_XBGR32, PIXEL_FORMAT_BGRA32,
86 PIXEL_FORMAT_BGRX32 };
87 const UINT32 number_formats = sizeof(colorFormats) / sizeof(colorFormats[0]);
88 gdiPalette g;
89 WINPR_UNUSED(argc);
90 WINPR_UNUSED(argv);
91
92 for (UINT32 i = 0; i < number_formats; i++)
93 {
94 HGDI_DC hdc = NULL;
95 HGDI_PEN pen = NULL;
96 HGDI_BITMAP hBmp = NULL;
97 HGDI_BITMAP hBmp_Ellipse_1 = NULL;
98 HGDI_BITMAP hBmp_Ellipse_2 = NULL;
99 HGDI_BITMAP hBmp_Ellipse_3 = NULL;
100 const UINT32 format = colorFormats[i];
101 gdiPalette* hPalette = &g;
102 g.format = format;
103
104 for (UINT32 j = 0; j < 256; j++)
105 g.palette[i] = FreeRDPGetColor(format, j, j, j, 0xFF);
106
107 rc = -1;
108
109 if (!(hdc = gdi_GetDC()))
110 {
111 printf("failed to get gdi device context\n");
112 goto fail;
113 }
114
115 hdc->format = format;
116 gdi_SetNullClipRgn(hdc);
117
118 if (!(pen = gdi_CreatePen(1, 1, 0, format, hPalette)))
119 {
120 printf("gdi_CreatePen failed\n");
121 goto fail;
122 }
123
124 gdi_SelectObject(hdc, (HGDIOBJECT)pen);
125 hBmp = gdi_CreateCompatibleBitmap(hdc, 16, 16);
126 gdi_SelectObject(hdc, (HGDIOBJECT)hBmp);
127 hBmp_Ellipse_1 = test_convert_to_bitmap(ellipse_case_1, RawFormat, 0, 0, 0, format, 0, 0, 0,
128 16, 16, hPalette);
129
130 if (!hBmp_Ellipse_1)
131 goto fail;
132
133 hBmp_Ellipse_2 = test_convert_to_bitmap(ellipse_case_2, RawFormat, 0, 0, 0, format, 0, 0, 0,
134 16, 16, hPalette);
135
136 if (!hBmp_Ellipse_2)
137 goto fail;
138
139 hBmp_Ellipse_3 = test_convert_to_bitmap(ellipse_case_3, RawFormat, 0, 0, 0, format, 0, 0, 0,
140 16, 16, hPalette);
141
142 if (!hBmp_Ellipse_3)
143 goto fail;
144
145 /* Test Case 1: (0,0) -> (16, 16) */
146 if (!gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS, hPalette))
147 {
148 printf("gdi_BitBlt failed (line #%u)\n", __LINE__);
149 goto fail;
150 }
151
152 if (!gdi_Ellipse(hdc, 0, 0, 15, 15))
153 goto fail;
154
155 rc = 0;
156 fail:
157 gdi_DeleteObject((HGDIOBJECT)hBmp_Ellipse_1);
158 gdi_DeleteObject((HGDIOBJECT)hBmp_Ellipse_2);
159 gdi_DeleteObject((HGDIOBJECT)hBmp_Ellipse_3);
160 gdi_DeleteObject((HGDIOBJECT)hBmp);
161 gdi_DeleteObject((HGDIOBJECT)pen);
162 gdi_DeleteDC(hdc);
163
164 if (rc != 0)
165 break;
166 }
167
168 return rc;
169}