mirror of
https://github.com/reactos/reactos.git
synced 2025-07-01 19:51:34 +00:00
Changes to make win32k.sys compile
svn path=/trunk/; revision=655
This commit is contained in:
parent
fe56845ebe
commit
b779c01fb6
5 changed files with 150 additions and 76 deletions
|
@ -24,10 +24,10 @@ typedef struct _WIN_DC_INFO
|
||||||
HPEN hPen;
|
HPEN hPen;
|
||||||
HBRUSH hBrush;
|
HBRUSH hBrush;
|
||||||
HFONT hFont;
|
HFONT hFont;
|
||||||
|
|
||||||
#if 0
|
|
||||||
HBITMAP hBitmap;
|
HBITMAP hBitmap;
|
||||||
HBITMAP hFirstBitmap; /* Bitmap selected at creation of the DC */
|
HBITMAP hFirstBitmap; /* Bitmap selected at creation of the DC */
|
||||||
|
|
||||||
|
#if 0
|
||||||
HANDLE hDevice;
|
HANDLE hDevice;
|
||||||
HPALETTE hPalette;
|
HPALETTE hPalette;
|
||||||
|
|
||||||
|
@ -76,6 +76,12 @@ typedef struct _WIN_DC_INFO
|
||||||
#endif
|
#endif
|
||||||
} WIN_DC_INFO;
|
} WIN_DC_INFO;
|
||||||
|
|
||||||
|
/* DC flags */
|
||||||
|
#define DC_MEMORY 0x0001 /* It is a memory DC */
|
||||||
|
#define DC_SAVED 0x0002 /* It is a saved DC */
|
||||||
|
#define DC_DIRTY 0x0004 /* hVisRgn has to be updated */
|
||||||
|
#define DC_THUNKHOOK 0x0008 /* DC hook is in the 16-bit code */
|
||||||
|
|
||||||
#define GDI_DC_TYPE (1)
|
#define GDI_DC_TYPE (1)
|
||||||
|
|
||||||
typedef struct _DC
|
typedef struct _DC
|
||||||
|
@ -102,6 +108,8 @@ typedef struct _DC
|
||||||
INT vportExtX; /* Viewport extent */
|
INT vportExtX; /* Viewport extent */
|
||||||
INT vportExtY;
|
INT vportExtY;
|
||||||
|
|
||||||
|
INT saveLevel;
|
||||||
|
|
||||||
WIN_DC_INFO w;
|
WIN_DC_INFO w;
|
||||||
} DC, *PDC;
|
} DC, *PDC;
|
||||||
|
|
||||||
|
@ -177,6 +185,7 @@ INT STDCALL W32kSetPolyFillMode(HDC hDC, INT polyFillMode);
|
||||||
INT STDCALL W32kSetRelAbs(HDC hDC, INT relAbsMode);
|
INT STDCALL W32kSetRelAbs(HDC hDC, INT relAbsMode);
|
||||||
INT STDCALL W32kSetROP2(HDC hDC, INT ROPmode);
|
INT STDCALL W32kSetROP2(HDC hDC, INT ROPmode);
|
||||||
INT STDCALL W32kSetStretchBltMode(HDC hDC, INT stretchBltMode);
|
INT STDCALL W32kSetStretchBltMode(HDC hDC, INT stretchBltMode);
|
||||||
|
COLORREF STDCALL W32kSetTextColor(HDC hDC, COLORREF color);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
* (RJJ) taken from WINE
|
* (RJJ) taken from WINE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __WIN32K_GDIOBJ_H
|
||||||
|
#define __WIN32K_GDIOBJ_H
|
||||||
|
|
||||||
/* GDI objects magic numbers */
|
/* GDI objects magic numbers */
|
||||||
#define GO_PEN_MAGIC 0x4f47
|
#define GO_PEN_MAGIC 0x4f47
|
||||||
#define GO_BRUSH_MAGIC 0x4f48
|
#define GO_BRUSH_MAGIC 0x4f48
|
||||||
|
@ -25,5 +28,12 @@ typedef struct _GDIOBJHDR
|
||||||
HANDLE hNext;
|
HANDLE hNext;
|
||||||
WORD wMagic;
|
WORD wMagic;
|
||||||
DWORD dwCount;
|
DWORD dwCount;
|
||||||
|
KSPIN_LOCK Lock;
|
||||||
} GDIOBJHDR, *PGDIOBJHDR;
|
} GDIOBJHDR, *PGDIOBJHDR;
|
||||||
|
|
||||||
|
typedef PVOID PGDIOBJ;
|
||||||
|
|
||||||
|
PGDIOBJ GDIOBJ_AllocObject(WORD Size, WORD Magic);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ MAIN_OBJECTS = main/dllmain.o
|
||||||
MISC_OBJECTS = misc/driver.o
|
MISC_OBJECTS = misc/driver.o
|
||||||
OBJECTS_OBJECTS = objects/bitmaps.o objects/brush.o objects/cliprgn.o \
|
OBJECTS_OBJECTS = objects/bitmaps.o objects/brush.o objects/cliprgn.o \
|
||||||
objects/color.o objects/coord.o objects/dc.o \
|
objects/color.o objects/coord.o objects/dc.o \
|
||||||
objects/fillshap.o objects/icm.o objects/line.o \
|
objects/fillshap.o objects/gdiobj.o objects/icm.o \
|
||||||
objects/metafile.o objects/paint.o objects/path.o \
|
objects/line.o objects/metafile.o objects/paint.o \
|
||||||
objects/pen.o objects/print.o objects/region.o \
|
objects/path.o objects/pen.o objects/print.o \
|
||||||
objects/text.o objects/wingl.o
|
objects/region.o objects/text.o objects/wingl.o
|
||||||
RESOURCE_OBJECT = win32k.coff
|
RESOURCE_OBJECT = win32k.coff
|
||||||
STUBS_OBJECTS = stubs/stubs.o
|
STUBS_OBJECTS = stubs/stubs.o
|
||||||
|
|
||||||
|
|
|
@ -66,12 +66,13 @@ INT STDCALL func_name( HDC hdc, INT mode ) \
|
||||||
} \
|
} \
|
||||||
prevMode = dc->dc_field; \
|
prevMode = dc->dc_field; \
|
||||||
dc->dc_field = mode; \
|
dc->dc_field = mode; \
|
||||||
DC_Unlock(dc); \
|
DC_UnlockDC(hdc); \
|
||||||
return prevMode; \
|
return prevMode; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------- File Statics
|
// --------------------------------------------------------- File Statics
|
||||||
|
|
||||||
|
static void W32kSetDCState16(HDC hDC, HDC hDCSave);
|
||||||
|
|
||||||
// ----------------------------------------------------- Public Functions
|
// ----------------------------------------------------- Public Functions
|
||||||
|
|
||||||
|
@ -82,58 +83,64 @@ BOOL STDCALL W32kCancelDC(HDC hDC)
|
||||||
|
|
||||||
HDC STDCALL W32kCreateCompatableDC(HDC hDC)
|
HDC STDCALL W32kCreateCompatableDC(HDC hDC)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
|
||||||
|
|
||||||
PDC NewDC, OrigDC;
|
PDC NewDC, OrigDC;
|
||||||
HBITMAP hBitmap;
|
HBITMAP hBitmap;
|
||||||
|
|
||||||
OrigDC = DC_HandleToPtr(hDC);
|
OrigDC = DC_HandleToPtr(hDC);
|
||||||
|
|
||||||
NewDC = DC_AllocDC(OrigDC->Driver);
|
/* Allocate a new DC based on the original DC's device */
|
||||||
|
NewDC = DC_AllocDC(OrigDC->DriverName);
|
||||||
if (NewDC == NULL)
|
if (NewDC == NULL)
|
||||||
{
|
{
|
||||||
DC_UnlockDC(OrigDC);
|
DC_UnlockDC(OrigDC);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if ((NewDC->DeviceDriver = DRIVER_FindMPDriver(Driver)) == NULL)
|
|
||||||
{
|
|
||||||
DC_FreeDC(NewDC);
|
|
||||||
DC_UnlockDC(OrigDC);
|
|
||||||
|
|
||||||
return NULL;
|
/* Copy information from original DC to new DC */
|
||||||
}
|
NewDC->hSelf = NewDC;
|
||||||
if ((GDEnableDriver = DRIVER_FindDDIDriver(Driver)) == NULL)
|
|
||||||
{
|
|
||||||
DC_FreeDC(NewDC);
|
|
||||||
DC_UnlockDC(OrigDC);
|
|
||||||
|
|
||||||
return NULL;
|
/* FIXME: Should this DC request its own PDEV? */
|
||||||
}
|
NewDC->PDev = OrigDC->PDev;
|
||||||
|
|
||||||
/* Create default bitmap */
|
NewDC->DMW = OrigDC->DMW;
|
||||||
if (!(hBitmap = CreateBitmap( 1, 1, 1, 1, NULL )))
|
memcpy(NewDC->FillPatternSurfaces,
|
||||||
{
|
OrigDC->FillPatternSurfaces,
|
||||||
DC_FreeDC(NewDC);
|
sizeof OrigDC->FillPatternSurfaces);
|
||||||
DC_UnlockDC(OrigDC);
|
NewDC->GDIInfo = OrigDC->GDIInfo;
|
||||||
|
NewDC->DevInfo = OrigDC->DevInfo;
|
||||||
|
|
||||||
return NULL;
|
/* FIXME: Should this DC request its own surface? */
|
||||||
}
|
NewDC->Surface = OrigDC->Surface;
|
||||||
dc->w.flags = DC_MEMORY;
|
|
||||||
dc->w.bitsPerPixel = 1;
|
|
||||||
dc->w.hBitmap = hbitmap;
|
|
||||||
dc->w.hFirstBitmap = hbitmap;
|
|
||||||
|
|
||||||
/* Copy the driver-specific physical device info into
|
NewDC->DriverFunctions = OrigDC->DriverFunctions;
|
||||||
* the new DC. The driver may use this read-only info
|
/* DriverName is copied in the AllocDC routine */
|
||||||
* while creating the compatible DC below. */
|
NewDC->DeviceDriver = OrigDC->DeviceDriver;
|
||||||
if (origDC)
|
NewDC->wndOrgX = OrigDC->wndOrgX;
|
||||||
{
|
NewDC->wndOrgY = OrigDC->wndOrgY;
|
||||||
dc->physDev = origDC->physDev;
|
NewDC->wndExtX = OrigDC->wndExtX;
|
||||||
}
|
NewDC->wndExtY = OrigDC->wndExtY;
|
||||||
|
NewDC->vportOrgX = OrigDC->vportOrgX;
|
||||||
|
NewDC->vportOrgY = OrigDC->vportOrgY;
|
||||||
|
NewDC->vportExtX = OrigDC->vportExtX;
|
||||||
|
NewDC->vportExtY = OrigDC->vportExtY;
|
||||||
|
|
||||||
DC_InitDC(NewDC);
|
DC_InitDC(NewDC);
|
||||||
DC_Unlock(NewDC);
|
|
||||||
|
/* Create default bitmap */
|
||||||
|
if (!(hBitmap = W32kCreateBitmap( 1, 1, 1, 1, NULL )))
|
||||||
|
{
|
||||||
|
DC_FreeDC(NewDC);
|
||||||
|
DC_UnlockDC(OrigDC);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
NewDC->w.flags = DC_MEMORY;
|
||||||
|
NewDC->w.bitsPerPixel = 1;
|
||||||
|
NewDC->w.hBitmap = hBitmap;
|
||||||
|
NewDC->w.hFirstBitmap = hBitmap;
|
||||||
|
|
||||||
|
DC_UnlockDC(NewDC);
|
||||||
DC_UnlockDC(OrigDC);
|
DC_UnlockDC(OrigDC);
|
||||||
|
|
||||||
return DC_PtrToHandle(NewDC);
|
return DC_PtrToHandle(NewDC);
|
||||||
|
@ -146,12 +153,14 @@ HDC STDCALL W32kCreateDC(LPCWSTR Driver,
|
||||||
{
|
{
|
||||||
PGD_ENABLEDRIVER GDEnableDriver;
|
PGD_ENABLEDRIVER GDEnableDriver;
|
||||||
PDC NewDC;
|
PDC NewDC;
|
||||||
|
HDC hDC;
|
||||||
DRVENABLEDATA DED;
|
DRVENABLEDATA DED;
|
||||||
|
|
||||||
/* Check for existing DC object */
|
/* Check for existing DC object */
|
||||||
if ((NewDC = DC_FindOpenDC(Driver)) != NULL)
|
if ((NewDC = DC_FindOpenDC(Driver)) != NULL)
|
||||||
{
|
{
|
||||||
return DC_PtrToHandle(NewDC);
|
hDC = DC_PtrToHandle(NewDC);
|
||||||
|
return W32kCreateCompatableDC(hDC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate a DC object */
|
/* Allocate a DC object */
|
||||||
|
@ -210,7 +219,7 @@ HDC STDCALL W32kCreateDC(LPCWSTR Driver,
|
||||||
HS_DDI_MAX,
|
HS_DDI_MAX,
|
||||||
NewDC->FillPatternSurfaces,
|
NewDC->FillPatternSurfaces,
|
||||||
sizeof(NewDC->GDIInfo),
|
sizeof(NewDC->GDIInfo),
|
||||||
&NewDC->GDIInfo,
|
(ULONG *) &NewDC->GDIInfo,
|
||||||
sizeof(NewDC->DevInfo),
|
sizeof(NewDC->DevInfo),
|
||||||
&NewDC->DevInfo,
|
&NewDC->DevInfo,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -244,7 +253,7 @@ HDC STDCALL W32kCreateIC(LPCWSTR Driver,
|
||||||
CONST PDEVMODEW DevMode)
|
CONST PDEVMODEW DevMode)
|
||||||
{
|
{
|
||||||
/* FIXME: this should probably do something else... */
|
/* FIXME: this should probably do something else... */
|
||||||
return W32kCreateDC(Driver, Device, Output DevMode);
|
return W32kCreateDC(Driver, Device, Output, DevMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL STDCALL W32kDeleteDC(HDC DCHandle)
|
BOOL STDCALL W32kDeleteDC(HDC DCHandle)
|
||||||
|
@ -315,19 +324,23 @@ HDC W32kGetDCState16(HDC hDC)
|
||||||
newdc = DC_AllocDC(NULL);
|
newdc = DC_AllocDC(NULL);
|
||||||
if (newdc == NULL)
|
if (newdc == NULL)
|
||||||
{
|
{
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
newdc->w.flags = dc->w.flags | DC_SAVED;
|
newdc->w.flags = dc->w.flags | DC_SAVED;
|
||||||
|
#if 0
|
||||||
newdc->w.devCaps = dc->w.devCaps;
|
newdc->w.devCaps = dc->w.devCaps;
|
||||||
|
#endif
|
||||||
newdc->w.hPen = dc->w.hPen;
|
newdc->w.hPen = dc->w.hPen;
|
||||||
newdc->w.hBrush = dc->w.hBrush;
|
newdc->w.hBrush = dc->w.hBrush;
|
||||||
newdc->w.hFont = dc->w.hFont;
|
newdc->w.hFont = dc->w.hFont;
|
||||||
newdc->w.hBitmap = dc->w.hBitmap;
|
newdc->w.hBitmap = dc->w.hBitmap;
|
||||||
newdc->w.hFirstBitmap = dc->w.hFirstBitmap;
|
newdc->w.hFirstBitmap = dc->w.hFirstBitmap;
|
||||||
|
#if 0
|
||||||
newdc->w.hDevice = dc->w.hDevice;
|
newdc->w.hDevice = dc->w.hDevice;
|
||||||
newdc->w.hPalette = dc->w.hPalette;
|
newdc->w.hPalette = dc->w.hPalette;
|
||||||
|
#endif
|
||||||
newdc->w.totalExtent = dc->w.totalExtent;
|
newdc->w.totalExtent = dc->w.totalExtent;
|
||||||
newdc->w.bitsPerPixel = dc->w.bitsPerPixel;
|
newdc->w.bitsPerPixel = dc->w.bitsPerPixel;
|
||||||
newdc->w.ROPmode = dc->w.ROPmode;
|
newdc->w.ROPmode = dc->w.ROPmode;
|
||||||
|
@ -355,10 +368,12 @@ HDC W32kGetDCState16(HDC hDC)
|
||||||
newdc->w.CursPosX = dc->w.CursPosX;
|
newdc->w.CursPosX = dc->w.CursPosX;
|
||||||
newdc->w.CursPosY = dc->w.CursPosY;
|
newdc->w.CursPosY = dc->w.CursPosY;
|
||||||
newdc->w.ArcDirection = dc->w.ArcDirection;
|
newdc->w.ArcDirection = dc->w.ArcDirection;
|
||||||
|
#if 0
|
||||||
newdc->w.xformWorld2Wnd = dc->w.xformWorld2Wnd;
|
newdc->w.xformWorld2Wnd = dc->w.xformWorld2Wnd;
|
||||||
newdc->w.xformWorld2Vport = dc->w.xformWorld2Vport;
|
newdc->w.xformWorld2Vport = dc->w.xformWorld2Vport;
|
||||||
newdc->w.xformVport2World = dc->w.xformVport2World;
|
newdc->w.xformVport2World = dc->w.xformVport2World;
|
||||||
newdc->w.vport2WorldValid = dc->w.vport2WorldValid;
|
newdc->w.vport2WorldValid = dc->w.vport2WorldValid;
|
||||||
|
#endif
|
||||||
newdc->wndOrgX = dc->wndOrgX;
|
newdc->wndOrgX = dc->wndOrgX;
|
||||||
newdc->wndOrgY = dc->wndOrgY;
|
newdc->wndOrgY = dc->wndOrgY;
|
||||||
newdc->wndExtX = dc->wndExtX;
|
newdc->wndExtX = dc->wndExtX;
|
||||||
|
@ -371,21 +386,25 @@ HDC W32kGetDCState16(HDC hDC)
|
||||||
newdc->hSelf = DC_PtrToHandle(newdc);
|
newdc->hSelf = DC_PtrToHandle(newdc);
|
||||||
newdc->saveLevel = 0;
|
newdc->saveLevel = 0;
|
||||||
|
|
||||||
|
#if 0
|
||||||
PATH_InitGdiPath( &newdc->w.path );
|
PATH_InitGdiPath( &newdc->w.path );
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Get/SetDCState() don't change hVisRgn field ("Undoc. Windows" p.559). */
|
/* Get/SetDCState() don't change hVisRgn field ("Undoc. Windows" p.559). */
|
||||||
|
|
||||||
|
#if 0
|
||||||
newdc->w.hGCClipRgn = newdc->w.hVisRgn = 0;
|
newdc->w.hGCClipRgn = newdc->w.hVisRgn = 0;
|
||||||
|
#endif
|
||||||
if (dc->w.hClipRgn)
|
if (dc->w.hClipRgn)
|
||||||
{
|
{
|
||||||
newdc->w.hClipRgn = CreateRectRgn( 0, 0, 0, 0 );
|
newdc->w.hClipRgn = W32kCreateRectRgn( 0, 0, 0, 0 );
|
||||||
CombineRgn( newdc->w.hClipRgn, dc->w.hClipRgn, 0, RGN_COPY );
|
W32kCombineRgn( newdc->w.hClipRgn, dc->w.hClipRgn, 0, RGN_COPY );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newdc->w.hClipRgn = 0;
|
newdc->w.hClipRgn = 0;
|
||||||
}
|
}
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return newdc->hSelf;
|
return newdc->hSelf;
|
||||||
}
|
}
|
||||||
|
@ -450,7 +469,7 @@ BOOL STDCALL W32kRestoreDC(HDC hDC, INT SaveLevel)
|
||||||
|
|
||||||
if ((SaveLevel < 1) || (SaveLevel > dc->saveLevel))
|
if ((SaveLevel < 1) || (SaveLevel > dc->saveLevel))
|
||||||
{
|
{
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -463,24 +482,26 @@ BOOL STDCALL W32kRestoreDC(HDC hDC, INT SaveLevel)
|
||||||
dcs = DC_HandleToPtr(hdcs);
|
dcs = DC_HandleToPtr(hdcs);
|
||||||
if (dcs == NULL)
|
if (dcs == NULL)
|
||||||
{
|
{
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
dc->header.hNext = dcs->header.hNext;
|
dc->header.hNext = dcs->header.hNext;
|
||||||
if (--dc->saveLevel < level)
|
if (--dc->saveLevel < SaveLevel)
|
||||||
{
|
{
|
||||||
W32kSetDCState16(hdc, hdcs);
|
W32kSetDCState16(hDC, hdcs);
|
||||||
|
#if 0
|
||||||
if (!PATH_AssignGdiPath( &dc->w.path, &dcs->w.path ))
|
if (!PATH_AssignGdiPath( &dc->w.path, &dcs->w.path ))
|
||||||
{
|
{
|
||||||
/* FIXME: This might not be quite right, since we're
|
/* FIXME: This might not be quite right, since we're
|
||||||
* returning FALSE but still destroying the saved DC state */
|
* returning FALSE but still destroying the saved DC state */
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
W32kDeleteDC(hdcs);
|
W32kDeleteDC(hdcs);
|
||||||
}
|
}
|
||||||
DC_UnlockDC(hdc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
@ -488,23 +509,24 @@ BOOL STDCALL W32kRestoreDC(HDC hDC, INT SaveLevel)
|
||||||
INT STDCALL W32kSaveDC(HDC hDC)
|
INT STDCALL W32kSaveDC(HDC hDC)
|
||||||
{
|
{
|
||||||
HDC hdcs;
|
HDC hdcs;
|
||||||
DC dc, dcs;
|
PDC dc, dcs;
|
||||||
INT ret;
|
INT ret;
|
||||||
|
|
||||||
dc = DC_HandleToPtr(hdc);
|
dc = DC_HandleToPtr(hDC);
|
||||||
if (dc == NULL)
|
if (dc == NULL)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(hdcs = W32kGetDCState16(hdc)))
|
if (!(hdcs = W32kGetDCState16(hDC)))
|
||||||
{
|
{
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dcs = DC_HandleToPtr(hdcs);
|
dcs = DC_HandleToPtr(hdcs);
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* Copy path. The reason why path saving / restoring is in SaveDC/
|
/* Copy path. The reason why path saving / restoring is in SaveDC/
|
||||||
* RestoreDC and not in GetDCState/SetDCState is that the ...DCState
|
* RestoreDC and not in GetDCState/SetDCState is that the ...DCState
|
||||||
* functions are only in Win16 (which doesn't have paths) and that
|
* functions are only in Win16 (which doesn't have paths) and that
|
||||||
|
@ -518,12 +540,13 @@ INT STDCALL W32kSaveDC(HDC hDC)
|
||||||
W32kDeleteDC(hdcs);
|
W32kDeleteDC(hdcs);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
dcs->header.hNext = dc->header.hNext;
|
dcs->header.hNext = dc->header.hNext;
|
||||||
dc->header.hNext = hdcs;
|
dc->header.hNext = hdcs;
|
||||||
ret = ++dc->saveLevel;
|
ret = ++dc->saveLevel;
|
||||||
DC_UnlockDC(hdcs);
|
DC_UnlockDC(hdcs);
|
||||||
DC_UnlockDC(hdc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -551,12 +574,12 @@ COLORREF STDCALL W32kSetBkColor(HDC hDC, COLORREF color)
|
||||||
|
|
||||||
oldColor = dc->w.backgroundColor;
|
oldColor = dc->w.backgroundColor;
|
||||||
dc->w.backgroundColor = color;
|
dc->w.backgroundColor = color;
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return oldColor;
|
return oldColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void W32kSetDCState16(HDC hDC, HDC hDCSave)
|
static void W32kSetDCState16(HDC hDC, HDC hDCSave)
|
||||||
{
|
{
|
||||||
PDC dc, dcs;
|
PDC dc, dcs;
|
||||||
|
|
||||||
|
@ -569,22 +592,30 @@ void W32kSetDCState16(HDC hDC, HDC hDCSave)
|
||||||
dcs = DC_HandleToPtr(hDCSave);
|
dcs = DC_HandleToPtr(hDCSave);
|
||||||
if (dcs == NULL)
|
if (dcs == NULL)
|
||||||
{
|
{
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!dcs->w.flags & DC_SAVED)
|
if (!dcs->w.flags & DC_SAVED)
|
||||||
{
|
{
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
DC_UnlockDC(dcs);
|
DC_UnlockDC(hDCSave);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dc->w.flags = dcs->w.flags & ~DC_SAVED;
|
dc->w.flags = dcs->w.flags & ~DC_SAVED;
|
||||||
|
|
||||||
|
#if 0
|
||||||
dc->w.devCaps = dcs->w.devCaps;
|
dc->w.devCaps = dcs->w.devCaps;
|
||||||
|
#endif
|
||||||
|
|
||||||
dc->w.hFirstBitmap = dcs->w.hFirstBitmap;
|
dc->w.hFirstBitmap = dcs->w.hFirstBitmap;
|
||||||
|
|
||||||
|
#if 0
|
||||||
dc->w.hDevice = dcs->w.hDevice;
|
dc->w.hDevice = dcs->w.hDevice;
|
||||||
|
#endif
|
||||||
|
|
||||||
dc->w.totalExtent = dcs->w.totalExtent;
|
dc->w.totalExtent = dcs->w.totalExtent;
|
||||||
dc->w.ROPmode = dcs->w.ROPmode;
|
dc->w.ROPmode = dcs->w.ROPmode;
|
||||||
dc->w.polyFillMode = dcs->w.polyFillMode;
|
dc->w.polyFillMode = dcs->w.polyFillMode;
|
||||||
|
@ -611,10 +642,13 @@ void W32kSetDCState16(HDC hDC, HDC hDCSave)
|
||||||
dc->w.CursPosX = dcs->w.CursPosX;
|
dc->w.CursPosX = dcs->w.CursPosX;
|
||||||
dc->w.CursPosY = dcs->w.CursPosY;
|
dc->w.CursPosY = dcs->w.CursPosY;
|
||||||
dc->w.ArcDirection = dcs->w.ArcDirection;
|
dc->w.ArcDirection = dcs->w.ArcDirection;
|
||||||
|
|
||||||
|
#if 0
|
||||||
dc->w.xformWorld2Wnd = dcs->w.xformWorld2Wnd;
|
dc->w.xformWorld2Wnd = dcs->w.xformWorld2Wnd;
|
||||||
dc->w.xformWorld2Vport = dcs->w.xformWorld2Vport;
|
dc->w.xformWorld2Vport = dcs->w.xformWorld2Vport;
|
||||||
dc->w.xformVport2World = dcs->w.xformVport2World;
|
dc->w.xformVport2World = dcs->w.xformVport2World;
|
||||||
dc->w.vport2WorldValid = dcs->w.vport2WorldValid;
|
dc->w.vport2WorldValid = dcs->w.vport2WorldValid;
|
||||||
|
#endif
|
||||||
|
|
||||||
dc->wndOrgX = dcs->wndOrgX;
|
dc->wndOrgX = dcs->wndOrgX;
|
||||||
dc->wndOrgY = dcs->wndOrgY;
|
dc->wndOrgY = dcs->wndOrgY;
|
||||||
|
@ -630,6 +664,7 @@ void W32kSetDCState16(HDC hDC, HDC hDCSave)
|
||||||
dc->w.bitsPerPixel = dcs->w.bitsPerPixel;
|
dc->w.bitsPerPixel = dcs->w.bitsPerPixel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (dcs->w.hClipRgn)
|
if (dcs->w.hClipRgn)
|
||||||
{
|
{
|
||||||
if (!dc->w.hClipRgn)
|
if (!dc->w.hClipRgn)
|
||||||
|
@ -648,18 +683,21 @@ void W32kSetDCState16(HDC hDC, HDC hDCSave)
|
||||||
dc->w.hClipRgn = 0;
|
dc->w.hClipRgn = 0;
|
||||||
}
|
}
|
||||||
CLIPPING_UpdateGCRegion( dc );
|
CLIPPING_UpdateGCRegion( dc );
|
||||||
|
#endif
|
||||||
|
|
||||||
W32kSelectObject( hdc, dcs->w.hBitmap );
|
W32kSelectObject( hDC, dcs->w.hBitmap );
|
||||||
W32kSelectObject( hdc, dcs->w.hBrush );
|
W32kSelectObject( hDC, dcs->w.hBrush );
|
||||||
W32kSelectObject( hdc, dcs->w.hFont );
|
W32kSelectObject( hDC, dcs->w.hFont );
|
||||||
W32kSelectObject( hdc, dcs->w.hPen );
|
W32kSelectObject( hDC, dcs->w.hPen );
|
||||||
W32kSetBkColor( hdc, dcs->w.backgroundColor);
|
W32kSetBkColor( hDC, dcs->w.backgroundColor);
|
||||||
W32kSetTextColor( hdc, dcs->w.textColor);
|
W32kSetTextColor( hDC, dcs->w.textColor);
|
||||||
|
|
||||||
GDISelectPalette16( hdc, dcs->w.hPalette, FALSE );
|
#if 0
|
||||||
|
GDISelectPalette16( hDC, dcs->w.hPalette, FALSE );
|
||||||
|
#endif
|
||||||
|
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
DC_UnlockDC(dcs);
|
DC_UnlockDC(hDCSave);
|
||||||
}
|
}
|
||||||
|
|
||||||
COLORREF STDCALL W32kSetTextColor(HDC hDC, COLORREF color)
|
COLORREF STDCALL W32kSetTextColor(HDC hDC, COLORREF color)
|
||||||
|
@ -674,7 +712,7 @@ COLORREF STDCALL W32kSetTextColor(HDC hDC, COLORREF color)
|
||||||
|
|
||||||
oldColor = dc->w.textColor;
|
oldColor = dc->w.textColor;
|
||||||
dc->w.textColor = color;
|
dc->w.textColor = color;
|
||||||
DC_UnlockDC(dc);
|
DC_UnlockDC(hDC);
|
||||||
|
|
||||||
return oldColor;
|
return oldColor;
|
||||||
}
|
}
|
||||||
|
@ -700,6 +738,12 @@ PDC DC_AllocDC(LPCWSTR Driver)
|
||||||
return NewDC;
|
return NewDC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PDC DC_FindOpenDC(LPCWSTR Driver)
|
||||||
|
{
|
||||||
|
/* FIXME */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void DC_InitDC(PDC DCToInit)
|
void DC_InitDC(PDC DCToInit)
|
||||||
{
|
{
|
||||||
HDC DCHandle;
|
HDC DCHandle;
|
||||||
|
|
|
@ -1,19 +1,30 @@
|
||||||
|
/*
|
||||||
|
* GDIOBJ.C - GDI object manipulation routines
|
||||||
|
*
|
||||||
|
* $Id: gdiobj.c,v 1.2 1999/09/10 21:17:07 rex Exp $
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
#include <ddk/ntddk.h>
|
||||||
#include <win32k/gdiobj.h>
|
#include <win32k/gdiobj.h>
|
||||||
|
|
||||||
HANDLE GDIOBJ_AllocObject(WORD Size, WORD Magic)
|
PGDIOBJ GDIOBJ_AllocObject(WORD Size, WORD Magic)
|
||||||
{
|
{
|
||||||
PGDIOBJ NewObj;
|
PGDIOBJHDR NewObj;
|
||||||
|
|
||||||
NewObj = ExAllocatePool(NonPagedPool, Size);
|
NewObj = ExAllocatePool(NonPagedPool, Size);
|
||||||
if (NewDC == NULL)
|
if (NewObj == NULL)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlZeroMemory(NewObj, Size);
|
RtlZeroMemory(NewObj, Size);
|
||||||
NewObj->wMagic = Magic;
|
NewObj->wMagic = Magic;
|
||||||
|
#if 0
|
||||||
KeInitializeSpinlock(&NewObj->Lock);
|
KeInitializeSpinlock(&NewObj->Lock);
|
||||||
|
#endif
|
||||||
|
|
||||||
return NewObj;
|
return NewObj;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue