2007-03-06 11:59:18 +00:00
|
|
|
/*
|
|
|
|
* Unit tests for dc functions
|
|
|
|
*
|
|
|
|
* Copyright (c) 2005 Huw Davies
|
|
|
|
* Copyright (c) 2005 Dmitry Timoshkov
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
*/
|
|
|
|
|
2008-05-09 17:35:45 +00:00
|
|
|
#define WINVER 0x0501 /* request latest DEVMODE */
|
|
|
|
|
2007-03-06 11:59:18 +00:00
|
|
|
#include <assert.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include "wine/test.h"
|
|
|
|
#include "winbase.h"
|
|
|
|
#include "wingdi.h"
|
|
|
|
#include "winuser.h"
|
|
|
|
#include "winerror.h"
|
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
static DWORD (WINAPI *pSetLayout)(HDC hdc, DWORD layout);
|
|
|
|
|
2007-03-06 11:59:18 +00:00
|
|
|
static void dump_region(HRGN hrgn)
|
|
|
|
{
|
|
|
|
DWORD i, size;
|
|
|
|
RGNDATA *data = NULL;
|
|
|
|
RECT *rect;
|
|
|
|
|
|
|
|
if (!hrgn)
|
|
|
|
{
|
|
|
|
printf( "(null) region\n" );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!(size = GetRegionData( hrgn, 0, NULL ))) return;
|
|
|
|
if (!(data = HeapAlloc( GetProcessHeap(), 0, size ))) return;
|
|
|
|
GetRegionData( hrgn, size, data );
|
2008-05-09 17:35:45 +00:00
|
|
|
printf( "%d rects:", data->rdh.nCount );
|
2007-03-06 11:59:18 +00:00
|
|
|
for (i = 0, rect = (RECT *)data->Buffer; i < data->rdh.nCount; i++, rect++)
|
2008-05-09 17:35:45 +00:00
|
|
|
printf( " (%d,%d)-(%d,%d)", rect->left, rect->top, rect->right, rect->bottom );
|
2007-03-06 11:59:18 +00:00
|
|
|
printf( "\n" );
|
|
|
|
HeapFree( GetProcessHeap(), 0, data );
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_savedc_2(void)
|
|
|
|
{
|
|
|
|
HWND hwnd;
|
|
|
|
HDC hdc;
|
|
|
|
HRGN hrgn;
|
|
|
|
RECT rc, rc_clip;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
hwnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,
|
|
|
|
0, 0, 0, NULL);
|
|
|
|
assert(hwnd != 0);
|
|
|
|
ShowWindow(hwnd, SW_SHOW);
|
|
|
|
UpdateWindow(hwnd);
|
|
|
|
|
|
|
|
hrgn = CreateRectRgn(0, 0, 0, 0);
|
|
|
|
assert(hrgn != 0);
|
|
|
|
|
|
|
|
hdc = GetDC(hwnd);
|
2010-03-07 07:29:40 +00:00
|
|
|
ok(hdc != NULL, "GetDC failed\n");
|
2007-03-06 11:59:18 +00:00
|
|
|
|
|
|
|
ret = GetClipBox(hdc, &rc_clip);
|
2011-10-03 09:26:08 +00:00
|
|
|
ok(ret == SIMPLEREGION || broken(ret == COMPLEXREGION), "GetClipBox returned %d instead of SIMPLEREGION\n", ret);
|
2007-03-06 11:59:18 +00:00
|
|
|
ret = GetClipRgn(hdc, hrgn);
|
|
|
|
ok(ret == 0, "GetClipRgn returned %d instead of 0\n", ret);
|
|
|
|
ret = GetRgnBox(hrgn, &rc);
|
2008-05-09 17:35:45 +00:00
|
|
|
ok(ret == NULLREGION, "GetRgnBox returned %d (%d,%d-%d,%d) instead of NULLREGION\n",
|
2007-03-06 11:59:18 +00:00
|
|
|
ret, rc.left, rc.top, rc.right, rc.bottom);
|
|
|
|
/*dump_region(hrgn);*/
|
|
|
|
SetRect(&rc, 0, 0, 100, 100);
|
|
|
|
ok(EqualRect(&rc, &rc_clip),
|
2008-05-09 17:35:45 +00:00
|
|
|
"rects are not equal: (%d,%d-%d,%d) - (%d,%d-%d,%d)\n",
|
2007-03-06 11:59:18 +00:00
|
|
|
rc.left, rc.top, rc.right, rc.bottom,
|
|
|
|
rc_clip.left, rc_clip.top, rc_clip.right, rc_clip.bottom);
|
|
|
|
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
todo_wine
|
|
|
|
{
|
|
|
|
ok(ret == 1, "ret = %d\n", ret);
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = IntersectClipRect(hdc, 0, 0, 50, 50);
|
2008-05-09 17:35:45 +00:00
|
|
|
if (ret == COMPLEXREGION)
|
2007-03-06 11:59:18 +00:00
|
|
|
{
|
2008-05-09 17:35:45 +00:00
|
|
|
/* XP returns COMPLEXREGION although dump_region reports only 1 rect */
|
2007-03-06 11:59:18 +00:00
|
|
|
trace("Windows BUG: IntersectClipRect returned %d instead of SIMPLEREGION\n", ret);
|
|
|
|
/* let's make sure that it's a simple region */
|
|
|
|
ret = GetClipRgn(hdc, hrgn);
|
|
|
|
ok(ret == 1, "GetClipRgn returned %d instead of 1\n", ret);
|
|
|
|
dump_region(hrgn);
|
|
|
|
}
|
2008-05-09 17:35:45 +00:00
|
|
|
else
|
|
|
|
ok(ret == SIMPLEREGION, "IntersectClipRect returned %d instead of SIMPLEREGION\n", ret);
|
2007-03-06 11:59:18 +00:00
|
|
|
|
|
|
|
ret = GetClipBox(hdc, &rc_clip);
|
2011-10-03 09:26:08 +00:00
|
|
|
ok(ret == SIMPLEREGION || broken(ret == COMPLEXREGION), "GetClipBox returned %d instead of SIMPLEREGION\n", ret);
|
2007-03-06 11:59:18 +00:00
|
|
|
SetRect(&rc, 0, 0, 50, 50);
|
2011-10-03 09:26:08 +00:00
|
|
|
ok(EqualRect(&rc, &rc_clip),
|
|
|
|
"rects are not equal: (%d,%d-%d,%d) - (%d,%d-%d,%d)\n",
|
|
|
|
rc.left, rc.top, rc.right, rc.bottom,
|
|
|
|
rc_clip.left, rc_clip.top, rc_clip.right, rc_clip.bottom);
|
2007-03-06 11:59:18 +00:00
|
|
|
|
|
|
|
ret = RestoreDC(hdc, 1);
|
|
|
|
ok(ret, "ret = %d\n", ret);
|
|
|
|
|
|
|
|
ret = GetClipBox(hdc, &rc_clip);
|
2011-10-03 09:26:08 +00:00
|
|
|
ok(ret == SIMPLEREGION || broken(ret == COMPLEXREGION), "GetClipBox returned %d instead of SIMPLEREGION\n", ret);
|
2007-03-06 11:59:18 +00:00
|
|
|
SetRect(&rc, 0, 0, 100, 100);
|
2011-10-03 09:26:08 +00:00
|
|
|
ok(EqualRect(&rc, &rc_clip),
|
|
|
|
"rects are not equal: (%d,%d-%d,%d) - (%d,%d-%d,%d)\n",
|
|
|
|
rc.left, rc.top, rc.right, rc.bottom,
|
|
|
|
rc_clip.left, rc_clip.top, rc_clip.right, rc_clip.bottom);
|
2007-03-06 11:59:18 +00:00
|
|
|
|
|
|
|
DeleteObject(hrgn);
|
|
|
|
ReleaseDC(hwnd, hdc);
|
|
|
|
DestroyWindow(hwnd);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_savedc(void)
|
|
|
|
{
|
|
|
|
HDC hdc = CreateDCA("DISPLAY", NULL, NULL, NULL);
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
ok(hdc != NULL, "CreateDC rets %p\n", hdc);
|
|
|
|
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 1, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 2, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 3, "ret = %d\n", ret);
|
|
|
|
ret = RestoreDC(hdc, -1);
|
|
|
|
ok(ret, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 3, "ret = %d\n", ret);
|
|
|
|
ret = RestoreDC(hdc, 1);
|
|
|
|
ok(ret, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 1, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 2, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 3, "ret = %d\n", ret);
|
|
|
|
ret = RestoreDC(hdc, -2);
|
|
|
|
ok(ret, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 2, "ret = %d\n", ret);
|
|
|
|
ret = RestoreDC(hdc, -2);
|
|
|
|
ok(ret, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 1, "ret = %d\n", ret);
|
|
|
|
ret = SaveDC(hdc);
|
2008-05-09 17:35:45 +00:00
|
|
|
ok(ret == 2, "ret = %d\n", ret);
|
2007-03-06 11:59:18 +00:00
|
|
|
ret = RestoreDC(hdc, -4);
|
|
|
|
ok(!ret, "ret = %d\n", ret);
|
|
|
|
ret = RestoreDC(hdc, 3);
|
|
|
|
ok(!ret, "ret = %d\n", ret);
|
|
|
|
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
/* Under Win9x the following RestoreDC call succeeds and clears the save stack. */
|
|
|
|
ret = RestoreDC(hdc, -3);
|
|
|
|
ok(!ret ||
|
|
|
|
broken(ret), /* Win9x */
|
|
|
|
"ret = %d\n", ret);
|
|
|
|
|
|
|
|
/* Trying to clear an empty save stack fails. */
|
2007-03-06 11:59:18 +00:00
|
|
|
ret = RestoreDC(hdc, -3);
|
|
|
|
ok(!ret, "ret = %d\n", ret);
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
|
|
|
|
ret = SaveDC(hdc);
|
|
|
|
ok(ret == 3 ||
|
|
|
|
broken(ret == 1), /* Win9x */
|
|
|
|
"ret = %d\n", ret);
|
|
|
|
|
|
|
|
/* Under Win9x the following RestoreDC call succeeds and clears the save stack. */
|
|
|
|
ret = RestoreDC(hdc, 0);
|
|
|
|
ok(!ret ||
|
|
|
|
broken(ret), /* Win9x */
|
|
|
|
"ret = %d\n", ret);
|
|
|
|
|
|
|
|
/* Trying to clear an empty save stack fails. */
|
2007-03-06 11:59:18 +00:00
|
|
|
ret = RestoreDC(hdc, 0);
|
|
|
|
ok(!ret, "ret = %d\n", ret);
|
|
|
|
|
|
|
|
ret = RestoreDC(hdc, 1);
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
ok(ret ||
|
|
|
|
broken(!ret), /* Win9x */
|
|
|
|
"ret = %d\n", ret);
|
2007-03-06 11:59:18 +00:00
|
|
|
|
|
|
|
DeleteDC(hdc);
|
|
|
|
}
|
|
|
|
|
2008-05-09 17:35:45 +00:00
|
|
|
static void test_GdiConvertToDevmodeW(void)
|
|
|
|
{
|
|
|
|
DEVMODEW * (WINAPI *pGdiConvertToDevmodeW)(const DEVMODEA *);
|
|
|
|
DEVMODEA dmA;
|
|
|
|
DEVMODEW *dmW;
|
|
|
|
BOOL ret;
|
|
|
|
|
|
|
|
pGdiConvertToDevmodeW = (void *)GetProcAddress(GetModuleHandleA("gdi32.dll"), "GdiConvertToDevmodeW");
|
|
|
|
if (!pGdiConvertToDevmodeW)
|
|
|
|
{
|
2009-05-17 07:05:22 +00:00
|
|
|
win_skip("GdiConvertToDevmodeW is not available on this platform\n");
|
2008-05-09 17:35:45 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dmA);
|
|
|
|
ok(ret, "EnumDisplaySettingsExA error %u\n", GetLastError());
|
|
|
|
ok(dmA.dmSize >= FIELD_OFFSET(DEVMODEA, dmICMMethod), "dmSize is too small: %04x\n", dmA.dmSize);
|
|
|
|
ok(dmA.dmSize <= sizeof(DEVMODEA), "dmSize is too large: %04x\n", dmA.dmSize);
|
|
|
|
|
|
|
|
dmW = pGdiConvertToDevmodeW(&dmA);
|
|
|
|
ok(dmW->dmSize >= FIELD_OFFSET(DEVMODEW, dmICMMethod), "dmSize is too small: %04x\n", dmW->dmSize);
|
|
|
|
ok(dmW->dmSize <= sizeof(DEVMODEW), "dmSize is too large: %04x\n", dmW->dmSize);
|
|
|
|
HeapFree(GetProcessHeap(), 0, dmW);
|
|
|
|
|
|
|
|
dmA.dmSize = FIELD_OFFSET(DEVMODEA, dmFields) + sizeof(dmA.dmFields);
|
|
|
|
dmW = pGdiConvertToDevmodeW(&dmA);
|
|
|
|
ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmFields) + sizeof(dmW->dmFields),
|
|
|
|
"wrong size %u\n", dmW->dmSize);
|
|
|
|
HeapFree(GetProcessHeap(), 0, dmW);
|
|
|
|
|
|
|
|
dmA.dmICMMethod = DMICMMETHOD_NONE;
|
|
|
|
dmA.dmSize = FIELD_OFFSET(DEVMODEA, dmICMMethod) + sizeof(dmA.dmICMMethod);
|
|
|
|
dmW = pGdiConvertToDevmodeW(&dmA);
|
|
|
|
ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmICMMethod) + sizeof(dmW->dmICMMethod),
|
|
|
|
"wrong size %u\n", dmW->dmSize);
|
|
|
|
ok(dmW->dmICMMethod == DMICMMETHOD_NONE,
|
|
|
|
"expected DMICMMETHOD_NONE, got %u\n", dmW->dmICMMethod);
|
|
|
|
HeapFree(GetProcessHeap(), 0, dmW);
|
|
|
|
|
|
|
|
dmA.dmSize = 1024;
|
|
|
|
dmW = pGdiConvertToDevmodeW(&dmA);
|
|
|
|
ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmPanningHeight) + sizeof(dmW->dmPanningHeight),
|
|
|
|
"wrong size %u\n", dmW->dmSize);
|
|
|
|
HeapFree(GetProcessHeap(), 0, dmW);
|
|
|
|
|
|
|
|
SetLastError(0xdeadbeef);
|
|
|
|
dmA.dmSize = 0;
|
|
|
|
dmW = pGdiConvertToDevmodeW(&dmA);
|
|
|
|
ok(!dmW, "GdiConvertToDevmodeW should fail\n");
|
|
|
|
ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %u\n", GetLastError());
|
|
|
|
|
|
|
|
/* this is the minimal dmSize that XP accepts */
|
|
|
|
dmA.dmSize = FIELD_OFFSET(DEVMODEA, dmFields);
|
|
|
|
dmW = pGdiConvertToDevmodeW(&dmA);
|
|
|
|
ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmFields),
|
|
|
|
"expected %04x, got %04x\n", FIELD_OFFSET(DEVMODEW, dmFields), dmW->dmSize);
|
|
|
|
HeapFree(GetProcessHeap(), 0, dmW);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_CreateCompatibleDC(void)
|
|
|
|
{
|
|
|
|
BOOL bRet;
|
2011-10-03 09:26:08 +00:00
|
|
|
HDC hdc, hNewDC, hdcMetafile;
|
|
|
|
HBITMAP bitmap;
|
|
|
|
INT caps;
|
|
|
|
|
|
|
|
bitmap = CreateBitmap( 10, 10, 1, 1, NULL );
|
2008-05-09 17:35:45 +00:00
|
|
|
|
|
|
|
/* Create a DC compatible with the screen */
|
2011-10-03 09:26:08 +00:00
|
|
|
hdc = CreateCompatibleDC(NULL);
|
|
|
|
ok(hdc != NULL, "CreateCompatibleDC returned %p\n", hdc);
|
|
|
|
ok( SelectObject( hdc, bitmap ) != 0, "SelectObject failed\n" );
|
|
|
|
caps = GetDeviceCaps( hdc, TECHNOLOGY );
|
|
|
|
ok( caps == DT_RASDISPLAY, "wrong caps %u\n", caps );
|
2008-05-09 17:35:45 +00:00
|
|
|
|
|
|
|
/* Delete this DC, this should succeed */
|
2011-10-03 09:26:08 +00:00
|
|
|
bRet = DeleteDC(hdc);
|
2008-05-09 17:35:45 +00:00
|
|
|
ok(bRet == TRUE, "DeleteDC returned %u\n", bRet);
|
|
|
|
|
|
|
|
/* Try to create a DC compatible to the deleted DC. This has to fail */
|
2011-10-03 09:26:08 +00:00
|
|
|
hNewDC = CreateCompatibleDC(hdc);
|
2008-05-09 17:35:45 +00:00
|
|
|
ok(hNewDC == NULL, "CreateCompatibleDC returned %p\n", hNewDC);
|
2011-10-03 09:26:08 +00:00
|
|
|
|
|
|
|
hdc = GetDC( 0 );
|
|
|
|
hdcMetafile = CreateEnhMetaFileA(hdc, NULL, NULL, NULL);
|
|
|
|
ok(hdcMetafile != 0, "CreateEnhMetaFileA failed\n");
|
|
|
|
hNewDC = CreateCompatibleDC( hdcMetafile );
|
|
|
|
ok(hNewDC != NULL, "CreateCompatibleDC failed\n");
|
|
|
|
ok( SelectObject( hNewDC, bitmap ) != 0, "SelectObject failed\n" );
|
|
|
|
caps = GetDeviceCaps( hdcMetafile, TECHNOLOGY );
|
|
|
|
ok( caps == DT_RASDISPLAY, "wrong caps %u\n", caps );
|
|
|
|
caps = GetDeviceCaps( hNewDC, TECHNOLOGY );
|
|
|
|
ok( caps == DT_RASDISPLAY, "wrong caps %u\n", caps );
|
|
|
|
DeleteDC( hNewDC );
|
|
|
|
DeleteEnhMetaFile( CloseEnhMetaFile( hdcMetafile ));
|
|
|
|
ReleaseDC( 0, hdc );
|
|
|
|
|
|
|
|
hdcMetafile = CreateMetaFileA(NULL);
|
|
|
|
ok(hdcMetafile != 0, "CreateEnhMetaFileA failed\n");
|
|
|
|
hNewDC = CreateCompatibleDC( hdcMetafile );
|
|
|
|
ok(hNewDC == NULL, "CreateCompatibleDC succeeded\n");
|
|
|
|
caps = GetDeviceCaps( hdcMetafile, TECHNOLOGY );
|
|
|
|
ok( caps == DT_METAFILE, "wrong caps %u\n", caps );
|
|
|
|
DeleteMetaFile( CloseMetaFile( hdcMetafile ));
|
|
|
|
|
|
|
|
DeleteObject( bitmap );
|
2008-05-09 17:35:45 +00:00
|
|
|
}
|
|
|
|
|
2009-05-17 07:05:22 +00:00
|
|
|
static void test_DC_bitmap(void)
|
|
|
|
{
|
|
|
|
HDC hdc, hdcmem;
|
|
|
|
DWORD bits[64];
|
|
|
|
HBITMAP hbmp, oldhbmp;
|
|
|
|
COLORREF col;
|
|
|
|
int i, bitspixel;
|
|
|
|
|
|
|
|
/* fill bitmap data with b&w pattern */
|
|
|
|
for( i = 0; i < 64; i++) bits[i] = i & 1 ? 0 : 0xffffff;
|
|
|
|
|
|
|
|
hdc = GetDC(0);
|
|
|
|
ok( hdc != NULL, "CreateDC rets %p\n", hdc);
|
|
|
|
bitspixel = GetDeviceCaps( hdc, BITSPIXEL);
|
|
|
|
/* create a memory dc */
|
|
|
|
hdcmem = CreateCompatibleDC( hdc);
|
|
|
|
ok( hdcmem != NULL, "CreateCompatibleDC rets %p\n", hdcmem);
|
|
|
|
/* tests */
|
|
|
|
/* test monochrome bitmap: should always work */
|
|
|
|
hbmp = CreateBitmap(32, 32, 1, 1, bits);
|
|
|
|
ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
|
|
|
|
oldhbmp = SelectObject( hdcmem, hbmp);
|
|
|
|
ok( oldhbmp != NULL, "SelectObject returned NULL\n" ); /* a memdc always has a bitmap selected */
|
|
|
|
col = GetPixel( hdcmem, 0, 0);
|
|
|
|
ok( col == 0xffffff, "GetPixel returned %08x, expected 00ffffff\n", col);
|
|
|
|
col = GetPixel( hdcmem, 1, 1);
|
|
|
|
ok( col == 0x000000, "GetPixel returned %08x, expected 00000000\n", col);
|
|
|
|
col = GetPixel( hdcmem, 100, 1);
|
|
|
|
ok( col == CLR_INVALID, "GetPixel returned %08x, expected ffffffff\n", col);
|
|
|
|
SelectObject( hdcmem, oldhbmp);
|
|
|
|
DeleteObject( hbmp);
|
|
|
|
|
|
|
|
/* test with 2 bits color depth, not likely to succeed */
|
|
|
|
hbmp = CreateBitmap(16, 16, 1, 2, bits);
|
|
|
|
ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
|
|
|
|
oldhbmp = SelectObject( hdcmem, hbmp);
|
|
|
|
if( bitspixel != 2)
|
|
|
|
ok( !oldhbmp, "SelectObject of a bitmap with 2 bits/pixel should return NULL\n");
|
|
|
|
if( oldhbmp) SelectObject( hdcmem, oldhbmp);
|
|
|
|
DeleteObject( hbmp);
|
|
|
|
|
|
|
|
/* test with 16 bits color depth, might succeed */
|
|
|
|
hbmp = CreateBitmap(6, 6, 1, 16, bits);
|
|
|
|
ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
|
|
|
|
oldhbmp = SelectObject( hdcmem, hbmp);
|
|
|
|
if( bitspixel == 16) {
|
|
|
|
ok( oldhbmp != NULL, "SelectObject returned NULL\n" );
|
|
|
|
col = GetPixel( hdcmem, 0, 0);
|
|
|
|
ok( col == 0xffffff,
|
|
|
|
"GetPixel of a bitmap with 16 bits/pixel returned %08x, expected 00ffffff\n", col);
|
|
|
|
col = GetPixel( hdcmem, 1, 1);
|
|
|
|
ok( col == 0x000000,
|
|
|
|
"GetPixel of a bitmap with 16 bits/pixel returned returned %08x, expected 00000000\n", col);
|
|
|
|
}
|
|
|
|
if( oldhbmp) SelectObject( hdcmem, oldhbmp);
|
|
|
|
DeleteObject( hbmp);
|
|
|
|
|
|
|
|
/* test with 32 bits color depth, probably succeed */
|
|
|
|
hbmp = CreateBitmap(4, 4, 1, 32, bits);
|
|
|
|
ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
|
|
|
|
oldhbmp = SelectObject( hdcmem, hbmp);
|
|
|
|
if( bitspixel == 32) {
|
|
|
|
ok( oldhbmp != NULL, "SelectObject returned NULL\n" );
|
|
|
|
col = GetPixel( hdcmem, 0, 0);
|
|
|
|
ok( col == 0xffffff,
|
|
|
|
"GetPixel of a bitmap with 32 bits/pixel returned %08x, expected 00ffffff\n", col);
|
|
|
|
col = GetPixel( hdcmem, 1, 1);
|
|
|
|
ok( col == 0x000000,
|
|
|
|
"GetPixel of a bitmap with 32 bits/pixel returned returned %08x, expected 00000000\n", col);
|
|
|
|
}
|
|
|
|
if( oldhbmp) SelectObject( hdcmem, oldhbmp);
|
|
|
|
DeleteObject( hbmp);
|
|
|
|
ReleaseDC( 0, hdc );
|
|
|
|
}
|
|
|
|
|
2010-03-07 07:29:40 +00:00
|
|
|
static void test_DeleteDC(void)
|
|
|
|
{
|
|
|
|
HWND hwnd;
|
|
|
|
HDC hdc, hdc_test;
|
|
|
|
WNDCLASSEX cls;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
/* window DC */
|
|
|
|
hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0,0,100,100,
|
|
|
|
0, 0, 0, NULL);
|
|
|
|
ok(hwnd != 0, "CreateWindowExA failed\n");
|
|
|
|
|
|
|
|
hdc = GetDC(hwnd);
|
|
|
|
ok(hdc != 0, "GetDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = DeleteDC(hdc);
|
|
|
|
ok(ret, "DeleteDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(!ret || broken(ret) /* win9x */, "GetObjectType should fail for a deleted DC\n");
|
|
|
|
|
|
|
|
hdc = GetWindowDC(hwnd);
|
|
|
|
ok(hdc != 0, "GetDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = DeleteDC(hdc);
|
|
|
|
ok(ret, "DeleteDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(!ret || broken(ret) /* win9x */, "GetObjectType should fail for a deleted DC\n");
|
|
|
|
|
|
|
|
DestroyWindow(hwnd);
|
|
|
|
|
|
|
|
/* desktop window DC */
|
|
|
|
hwnd = GetDesktopWindow();
|
|
|
|
ok(hwnd != 0, "GetDesktopWindow failed\n");
|
|
|
|
|
|
|
|
hdc = GetDC(hwnd);
|
|
|
|
ok(hdc != 0, "GetDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = DeleteDC(hdc);
|
|
|
|
ok(ret, "DeleteDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(!ret || broken(ret) /* win9x */, "GetObjectType should fail for a deleted DC\n");
|
|
|
|
|
|
|
|
hdc = GetWindowDC(hwnd);
|
|
|
|
ok(hdc != 0, "GetDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = DeleteDC(hdc);
|
|
|
|
ok(ret, "DeleteDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(!ret || broken(ret) /* win9x */, "GetObjectType should fail for a deleted DC\n");
|
|
|
|
|
|
|
|
/* CS_CLASSDC */
|
|
|
|
memset(&cls, 0, sizeof(cls));
|
|
|
|
cls.cbSize = sizeof(cls);
|
|
|
|
cls.style = CS_CLASSDC;
|
|
|
|
cls.hInstance = GetModuleHandle(0);
|
|
|
|
cls.lpszClassName = "Wine class DC";
|
|
|
|
cls.lpfnWndProc = DefWindowProcA;
|
|
|
|
ret = RegisterClassExA(&cls);
|
|
|
|
ok(ret, "RegisterClassExA failed\n");
|
|
|
|
|
|
|
|
hwnd = CreateWindowExA(0, "Wine class DC", NULL, WS_POPUP|WS_VISIBLE, 0,0,100,100,
|
|
|
|
0, 0, 0, NULL);
|
|
|
|
ok(hwnd != 0, "CreateWindowExA failed\n");
|
|
|
|
|
|
|
|
hdc = GetDC(hwnd);
|
|
|
|
ok(hdc != 0, "GetDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = DeleteDC(hdc);
|
|
|
|
ok(ret, "DeleteDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = ReleaseDC(hwnd, hdc);
|
|
|
|
ok(ret, "ReleaseDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
|
|
|
|
hdc_test = hdc;
|
|
|
|
|
|
|
|
hdc = GetWindowDC(hwnd);
|
|
|
|
ok(hdc != 0, "GetDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = DeleteDC(hdc);
|
|
|
|
ok(ret, "DeleteDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(!ret || broken(ret) /* win9x */, "GetObjectType should fail for a deleted DC\n");
|
|
|
|
|
|
|
|
DestroyWindow(hwnd);
|
|
|
|
|
|
|
|
ret = GetObjectType(hdc_test);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
|
|
|
|
ret = UnregisterClassA("Wine class DC", GetModuleHandle(NULL));
|
|
|
|
ok(ret, "UnregisterClassA failed\n");
|
|
|
|
|
|
|
|
ret = GetObjectType(hdc_test);
|
|
|
|
todo_wine
|
|
|
|
ok(!ret, "GetObjectType should fail for a deleted DC\n");
|
|
|
|
|
|
|
|
/* CS_OWNDC */
|
|
|
|
memset(&cls, 0, sizeof(cls));
|
|
|
|
cls.cbSize = sizeof(cls);
|
|
|
|
cls.style = CS_OWNDC;
|
|
|
|
cls.hInstance = GetModuleHandle(0);
|
|
|
|
cls.lpszClassName = "Wine own DC";
|
|
|
|
cls.lpfnWndProc = DefWindowProcA;
|
|
|
|
ret = RegisterClassExA(&cls);
|
|
|
|
ok(ret, "RegisterClassExA failed\n");
|
|
|
|
|
|
|
|
hwnd = CreateWindowExA(0, "Wine own DC", NULL, WS_POPUP|WS_VISIBLE, 0,0,100,100,
|
|
|
|
0, 0, 0, NULL);
|
|
|
|
ok(hwnd != 0, "CreateWindowExA failed\n");
|
|
|
|
|
|
|
|
hdc = GetDC(hwnd);
|
|
|
|
ok(hdc != 0, "GetDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = DeleteDC(hdc);
|
|
|
|
ok(ret, "DeleteDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = ReleaseDC(hwnd, hdc);
|
|
|
|
ok(ret, "ReleaseDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
|
|
|
|
hdc = GetWindowDC(hwnd);
|
|
|
|
ok(hdc != 0, "GetDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(ret == OBJ_DC, "expected OBJ_DC, got %d\n", ret);
|
|
|
|
ret = DeleteDC(hdc);
|
|
|
|
ok(ret, "DeleteDC failed\n");
|
|
|
|
ret = GetObjectType(hdc);
|
|
|
|
ok(!ret || broken(ret) /* win9x */, "GetObjectType should fail for a deleted DC\n");
|
|
|
|
|
|
|
|
DestroyWindow(hwnd);
|
|
|
|
|
|
|
|
ret = UnregisterClassA("Wine own DC", GetModuleHandle(NULL));
|
|
|
|
ok(ret, "UnregisterClassA failed\n");
|
|
|
|
}
|
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
static void test_boundsrect(void)
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
{
|
|
|
|
HDC hdc;
|
2011-10-03 09:26:08 +00:00
|
|
|
HBITMAP bitmap;
|
|
|
|
RECT rect, expect, set_rect;
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
UINT ret;
|
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
hdc = CreateCompatibleDC(0);
|
|
|
|
ok(hdc != NULL, "CreateCompatibleDC failed\n");
|
|
|
|
bitmap = CreateCompatibleBitmap( hdc, 200, 200 );
|
|
|
|
SelectObject( hdc, bitmap );
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
|
|
|
|
ret = GetBoundsRect(hdc, NULL, 0);
|
2011-10-03 09:26:08 +00:00
|
|
|
ok(ret == 0, "Expected GetBoundsRect to return 0, got %u\n", ret);
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
|
|
|
|
ret = GetBoundsRect(hdc, NULL, ~0U);
|
2011-10-03 09:26:08 +00:00
|
|
|
ok(ret == 0, "Expected GetBoundsRect to return 0, got %u\n", ret);
|
|
|
|
|
|
|
|
/* Test parameter handling order. */
|
|
|
|
SetRect(&set_rect, 10, 20, 40, 50);
|
|
|
|
ret = SetBoundsRect(hdc, &set_rect, DCB_SET);
|
|
|
|
ok(ret & DCB_RESET,
|
|
|
|
"Expected return flag DCB_RESET to be set, got %u\n", ret);
|
|
|
|
|
|
|
|
ret = GetBoundsRect(hdc, NULL, DCB_RESET);
|
|
|
|
ok(ret == 0,
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
"Expected GetBoundsRect to return 0, got %u\n", ret);
|
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_RESET,
|
|
|
|
"Expected GetBoundsRect to return DCB_RESET, got %u\n", ret);
|
|
|
|
SetRect(&expect, 0, 0, 0, 0);
|
|
|
|
ok(EqualRect(&rect, &expect) ||
|
|
|
|
broken(EqualRect(&rect, &set_rect)), /* nt4 sp1-5 */
|
|
|
|
"Expected output rectangle (0,0)-(0,0), got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
|
|
|
|
ret = GetBoundsRect(NULL, NULL, 0);
|
|
|
|
ok(ret == 0, "Expected GetBoundsRect to return 0, got %u\n", ret);
|
|
|
|
|
|
|
|
ret = GetBoundsRect(NULL, NULL, ~0U);
|
|
|
|
ok(ret == 0, "Expected GetBoundsRect to return 0, got %u\n", ret);
|
|
|
|
|
|
|
|
ret = SetBoundsRect(NULL, NULL, 0);
|
|
|
|
ok(ret == 0, "Expected SetBoundsRect to return 0, got %u\n", ret);
|
|
|
|
|
|
|
|
ret = SetBoundsRect(NULL, NULL, ~0U);
|
|
|
|
ok(ret == 0, "Expected SetBoundsRect to return 0, got %u\n", ret);
|
|
|
|
|
|
|
|
SetRect(&set_rect, 10, 20, 40, 50);
|
|
|
|
ret = SetBoundsRect(hdc, &set_rect, DCB_SET);
|
|
|
|
ok(ret == (DCB_RESET | DCB_DISABLE), "SetBoundsRect returned %x\n", ret);
|
|
|
|
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_SET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, 10, 20, 40, 50);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
|
|
|
|
SetMapMode( hdc, MM_ANISOTROPIC );
|
|
|
|
SetViewportExtEx( hdc, 2, 2, NULL );
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_SET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, 5, 10, 20, 25);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
|
|
|
|
SetViewportOrgEx( hdc, 20, 30, NULL );
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_SET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, -5, -5, 10, 10);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
|
|
|
|
SetRect(&set_rect, 10, 20, 40, 50);
|
|
|
|
ret = SetBoundsRect(hdc, &set_rect, DCB_SET);
|
|
|
|
ok(ret == (DCB_SET | DCB_DISABLE), "SetBoundsRect returned %x\n", ret);
|
|
|
|
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_SET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, 10, 20, 40, 50);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
|
|
|
|
SetMapMode( hdc, MM_TEXT );
|
|
|
|
SetViewportOrgEx( hdc, 0, 0, NULL );
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_SET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, 40, 70, 100, 130);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
|
|
|
|
if (pSetLayout)
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
{
|
2011-10-03 09:26:08 +00:00
|
|
|
pSetLayout( hdc, LAYOUT_RTL );
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_SET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, 159, 70, 99, 130);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
SetRect(&set_rect, 50, 25, 30, 35);
|
|
|
|
ret = SetBoundsRect(hdc, &set_rect, DCB_SET);
|
|
|
|
ok(ret == (DCB_SET | DCB_DISABLE), "SetBoundsRect returned %x\n", ret);
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_SET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, 50, 25, 30, 35);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
pSetLayout( hdc, LAYOUT_LTR );
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
2011-10-03 09:26:08 +00:00
|
|
|
ok(ret == DCB_SET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, 149, 25, 169, 35);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
|
|
|
}
|
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
/* empty rect resets, except on nt4 */
|
|
|
|
SetRect(&expect, 20, 20, 10, 10);
|
|
|
|
ret = SetBoundsRect(hdc, &set_rect, DCB_SET);
|
|
|
|
ok(ret == (DCB_SET | DCB_DISABLE), "SetBoundsRect returned %x\n", ret);
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_RESET || broken(ret == DCB_SET) /* nt4 */,
|
|
|
|
"GetBoundsRect returned %x\n", ret);
|
|
|
|
if (ret == DCB_RESET)
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
{
|
2011-10-03 09:26:08 +00:00
|
|
|
SetRect(&expect, 0, 0, 0, 0);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
SetRect(&expect, 20, 20, 20, 20);
|
|
|
|
ret = SetBoundsRect(hdc, &set_rect, DCB_SET);
|
|
|
|
ok(ret == (DCB_RESET | DCB_DISABLE), "SetBoundsRect returned %x\n", ret);
|
|
|
|
ret = GetBoundsRect(hdc, &rect, 0);
|
|
|
|
ok(ret == DCB_RESET, "GetBoundsRect returned %x\n", ret);
|
|
|
|
SetRect(&expect, 0, 0, 0, 0);
|
|
|
|
ok(EqualRect(&rect, &expect), "Got (%d,%d)-(%d,%d)\n",
|
|
|
|
rect.left, rect.top, rect.right, rect.bottom);
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
}
|
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
DeleteDC( hdc );
|
|
|
|
DeleteObject( bitmap );
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void test_desktop_colorres(void)
|
|
|
|
{
|
|
|
|
HDC hdc = GetDC(NULL);
|
|
|
|
int bitspixel, colorres;
|
|
|
|
|
|
|
|
bitspixel = GetDeviceCaps(hdc, BITSPIXEL);
|
|
|
|
ok(bitspixel != 0, "Expected to get valid BITSPIXEL capability value\n");
|
|
|
|
|
|
|
|
colorres = GetDeviceCaps(hdc, COLORRES);
|
|
|
|
ok(colorres != 0 ||
|
|
|
|
broken(colorres == 0), /* Win9x */
|
|
|
|
"Expected to get valid COLORRES capability value\n");
|
|
|
|
|
|
|
|
if (colorres)
|
|
|
|
{
|
|
|
|
switch (bitspixel)
|
|
|
|
{
|
|
|
|
case 8:
|
|
|
|
ok(colorres == 18,
|
|
|
|
"Expected COLORRES to be 18, got %d\n", colorres);
|
|
|
|
break;
|
|
|
|
case 16:
|
|
|
|
ok(colorres == 16,
|
|
|
|
"Expected COLORRES to be 16, got %d\n", colorres);
|
|
|
|
break;
|
|
|
|
case 24:
|
|
|
|
case 32:
|
|
|
|
ok(colorres == 24,
|
|
|
|
"Expected COLORRES to be 24, got %d\n", bitspixel);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
ok(0, "Got unknown BITSPIXEL %d with COLORRES %d\n", bitspixel, colorres);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-10-03 09:26:08 +00:00
|
|
|
ReleaseDC(NULL, hdc);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_gamma(void)
|
|
|
|
{
|
|
|
|
BOOL ret;
|
|
|
|
HDC hdc = GetDC(NULL);
|
|
|
|
WORD oldramp[3][256], ramp[3][256];
|
|
|
|
INT i;
|
|
|
|
|
|
|
|
ret = GetDeviceGammaRamp(hdc, &oldramp);
|
|
|
|
if (!ret)
|
|
|
|
{
|
|
|
|
win_skip("GetDeviceGammaRamp failed, skipping tests\n");
|
|
|
|
goto done;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* try to set back old ramp */
|
|
|
|
ret = SetDeviceGammaRamp(hdc, &oldramp);
|
|
|
|
if (!ret)
|
|
|
|
{
|
|
|
|
win_skip("SetDeviceGammaRamp failed, skipping tests\n");
|
|
|
|
goto done;
|
|
|
|
}
|
|
|
|
|
|
|
|
memcpy(ramp, oldramp, sizeof(ramp));
|
|
|
|
|
|
|
|
/* set one color ramp to zeros */
|
|
|
|
memset(ramp[0], 0, sizeof(ramp[0]));
|
|
|
|
ret = SetDeviceGammaRamp(hdc, &ramp);
|
|
|
|
ok(!ret, "SetDeviceGammaRamp succeeded\n");
|
|
|
|
|
|
|
|
/* set one color ramp to a flat straight rising line */
|
|
|
|
for (i = 0; i < 256; i++) ramp[0][i] = i;
|
|
|
|
ret = SetDeviceGammaRamp(hdc, &ramp);
|
|
|
|
todo_wine ok(!ret, "SetDeviceGammaRamp succeeded\n");
|
|
|
|
|
|
|
|
/* set one color ramp to a steep straight rising line */
|
|
|
|
for (i = 0; i < 256; i++) ramp[0][i] = i * 256;
|
|
|
|
ret = SetDeviceGammaRamp(hdc, &ramp);
|
|
|
|
ok(ret, "SetDeviceGammaRamp failed\n");
|
|
|
|
|
|
|
|
/* try a bright gamma ramp */
|
|
|
|
ramp[0][0] = 0;
|
|
|
|
ramp[0][1] = 0x7FFF;
|
|
|
|
for (i = 2; i < 256; i++) ramp[0][i] = 0xFFFF;
|
|
|
|
ret = SetDeviceGammaRamp(hdc, &ramp);
|
|
|
|
ok(!ret, "SetDeviceGammaRamp succeeded\n");
|
|
|
|
|
|
|
|
/* try ramps which are not uniform */
|
|
|
|
ramp[0][0] = 0;
|
|
|
|
for (i = 1; i < 256; i++) ramp[0][i] = ramp[0][i - 1] + 512;
|
|
|
|
ret = SetDeviceGammaRamp(hdc, &ramp);
|
|
|
|
ok(ret, "SetDeviceGammaRamp failed\n");
|
|
|
|
ramp[0][0] = 0;
|
|
|
|
for (i = 2; i < 256; i+=2)
|
|
|
|
{
|
|
|
|
ramp[0][i - 1] = ramp[0][i - 2];
|
|
|
|
ramp[0][i] = ramp[0][i - 2] + 512;
|
|
|
|
}
|
|
|
|
ret = SetDeviceGammaRamp(hdc, &ramp);
|
|
|
|
ok(ret, "SetDeviceGammaRamp failed\n");
|
|
|
|
|
|
|
|
/* cleanup: set old ramp again */
|
|
|
|
ret = SetDeviceGammaRamp(hdc, &oldramp);
|
|
|
|
ok(ret, "SetDeviceGammaRamp failed\n");
|
|
|
|
|
|
|
|
done:
|
|
|
|
ReleaseDC(NULL, hdc);
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
}
|
|
|
|
|
2007-03-06 11:59:18 +00:00
|
|
|
START_TEST(dc)
|
|
|
|
{
|
2011-10-03 09:26:08 +00:00
|
|
|
pSetLayout = (void *)GetProcAddress( GetModuleHandle("gdi32.dll"), "SetLayout");
|
2007-03-06 11:59:18 +00:00
|
|
|
test_savedc();
|
|
|
|
test_savedc_2();
|
2008-05-09 17:35:45 +00:00
|
|
|
test_GdiConvertToDevmodeW();
|
|
|
|
test_CreateCompatibleDC();
|
2009-05-17 07:05:22 +00:00
|
|
|
test_DC_bitmap();
|
2010-03-07 07:29:40 +00:00
|
|
|
test_DeleteDC();
|
2011-10-03 09:26:08 +00:00
|
|
|
test_boundsrect();
|
Sync advapi32, comctl32, crypt32, cryptui, cryptnet, fusion, gdi32, gdiplus, hlink, imm32, jscript, kernel32, localspl, msacm32, mscms, msi, mstask, msvcrtd, msxml3, ntdll, ole32, pdh, psapi, quartz, rasapi32, riched20 AND rsaenh Winetests.
TBD mshtml, shell32, oleaut32 which still fail to build here
svn path=/trunk/; revision=47931
2010-07-03 12:45:23 +00:00
|
|
|
test_desktop_colorres();
|
2011-10-03 09:26:08 +00:00
|
|
|
test_gamma();
|
2007-03-06 11:59:18 +00:00
|
|
|
}
|