gdiplus: Basic GdipGetDC/GdipReleaseDC implementation.

This commit is contained in:
Nikolay Sivov 2008-08-24 14:45:18 +04:00 committed by Alexandre Julliard
parent 4570501155
commit 366ae1e6c6
3 changed files with 21 additions and 12 deletions

View File

@ -95,6 +95,7 @@ struct GpGraphics{
GpUnit unit; /* page unit */
REAL scale; /* page scale */
GpMatrix * worldtrans; /* world transform */
BOOL busy; /* hdc handle obtained by GdipGetDC */
};
struct GpBrush{

View File

@ -752,6 +752,7 @@ GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC hdc, HANDLE hDevice, GpGraphics **gra
(*graphics)->compmode = CompositingModeSourceOver;
(*graphics)->unit = UnitDisplay;
(*graphics)->scale = 1.0;
(*graphics)->busy = FALSE;
return Ok;
}
@ -2679,26 +2680,29 @@ GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics *graphics, GDIPCONST G
GpStatus WINGDIPAPI GdipGetDC(GpGraphics *graphics, HDC *hdc)
{
FIXME("(%p, %p): stub\n", graphics, hdc);
if(!graphics || !hdc)
return InvalidParameter;
*hdc = NULL;
return NotImplemented;
if(graphics->busy)
return ObjectBusy;
*hdc = graphics->hdc;
graphics->busy = TRUE;
return Ok;
}
GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics *graphics, HDC hdc)
{
FIXME("(%p, %p): stub\n", graphics, hdc);
if(!graphics)
return InvalidParameter;
if(graphics->hdc != hdc)
if(graphics->hdc != hdc || !(graphics->busy))
return InvalidParameter;
return NotImplemented;
graphics->busy = FALSE;
return Ok;
}
GpStatus WINGDIPAPI GdipGetClip(GpGraphics *graphics, GpRegion *region)

View File

@ -545,13 +545,17 @@ static void test_Get_Release_DC(void)
status = GdipReleaseDC(NULL, (HDC)0xdeadbeef);
expect(InvalidParameter, status);
/* Release without Get */
status = GdipReleaseDC(graphics, hdc);
expect(InvalidParameter, status);
retdc = NULL;
status = GdipGetDC(graphics, &retdc);
todo_wine expect(Ok, status);
todo_wine ok(retdc == hdc, "Invalid HDC returned\n");
expect(Ok, status);
ok(retdc == hdc, "Invalid HDC returned\n");
/* call it once more */
status = GdipGetDC(graphics, &retdc);
todo_wine expect(ObjectBusy, status);
expect(ObjectBusy, status);
/* try all Graphics calls here */
status = Ok;
@ -712,7 +716,7 @@ static void test_Get_Release_DC(void)
todo_wine expect(ObjectBusy, status); status = Ok;
status = GdipReleaseDC(graphics, retdc);
todo_wine expect(Ok, status);
expect(Ok, status);
GdipDeletePen(pen);
GdipDeleteGraphics(graphics);