gdiplus: Basic GdipGetDC/GdipReleaseDC implementation.
This commit is contained in:
parent
4570501155
commit
366ae1e6c6
|
@ -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{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue