[GDI+: 6/10] GdipDrawLineI test
Evan Stade
estade at gmail.com
Mon Jun 11 14:58:42 CDT 2007
attached this time
On 6/11/07, Evan Stade <estade at gmail.com> wrote:
> Hi,
>
> Changelog:
> *Added framework for pixel-by-pixel comparison in tests
> *added GdipDrawLineI test
>
> dlls/gdiplus/tests/graphics.c | 164 +++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 164 insertions(+), 0 deletions(-)
>
> -Evan Stade
>
-------------- next part --------------
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c
index 29a4b55..e5ebba1 100644
--- a/dlls/gdiplus/tests/graphics.c
+++ b/dlls/gdiplus/tests/graphics.c
@@ -53,6 +53,122 @@ static LRESULT WINAPI testname##_window_
} \
}
+static const INT drawline_bmp1[192] =
+{0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xddffffff,0xccddbbcc,0xffffffbb,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xddbbccdd,0xccddbbcc,0xffffffbb,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xbbccddff,0xddbbccdd,
+ 0xffffbbcc,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xccddffff,0xbbccddbb,0xffbbccdd,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xddffffff,
+ 0xccddbbcc,0xbbccddbb,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xddbbccdd,0xccddbbcc,0xffffffbb,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xbbccddff,0xddbbccdd,0xffffbbcc,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffbbccdd,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff};
+
+static const INT drawline_bmp2[192] =
+{0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xbbccddff,
+ 0xddbbccdd,0xccddbbcc,0xbbccddbb,0xddbbccdd,0xffffbbcc,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xbbccddff,0xddbbccdd,0xccddbbcc,
+ 0xbbccddbb,0xddbbccdd,0xffffbbcc,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff};
+
+static INT smart_GetDIBits(HDC hdc, HBITMAP hbm, BYTE** buff, INT *bytes,
+ INT bitcount, INT compression, INT imagesize)
+{
+ INT ret;
+ BITMAPINFO bi;
+
+ bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ bi.bmiHeader.biHeight = 0;
+ bi.bmiHeader.biWidth = 0;
+ bi.bmiHeader.biPlanes = 1;
+ bi.bmiHeader.biBitCount = 0;
+ bi.bmiHeader.biCompression = 0;
+
+ ret = GetDIBits(hdc, hbm, 0, 0, NULL, &bi, DIB_RGB_COLORS);
+ assert(ret);
+
+ bi.bmiHeader.biBitCount = bitcount;
+ bi.bmiHeader.biCompression = compression;
+ bi.bmiHeader.biSizeImage = imagesize;
+
+ ret = GetDIBits(hdc, hbm, 0, 0, NULL, &bi, DIB_RGB_COLORS);
+ assert(ret);
+ *buff = (BYTE*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ bi.bmiHeader.biSizeImage);
+ *bytes = bi.bmiHeader.biSizeImage;
+ return GetDIBits(hdc, hbm, 0, bi.bmiHeader.biHeight, *buff, &bi,
+ DIB_RGB_COLORS);
+}
+
+/* captures bitmap into buff and returns height of captured bitmap */
+static INT capture_dc(HDC hdc, BYTE** buff, INT* bytes)
+{
+ HDC hdcCap;
+ HBITMAP hbmCap;
+ INT scanlines;
+
+ hdcCap = CreateCompatibleDC(hdc);
+ hbmCap = CreateCompatibleBitmap(hdc, WND_SZ, WND_SZ);
+ SelectObject(hdcCap, hbmCap);
+ BitBlt(hdcCap,
+ 0,0,
+ WND_SZ, WND_SZ,
+ hdc,
+ 0,0,
+ SRCCOPY);
+
+ /* get bitmap, 3 bytes per pixel */
+ scanlines = smart_GetDIBits(hdc, hbmCap, buff, bytes,
+ 24, 0, WND_SZ*WND_SZ*3);
+
+ DeleteDC(hdcCap);
+ DeleteObject(hbmCap);
+
+ return scanlines;
+}
+
static void constructor(HWND hwnd, HDC hdc)
{
GpStatus stat;
@@ -82,7 +198,48 @@ static void constructor(HWND hwnd, HDC h
expect(stat, InvalidParameter);
}
+static void drawline(HWND hwnd, HDC hdc)
+{
+ GpStatus stat;
+ GpPen *pen, *eraser;
+ GpGraphics *graphics;
+
+ INT height = 0, num_bytes = 0;
+ BYTE* buff;
+
+ stat = GdipCreatePen1((ARGB)0xffffffff, 2.0f, UnitPixel, &eraser);
+
+ stat = GdipCreateFromHDC(hdc, &graphics);
+ expect(stat, Ok);
+ stat = GdipCreatePen1((ARGB)0xffbbccdd, 2.0f, UnitPixel, &pen);
+ expect(stat, Ok);
+ stat = GdipDrawLineI(graphics, pen, 3, 3, 10, 10);
+ expect(stat, Ok);
+
+ height = capture_dc(hdc, &buff, &num_bytes);
+ assert(height == WND_SZ);
+
+ /* diagonal lines do not come out the same */
+ todo_wine
+ ok(!memcmp(buff, drawline_bmp1, num_bytes), "Expected different bitmap\n");
+
+ GdipDrawLineI(graphics, eraser, 3, 3, 10, 10);
+ GdipDrawLineI(graphics, pen, 3, 10, 10, 10);
+
+ HeapFree(GetProcessHeap(), 0, buff);
+ height = capture_dc(hdc, &buff, &num_bytes);
+ assert(height == WND_SZ);
+
+ ok(!memcmp(buff, drawline_bmp2, num_bytes), "Expected different bitmap\n");
+
+ HeapFree(GetProcessHeap(), 0, buff);
+ GdipDeleteGraphics(graphics);
+ GdipDeletePen(pen);
+ GdipDeletePen(eraser);
+}
+
SIMPLE_WINDOW_PROC(constructor)
+SIMPLE_WINDOW_PROC(drawline)
static BOOL RegisterHelper(WNDPROC x, LPCTSTR ClassName)
{
@@ -110,6 +267,7 @@ static BOOL RegisterWindowClasses(void)
BOOL ret;
ret = RegisterHelper(constructor_window_proc, TEXT("Constructor"));
+ ret = ret && RegisterHelper(drawline_window_proc, TEXT("DrawLine"));
return ret;
}
@@ -137,6 +295,11 @@ static void test_constructor_destructor(
window_test_runner(TEXT("Constructor"), TEXT("Graphics constructor test"));
}
+static void test_drawline(void)
+{
+ window_test_runner(TEXT("DrawLine"), TEXT("Draw line test"));
+}
+
START_TEST(graphics)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -152,6 +315,7 @@ START_TEST(graphics)
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
test_constructor_destructor();
+ test_drawline();
GdiplusShutdown(gdiplusToken);
}
--
1.4.1
More information about the wine-patches
mailing list