From 2a6ac07ef7fa13114083317571c9e90c6b906438 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Fri, 17 Aug 2007 00:08:48 +0000 Subject: [PATCH] Fix memory DC so CreateCompatibleDC with null will create it. Based on msdn2 info, we need to setup display surface, etc. svn path=/trunk/; revision=28375 --- reactos/dll/win32/gdi32/objects/dc.c | 9 +++------ reactos/subsystems/win32/win32k/objects/dc.c | 15 +++++++-------- reactos/subsystems/win32/win32k/objects/gdiobj.c | 2 -- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/dc.c b/reactos/dll/win32/gdi32/objects/dc.c index 90fbef5a24f..99de25de40a 100644 --- a/reactos/dll/win32/gdi32/objects/dc.c +++ b/reactos/dll/win32/gdi32/objects/dc.c @@ -789,15 +789,12 @@ GetObjectType( case GDI_OBJECT_TYPE_ENHMETAFILE: Ret = OBJ_ENHMETAFILE; break; - case GDI_OBJECT_TYPE_ENHMETADC: - Ret = OBJ_ENHMETADC; - break; + case GDI_OBJECT_TYPE_METADC: + Ret = OBJ_METADC; + break; case GDI_OBJECT_TYPE_EXTPEN: Ret = OBJ_EXTPEN; break; - case GDI_OBJECT_TYPE_MEMDC: - Ret = OBJ_MEMDC; - break; default: DPRINT1("GetObjectType: Magic 0x%08x not implemented\n", Type); diff --git a/reactos/subsystems/win32/win32k/objects/dc.c b/reactos/subsystems/win32/win32k/objects/dc.c index e51098a8fc4..2917ce7acf7 100644 --- a/reactos/subsystems/win32/win32k/objects/dc.c +++ b/reactos/subsystems/win32/win32k/objects/dc.c @@ -166,7 +166,8 @@ NtGdiCreateCompatibleDC(HDC hDC) HDC hNewDC, DisplayDC; HRGN hVisRgn; UNICODE_STRING DriverName; - + INT DC_Type = DC_TYPE_DIRECT; + DisplayDC = NULL; if (hDC == NULL) { @@ -177,6 +178,7 @@ NtGdiCreateCompatibleDC(HDC hDC) return NULL; } hDC = DisplayDC; + DC_Type = DC_TYPE_MEMORY; // Null hDC == Memory DC. } /* Allocate a new DC based on the original DC's device */ @@ -205,7 +207,8 @@ NtGdiCreateCompatibleDC(HDC hDC) /* Copy information from original DC to new DC */ NewDC->hSelf = hNewDC; NewDC->IsIC = FALSE; - + NewDC->DC_Type = DC_Type; + NewDC->PDev = OrigDC->PDev; memcpy(NewDC->FillPatternSurfaces, OrigDC->FillPatternSurfaces, @@ -891,6 +894,7 @@ IntGdiCreateDC(PUNICODE_STRING Driver, return NULL; } + NewDC->DC_Type = DC_TYPE_DIRECT; NewDC->IsIC = CreateAsIC; NewDC->DevInfo = &PrimarySurface.DevInfo; NewDC->GDIInfo = &PrimarySurface.GDIInfo; @@ -2174,12 +2178,7 @@ NtGdiGetDCDword( case GdiGetFontLanguageInfo: break; case GdiGetIsMemDc: - { - if (dc->w.flags & DC_MEMORY) - SafeResult = DC_TYPE_MEMORY; // = dc->DC_Type; - else - SafeResult = DC_TYPE_DIRECT; - } + SafeResult = dc->DC_Type; break; case GdiGetMapMode: SafeResult = dc->Dc_Attr.iMapMode; diff --git a/reactos/subsystems/win32/win32k/objects/gdiobj.c b/reactos/subsystems/win32/win32k/objects/gdiobj.c index 0bcd35d841b..e04ae94e7bf 100644 --- a/reactos/subsystems/win32/win32k/objects/gdiobj.c +++ b/reactos/subsystems/win32/win32k/objects/gdiobj.c @@ -84,8 +84,6 @@ GDI_OBJ_INFO ObjInfo[] = {GDI_OBJECT_TYPE_METADC, sizeof(DC), GDI_CleanupDummy}, {GDI_OBJECT_TYPE_METAFILE, sizeof(DC), GDI_CleanupDummy}, {GDI_OBJECT_TYPE_ENHMETAFILE, 0, GDI_CleanupDummy}, - {GDI_OBJECT_TYPE_ENHMETADC, 0, GDI_CleanupDummy}, - {GDI_OBJECT_TYPE_MEMDC, 0, GDI_CleanupDummy}, {GDI_OBJECT_TYPE_EMF, 0, GDI_CleanupDummy} };