Release 961013 Sun Oct 13 15:32:32 1996 Alexandre Julliard <julliard@lrc.epfl.ch> * [Make.rules.in] [*/Makefile.in] Made it possible to compile from a directory other than the source directory. * [graphics/metafiledrv/init.c] [include/metafiledrv.h] [objects/metafile.c] [objects/dc.c] New graphics driver for metafiles. * [if1632/thunk.c] Added thunks for SetWindowsHook and SetDCHook. * [windows/dialog.c] Fixed GetNextDlgGroupItem and GetNextDlgTabItem to skip disabled items. * [*/*] Removed non Win32-clean types HANDLE, HBITMAP, HBRUSH, HFONT, HINSTANCE, HMENU, HRGN and HTASK. Wed Oct 9 14:59:45 1996 Frans van Dorsselaer <dorssel@rulhm1.LeidenUniv.nl> * [controls/edit.c] Fixed EditWndProc() to fall back to DefWndProc() when the edit state structure is not available. Wed Oct 2 14:00:34 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk> * [windows/nonclient.c] [windows/mdi.c] AdjustWindowRectEx16() should only take notice of the styles WS_DLGFRAME, WS_BORDER, WS_THICKFRAME and WS_EX_DLGMODALFRAME. Thanks to Alex Korobka. * [controls/scroll.c] Fixed typo in ShowScrollBar32(). Sun Aug 25 20:18:56 1996 Jukka Iivonen <iivonen@cc.helsinki.fi> * [if1632/user32.spec] [if1632/winmm.spec] Added SetParent and sndPlaySoundA.
diff --git a/objects/Makefile.in b/objects/Makefile.in index 0829312..56b3307 100644 --- a/objects/Makefile.in +++ b/objects/Makefile.in
@@ -1,6 +1,9 @@ -DEFS = -D__WINE__ -TOPSRC = @top_srcdir@ -MODULE = objects +DEFS = -D__WINE__ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = .. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +MODULE = objects C_SRCS = \ bitblt.c \
diff --git a/objects/bitmap.c b/objects/bitmap.c index 53237a8..926f176 100644 --- a/objects/bitmap.c +++ b/objects/bitmap.c
@@ -124,7 +124,7 @@ */ HBITMAP16 CreateCompatibleBitmap( HDC32 hdc, INT32 width, INT32 height ) { - HBITMAP hbmpRet = 0; + HBITMAP16 hbmpRet = 0; DC *dc; dprintf_gdi( stddeb, "CreateCompatibleBitmap(%04x,%d,%d) = \n", @@ -421,8 +421,8 @@ HBITMAP16 BITMAP_SelectObject( DC * dc, HBITMAP16 hbitmap, BITMAPOBJ * bmp ) { - HRGN hrgn; - HBITMAP prevHandle = dc->w.hBitmap; + HRGN32 hrgn; + HBITMAP16 prevHandle = dc->w.hBitmap; if (!(dc->w.flags & DC_MEMORY)) return 0;
diff --git a/objects/brush.c b/objects/brush.c index 27c847f..3816170 100644 --- a/objects/brush.c +++ b/objects/brush.c
@@ -141,10 +141,10 @@ /*********************************************************************** * CreateBrushIndirect (GDI.50) */ -HBRUSH CreateBrushIndirect( const LOGBRUSH16 * brush ) +HBRUSH16 CreateBrushIndirect( const LOGBRUSH16 * brush ) { BRUSHOBJ * brushPtr; - HBRUSH hbrush = GDI_AllocObject( sizeof(BRUSHOBJ), BRUSH_MAGIC ); + HBRUSH16 hbrush = GDI_AllocObject( sizeof(BRUSHOBJ), BRUSH_MAGIC ); if (!hbrush) return 0; brushPtr = (BRUSHOBJ *) GDI_HEAP_LIN_ADDR( hbrush ); memcpy( &brushPtr->logbrush, brush, sizeof(*brush) ); @@ -155,7 +155,7 @@ /*********************************************************************** * CreateHatchBrush (GDI.58) */ -HBRUSH CreateHatchBrush( INT style, COLORREF color ) +HBRUSH16 CreateHatchBrush( INT style, COLORREF color ) { LOGBRUSH16 logbrush = { BS_HATCHED, color, style }; dprintf_gdi(stddeb, "CreateHatchBrush: %d %06lx\n", style, color ); @@ -167,7 +167,7 @@ /*********************************************************************** * CreatePatternBrush (GDI.60) */ -HBRUSH CreatePatternBrush( HBITMAP hbitmap ) +HBRUSH16 CreatePatternBrush( HBITMAP16 hbitmap ) { LOGBRUSH16 logbrush = { BS_PATTERN, 0, 0 }; BITMAPOBJ *bmp, *newbmp; @@ -179,7 +179,7 @@ if (!(bmp = (BITMAPOBJ *) GDI_GetObjPtr( hbitmap, BITMAP_MAGIC ))) return 0; logbrush.lbHatch = (INT16)CreateBitmapIndirect16( &bmp->bitmap ); - newbmp = (BITMAPOBJ *) GDI_GetObjPtr( (HANDLE)logbrush.lbHatch, BITMAP_MAGIC ); + newbmp = (BITMAPOBJ *) GDI_GetObjPtr( (HGDIOBJ16)logbrush.lbHatch, BITMAP_MAGIC ); if (!newbmp) return 0; XCopyArea( display, bmp->pixmap, newbmp->pixmap, BITMAP_GC(bmp), 0, 0, bmp->bitmap.bmWidth, bmp->bitmap.bmHeight, 0, 0 ); @@ -190,7 +190,7 @@ /*********************************************************************** * CreateDIBPatternBrush (GDI.445) */ -HBRUSH CreateDIBPatternBrush( HGLOBAL16 hbitmap, UINT coloruse ) +HBRUSH16 CreateDIBPatternBrush( HGLOBAL16 hbitmap, UINT coloruse ) { LOGBRUSH16 logbrush = { BS_DIBPATTERN, coloruse, 0 }; BITMAPINFO *info, *newInfo; @@ -214,9 +214,9 @@ GlobalUnlock16( hbitmap ); return 0; } - newInfo = (BITMAPINFO *) GlobalLock16( (HANDLE)logbrush.lbHatch ); + newInfo = (BITMAPINFO *) GlobalLock16( (HGLOBAL16)logbrush.lbHatch ); memcpy( newInfo, info, size ); - GlobalUnlock16( (HANDLE)logbrush.lbHatch ); + GlobalUnlock16( (HGLOBAL16)logbrush.lbHatch ); GlobalUnlock16( hbitmap ); return CreateBrushIndirect( &logbrush ); } @@ -225,7 +225,7 @@ /*********************************************************************** * CreateSolidBrush (GDI.66) */ -HBRUSH CreateSolidBrush( COLORREF color ) +HBRUSH16 CreateSolidBrush( COLORREF color ) { LOGBRUSH16 logbrush = { BS_SOLID, color, 0 }; dprintf_gdi(stddeb, "CreateSolidBrush: %06lx\n", color ); @@ -270,7 +270,7 @@ /*********************************************************************** * GetSysColorBrush (USER.281) */ -HBRUSH GetSysColorBrush(WORD x) +HBRUSH16 GetSysColorBrush(WORD x) { fprintf( stderr, "Unimplemented stub: GetSysColorBrush(%d)\n", x ); return GetStockObject(LTGRAY_BRUSH); @@ -280,15 +280,15 @@ /*********************************************************************** * BRUSH_DeleteObject */ -BOOL BRUSH_DeleteObject( HBRUSH hbrush, BRUSHOBJ * brush ) +BOOL32 BRUSH_DeleteObject( HBRUSH16 hbrush, BRUSHOBJ * brush ) { switch(brush->logbrush.lbStyle) { case BS_PATTERN: - DeleteObject( (HANDLE)brush->logbrush.lbHatch ); + DeleteObject( (HGDIOBJ16)brush->logbrush.lbHatch ); break; case BS_DIBPATTERN: - GlobalFree16( (HANDLE)brush->logbrush.lbHatch ); + GlobalFree16( (HGLOBAL16)brush->logbrush.lbHatch ); break; } return GDI_FreeObject( hbrush ); @@ -330,7 +330,7 @@ /*********************************************************************** * BRUSH_SelectPatternBrush */ -static BOOL BRUSH_SelectPatternBrush( DC * dc, HBITMAP hbitmap ) +static BOOL BRUSH_SelectPatternBrush( DC * dc, HBITMAP16 hbitmap ) { BITMAPOBJ * bmp = (BITMAPOBJ *) GDI_GetObjPtr( hbitmap, BITMAP_MAGIC ); if (!bmp) return FALSE; @@ -357,11 +357,11 @@ /*********************************************************************** * BRUSH_SelectObject */ -HBRUSH BRUSH_SelectObject( DC * dc, HBRUSH hbrush, BRUSHOBJ * brush ) +HBRUSH16 BRUSH_SelectObject( DC * dc, HBRUSH16 hbrush, BRUSHOBJ * brush ) { - HBITMAP hBitmap; + HBITMAP16 hBitmap; BITMAPINFO * bmpInfo; - HBRUSH prevHandle = dc->w.hBrush; + HBRUSH16 prevHandle = dc->w.hBrush; dprintf_gdi(stddeb, "Brush_SelectObject: hdc=%04x hbrush=%04x\n", dc->hSelf,hbrush); @@ -373,16 +373,16 @@ case BS_HATCHED: case BS_HOLLOW: if (!MF_CreateBrushIndirect(dc, hbrush, &(brush->logbrush))) - return (HBRUSH)0; + return (HBRUSH16)0; break; case BS_PATTERN: case BS_DIBPATTERN: if (!MF_CreatePatternBrush(dc, hbrush, &(brush->logbrush))) - return (HBRUSH)0; + return (HBRUSH16)0; break; } - return (HBRUSH)1; + return (HBRUSH16)1; } dc->w.hBrush = hbrush; @@ -415,12 +415,12 @@ case BS_PATTERN: dprintf_gdi( stddeb, "BS_PATTERN\n"); - BRUSH_SelectPatternBrush( dc, (HBRUSH)brush->logbrush.lbHatch ); + BRUSH_SelectPatternBrush( dc, (HBRUSH16)brush->logbrush.lbHatch ); break; case BS_DIBPATTERN: dprintf_gdi( stddeb, "BS_DIBPATTERN\n"); - if ((bmpInfo = (BITMAPINFO *) GlobalLock16( (HANDLE)brush->logbrush.lbHatch ))) + if ((bmpInfo = (BITMAPINFO *) GlobalLock16( (HGLOBAL16)brush->logbrush.lbHatch ))) { int size = DIB_BitmapInfoSize( bmpInfo, brush->logbrush.lbColor ); hBitmap = CreateDIBitmap( dc->hSelf, &bmpInfo->bmiHeader, CBM_INIT, @@ -428,7 +428,7 @@ (WORD) brush->logbrush.lbColor ); BRUSH_SelectPatternBrush( dc, hBitmap ); DeleteObject( hBitmap ); - GlobalUnlock16( (HANDLE)brush->logbrush.lbHatch ); + GlobalUnlock16( (HGLOBAL16)brush->logbrush.lbHatch ); } break;
diff --git a/objects/clipping.c b/objects/clipping.c index 29a5cb4..eae9dbc 100644 --- a/objects/clipping.c +++ b/objects/clipping.c
@@ -12,7 +12,11 @@ /* #define DEBUG_CLIPPING */ #include "debug.h" -#define UpdateDirtyDC(dc) DC_CallHookProc( dc, DCHC_INVALIDVISRGN, 0 ) +#define UPDATE_DIRTY_DC(dc) \ + do { \ + if ((dc)->hookProc && !((dc)->w.flags & (DC_SAVED | DC_MEMORY))) \ + (dc)->hookProc( (dc)->hSelf, DCHC_INVALIDVISRGN, (dc)->dwHookData, 0 ); \ + } while(0) /*********************************************************************** * CLIPPING_SetDeviceClipping @@ -56,7 +60,7 @@ if (dc->w.flags & DC_DIRTY) { - UpdateDirtyDC(dc); + UPDATE_DIRTY_DC(dc); dc->w.flags &= ~DC_DIRTY; } @@ -71,7 +75,7 @@ /*********************************************************************** * SelectClipRgn (GDI.44) */ -int SelectClipRgn( HDC hdc, HRGN hrgn ) +int SelectClipRgn( HDC hdc, HRGN32 hrgn ) { int retval; DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); @@ -99,7 +103,7 @@ /*********************************************************************** * SelectVisRgn (GDI.105) */ -int SelectVisRgn( HDC hdc, HRGN hrgn ) +int SelectVisRgn( HDC hdc, HRGN32 hrgn ) { int retval; DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); @@ -166,7 +170,7 @@ int CLIPPING_IntersectClipRect( DC * dc, short left, short top, short right, short bottom, UINT16 flags) { - HRGN newRgn; + HRGN32 newRgn; int ret; if ( !(newRgn = CreateRectRgn( left, top, right, bottom )) ) return ERROR; @@ -253,7 +257,7 @@ static int CLIPPING_IntersectVisRect( DC * dc, short left, short top, short right, short bottom, BOOL exclude ) { - HRGN tempRgn, newRgn; + HRGN32 tempRgn, newRgn; int ret; left = XLPTODP( dc, left ); @@ -325,7 +329,7 @@ dprintf_clipping(stddeb, "PtVisible: %04x %d,%d\n", hdc, x, y ); if (!dc->w.hGCClipRgn) return FALSE; - if( dc->w.flags & DC_DIRTY ) UpdateDirtyDC(dc); + if( dc->w.flags & DC_DIRTY ) UPDATE_DIRTY_DC(dc); dc->w.flags &= ~DC_DIRTY; return PtInRegion( dc->w.hGCClipRgn, XLPTODP(dc,x), YLPTODP(dc,y) ); @@ -392,9 +396,9 @@ /*********************************************************************** * SaveVisRgn (GDI.129) */ -HRGN SaveVisRgn( HDC hdc ) +HRGN32 SaveVisRgn( HDC hdc ) { - HRGN copy; + HRGN32 copy; RGNOBJ *obj, *copyObj; DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); if (!dc) return 0; @@ -404,7 +408,7 @@ fprintf( stderr, "SaveVisRgn: hVisRgn is zero. Please report this.\n" ); exit(1); } - if( dc->w.flags & DC_DIRTY ) UpdateDirtyDC(dc); + if( dc->w.flags & DC_DIRTY ) UPDATE_DIRTY_DC(dc); dc->w.flags &= ~DC_DIRTY; if (!(obj = (RGNOBJ *) GDI_GetObjPtr( dc->w.hVisRgn, REGION_MAGIC ))) @@ -424,7 +428,7 @@ */ int RestoreVisRgn( HDC hdc ) { - HRGN saved; + HRGN32 saved; RGNOBJ *obj, *savedObj; DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); if (!dc || !dc->w.hVisRgn) return ERROR;
diff --git a/objects/cursoricon.c b/objects/cursoricon.c index 180e1ae..064d02b 100644 --- a/objects/cursoricon.c +++ b/objects/cursoricon.c
@@ -232,10 +232,10 @@ * * Create a cursor or icon from a resource. */ -HANDLE CURSORICON_LoadHandler( HANDLE handle, HINSTANCE hInstance, - BOOL fCursor ) +HGLOBAL16 CURSORICON_LoadHandler( HGLOBAL16 handle, HINSTANCE16 hInstance, + BOOL fCursor ) { - HANDLE hAndBits, hXorBits; + HBITMAP16 hAndBits, hXorBits; HDC32 hdc; int size, sizeAnd, sizeXor; POINT16 hotspot = { 0 ,0 }; @@ -367,10 +367,11 @@ * * Load a cursor or icon. */ -static HANDLE CURSORICON_Load( HANDLE hInstance, SEGPTR name, int width, - int height, int colors, BOOL fCursor ) +static HGLOBAL16 CURSORICON_Load( HINSTANCE16 hInstance, SEGPTR name, + int width, int height, int colors, + BOOL fCursor ) { - HANDLE handle,hRet; + HGLOBAL16 handle, hRet; HRSRC16 hRsrc; CURSORICONDIRENTRY dirEntry; @@ -408,11 +409,11 @@ * * Make a copy of a cursor or icon. */ -static HANDLE CURSORICON_Copy( HANDLE hInstance, HANDLE handle ) +static HGLOBAL16 CURSORICON_Copy( HINSTANCE16 hInstance, HGLOBAL16 handle ) { char *ptrOld, *ptrNew; int size; - HANDLE hNew; + HGLOBAL16 hNew; if (!(ptrOld = (char *)GlobalLock16( handle ))) return 0; if (!(hInstance = GetExePtr( hInstance ))) return 0; @@ -446,9 +447,7 @@ else { /* kludge */ - - HTASK hTask = GetCurrentTask(); - TDB* pTask = (TDB *)GlobalLock16(hTask); + TDB* pTask = (TDB *)GlobalLock16( GetCurrentTask() ); if(!pTask) return 0; @@ -499,7 +498,7 @@ /*********************************************************************** * CreateCursor (USER.406) */ -HCURSOR16 CreateCursor( HINSTANCE hInstance, INT xHotSpot, INT yHotSpot, +HCURSOR16 CreateCursor( HINSTANCE16 hInstance, INT xHotSpot, INT yHotSpot, INT nWidth, INT nHeight, const BYTE *lpANDbits, const BYTE *lpXORbits ) { @@ -514,7 +513,7 @@ /*********************************************************************** * CreateIcon (USER.407) */ -HICON16 CreateIcon( HINSTANCE hInstance, INT nWidth, INT nHeight, BYTE bPlanes, +HICON16 CreateIcon( HINSTANCE16 hInstance, INT nWidth, INT nHeight, BYTE bPlanes, BYTE bBitsPixel, const BYTE* lpANDbits, const BYTE* lpXORbits) { CURSORICONINFO info = { { 0, 0 }, nWidth, nHeight, 0, bPlanes, bBitsPixel }; @@ -528,10 +527,12 @@ /*********************************************************************** * CreateCursorIconIndirect (USER.408) */ -HANDLE CreateCursorIconIndirect( HANDLE hInstance, CURSORICONINFO *info, - const BYTE *lpANDbits, const BYTE *lpXORbits ) +HGLOBAL16 CreateCursorIconIndirect( HINSTANCE16 hInstance, + CURSORICONINFO *info, + const BYTE *lpANDbits, + const BYTE *lpXORbits ) { - HANDLE handle; + HGLOBAL16 handle; char *ptr; int sizeAnd, sizeXor; @@ -611,7 +612,7 @@ { CURSORICONINFO *ptr; HDC hMemDC; - HBITMAP hXorBits, hAndBits; + HBITMAP16 hXorBits, hAndBits; COLORREF oldFg, oldBg; if (!(ptr = (CURSORICONINFO *)GlobalLock16( hIcon ))) return FALSE; @@ -625,7 +626,7 @@ if (hXorBits && hAndBits) { - HBITMAP hBitTemp = SelectObject( hMemDC, hAndBits ); + HBITMAP16 hBitTemp = SelectObject( hMemDC, hAndBits ); BitBlt( hdc, x, y, ptr->nWidth, ptr->nHeight, hMemDC, 0, 0, SRCAND ); SelectObject( hMemDC, hXorBits ); BitBlt( hdc, x, y, ptr->nWidth, ptr->nHeight, hMemDC, 0, 0, SRCINVERT); @@ -934,7 +935,7 @@ /********************************************************************** * GetIconID (USER.455) */ -WORD GetIconID( HANDLE hResource, DWORD resType ) +WORD GetIconID( HGLOBAL16 hResource, DWORD resType ) { CURSORICONDIR *lpDir = (CURSORICONDIR *)GlobalLock16(hResource); /* LockResource16(hResource); */ @@ -973,7 +974,7 @@ /********************************************************************** * LoadIconHandler (USER.456) */ -HICON16 LoadIconHandler( HANDLE hResource, BOOL bNew ) +HICON16 LoadIconHandler( HGLOBAL16 hResource, BOOL bNew ) { dprintf_cursor(stddeb,"LoadIconHandler: hRes=%04x\n",hResource);
diff --git a/objects/dc.c b/objects/dc.c index 76d925a..f777779 100644 --- a/objects/dc.c +++ b/objects/dc.c
@@ -14,20 +14,15 @@ #include "color.h" #include "debug.h" #include "font.h" -#include "callback.h" #include "xmalloc.h" extern void CLIPPING_UpdateGCRegion( DC * dc ); /* objects/clipping.c */ -extern BOOL DCHook( HDC, WORD, DWORD, DWORD ); /* windows/dce.c */ /* Default DC values */ static const WIN_DC_INFO DC_defaultValues = { 0, /* flags */ NULL, /* devCaps */ - 0, /* hMetaFile */ - 0, /* hHT */ - 0, /* HTLen */ 0, /* hClipRgn */ 0, /* hVisRgn */ 0, /* hGCClipRgn */ @@ -146,6 +141,41 @@ /*********************************************************************** + * DC_AllocDC + */ +DC *DC_AllocDC( const DC_FUNCTIONS *funcs ) +{ + HDC16 hdc; + DC *dc; + + if (!(hdc = GDI_AllocObject( sizeof(DC), DC_MAGIC ))) return NULL; + dc = (DC *) GDI_HEAP_LIN_ADDR( hdc ); + + dc->hSelf = hdc; + dc->funcs = funcs; + dc->physDev = NULL; + dc->saveLevel = 0; + dc->dwHookData = 0L; + dc->hookProc = NULL; + + memcpy( &dc->w, &DC_defaultValues, sizeof(DC_defaultValues) ); + return dc; +} + + +/*********************************************************************** + * DC_GetDCPtr + */ +DC *DC_GetDCPtr( HDC32 hdc ) +{ + GDIOBJHDR *ptr = (GDIOBJHDR *)GDI_HEAP_LIN_ADDR( hdc ); + if ((ptr->wMagic == DC_MAGIC) || (ptr->wMagic == METAFILE_DC_MAGIC)) + return (DC *)ptr; + return NULL; +} + + +/*********************************************************************** * DC_InitDC * * Setup device-specific DC values for a newly created DC. @@ -169,7 +199,7 @@ * If fMapColors is TRUE, X pixels are mapped to Windows colors. * Return FALSE if brush is BS_NULL, TRUE otherwise. */ -BOOL DC_SetupGCForPatBlt( DC * dc, GC gc, BOOL fMapColors ) +BOOL32 DC_SetupGCForPatBlt( DC * dc, GC gc, BOOL32 fMapColors ) { XGCValues val; unsigned long mask; @@ -251,7 +281,7 @@ * Setup dc->u.x.gc for drawing operations using current brush. * Return FALSE if brush is BS_NULL, TRUE otherwise. */ -BOOL DC_SetupGCForBrush( DC * dc ) +BOOL32 DC_SetupGCForBrush( DC * dc ) { return DC_SetupGCForPatBlt( dc, dc->u.x.gc, FALSE ); } @@ -263,7 +293,7 @@ * Setup dc->u.x.gc for drawing operations using current pen. * Return FALSE if pen is PS_NULL, TRUE otherwise. */ -BOOL DC_SetupGCForPen( DC * dc ) +BOOL32 DC_SetupGCForPen( DC * dc ) { XGCValues val; @@ -309,7 +339,7 @@ * Setup dc->u.x.gc for text drawing operations. * Return FALSE if the font is null, TRUE otherwise. */ -BOOL DC_SetupGCForText( DC * dc ) +BOOL32 DC_SetupGCForText( DC * dc ) { XGCValues val; @@ -334,32 +364,12 @@ /*********************************************************************** - * DC_CallHookProc - */ -BOOL DC_CallHookProc(DC* dc, WORD code, LPARAM lParam) -{ - BOOL bRet = FALSE; - FARPROC16 ptr = GDI_GetDefDCHook(); - - dprintf_dc(stddeb,"CallDCHook: code %04x\n", code); - - /* if 16-bit callback is, in fact, a thunk to DCHook simply call DCHook */ - - if( dc->hookProc && !(dc->w.flags & (DC_SAVED | DC_MEMORY)) ) - bRet = (dc->hookProc == ptr) ? - DCHook(dc->hSelf, code, dc->dwHookData, lParam): - CallDCHookProc(dc->hookProc, dc->hSelf, code, dc->dwHookData, lParam); - - return bRet; -} - -/*********************************************************************** * GetDCState (GDI.179) */ HDC GetDCState( HDC hdc ) { DC * newdc, * dc; - HANDLE handle; + HGDIOBJ16 handle; if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return 0; if (!(handle = GDI_AllocObject( sizeof(DC), DC_MAGIC ))) return 0; @@ -393,9 +403,9 @@ void SetDCState( HDC hdc, HDC hdcs ) { DC * dc, * dcs; - HRGN hVisRgn, hClipRgn, hGCClipRgn; - HFONT hfont; - HBRUSH hbrush; + HRGN32 hVisRgn, hClipRgn, hGCClipRgn; + HFONT16 hfont; + HBRUSH16 hbrush; if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return; if (!(dcs = (DC *) GDI_GetObjPtr( hdcs, DC_MAGIC ))) return; @@ -489,39 +499,25 @@ HDC CreateDC( LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODE* initData ) { DC * dc; - HDC16 handle; const DC_FUNCTIONS *funcs; if (!(funcs = DRIVER_FindDriver( driver ))) return 0; - - handle = GDI_AllocObject( sizeof(DC), DC_MAGIC ); - if (!handle) return 0; - dc = (DC *) GDI_HEAP_LIN_ADDR( handle ); + if (!(dc = DC_AllocDC( funcs ))) return 0; + dc->w.flags = 0; dprintf_dc(stddeb, "CreateDC(%s %s %s): returning %04x\n", - driver, device, output, handle ); - - dc->hSelf = handle; - dc->funcs = funcs; - dc->physDev = NULL; - dc->saveLevel = 0; - dc->dwHookData = 0L; - dc->hookProc = (SEGPTR)0; - - memcpy( &dc->w, &DC_defaultValues, sizeof(DC_defaultValues) ); - dc->w.flags = 0; + driver, device, output, dc->hSelf ); if (dc->funcs->pCreateDC && !dc->funcs->pCreateDC( dc, driver, device, output, initData )) { dprintf_dc( stddeb, "CreateDC: creation aborted by device\n" ); - GDI_HEAP_FREE( handle ); + GDI_HEAP_FREE( dc->hSelf ); return 0; } DC_InitDC( dc ); - - return handle; + return dc->hSelf; } @@ -541,35 +537,24 @@ HDC CreateCompatibleDC( HDC hdc ) { DC *dc, *origDC; - HDC16 handle; - HBITMAP hbitmap; + HBITMAP16 hbitmap; const DC_FUNCTIONS *funcs; if ((origDC = (DC *)GDI_GetObjPtr( hdc, DC_MAGIC ))) funcs = origDC->funcs; else funcs = DRIVER_FindDriver( "DISPLAY" ); if (!funcs) return 0; - handle = GDI_AllocObject( sizeof(DC), DC_MAGIC ); - if (!handle) return 0; - dc = (DC *) GDI_HEAP_LIN_ADDR( handle ); + if (!(dc = DC_AllocDC( funcs ))) return 0; - dprintf_dc(stddeb, "CreateCompatibleDC(%04x): returning %04x\n", hdc, handle ); + dprintf_dc(stddeb, "CreateCompatibleDC(%04x): returning %04x\n", + hdc, dc->hSelf ); /* Create default bitmap */ if (!(hbitmap = CreateBitmap( 1, 1, 1, 1, NULL ))) { - GDI_HEAP_FREE( handle ); + GDI_HEAP_FREE( dc->hSelf ); return 0; } - - memcpy( &dc->w, &DC_defaultValues, sizeof(DC_defaultValues) ); - - dc->hSelf = handle; - dc->funcs = funcs; - dc->physDev = NULL; - dc->saveLevel = 0; - dc->dwHookData = 0L; - dc->hookProc = (SEGPTR)0; dc->w.flags = DC_MEMORY; dc->w.bitsPerPixel = 1; dc->w.hBitmap = hbitmap; @@ -580,13 +565,12 @@ { dprintf_dc( stddeb, "CreateDC: creation aborted by device\n" ); DeleteObject( hbitmap ); - GDI_HEAP_FREE( handle ); + GDI_HEAP_FREE( dc->hSelf ); return 0; } DC_InitDC( dc ); - - return handle; + return dc->hSelf; } @@ -751,12 +735,12 @@ /*********************************************************************** * SetDCHook (GDI.190) */ -BOOL SetDCHook( HDC hDC, FARPROC16 hookProc, DWORD dwHookData ) +BOOL16 SetDCHook( HDC16 hdc, FARPROC16 hookProc, DWORD dwHookData ) { - DC *dc = (DC *)GDI_GetObjPtr( hDC, DC_MAGIC ); + DC *dc = (DC *)GDI_GetObjPtr( hdc, DC_MAGIC ); dprintf_dc( stddeb, "SetDCHook: hookProc %08x, default is %08x\n", - (unsigned)hookProc,(unsigned)GDI_GetDefDCHook() ); + (UINT32)hookProc, (UINT32)DCHook ); if (!dc) return FALSE; dc->hookProc = hookProc; @@ -768,9 +752,9 @@ /*********************************************************************** * GetDCHook (GDI.191) */ -DWORD GetDCHook( HDC hDC, FARPROC16 *phookProc ) +DWORD GetDCHook( HDC16 hdc, FARPROC16 *phookProc ) { - DC *dc = (DC *)GDI_GetObjPtr( hDC, DC_MAGIC ); + DC *dc = (DC *)GDI_GetObjPtr( hdc, DC_MAGIC ); if (!dc) return 0; *phookProc = dc->hookProc; return dc->dwHookData;
diff --git a/objects/dcvalues.c b/objects/dcvalues.c index c330f41..9ce69c5 100644 --- a/objects/dcvalues.c +++ b/objects/dcvalues.c
@@ -84,11 +84,11 @@ DC_GET_X_Y( DWORD, GetViewportOrg, VportOrgX, VportOrgY ) /* GDI.95 */ DC_GET_X_Y( DWORD, GetWindowExt, WndExtX, WndExtY ) /* GDI.96 */ DC_GET_X_Y( DWORD, GetWindowOrg, WndOrgX, WndOrgY ) /* GDI.97 */ -DC_GET_VAL( HRGN, InquireVisRgn, hVisRgn ) /* GDI.131 */ +DC_GET_VAL( HRGN32, InquireVisRgn, hVisRgn ) /* GDI.131 */ DC_GET_X_Y( DWORD, GetBrushOrg, brushOrgX, brushOrgY ) /* GDI.149 */ -DC_GET_VAL( HRGN, GetClipRgn, hClipRgn ) /* GDI.173 */ +DC_GET_VAL( HRGN32, GetClipRgn, hClipRgn ) /* GDI.173 */ DC_GET_VAL( WORD, GetTextAlign, textAlign ) /* GDI.345 */ -DC_GET_VAL( HFONT, GetCurLogFont, hFont ) /* GDI.411 */ +DC_GET_VAL( HFONT16, GetCurLogFont, hFont ) /* GDI.411 */ DC_GET_VAL_EX( GetBrushOrgEx, brushOrgX, brushOrgY ) /* GDI.469 */ DC_GET_VAL_EX( GetCurrentPositionEx, CursPosX, CursPosY ) /* GDI.470 */ DC_GET_VAL_EX( GetViewportExtEx, VportExtX, VportExtY ) /* GDI.472 */
diff --git a/objects/dib.c b/objects/dib.c index 8d2907d..4f8dd6c 100644 --- a/objects/dib.c +++ b/objects/dib.c
@@ -626,7 +626,7 @@ WORD xSrc, WORD ySrc, WORD wSrcWidth, WORD wSrcHeight, LPSTR bits, LPBITMAPINFO info, WORD wUsage, DWORD dwRop ) { - HBITMAP hBitmap, hOldBitmap; + HBITMAP16 hBitmap, hOldBitmap; HDC hdcMem; hBitmap = CreateDIBitmap( hdc, &info->bmiHeader, CBM_INIT, @@ -724,7 +724,7 @@ /*********************************************************************** * GetDIBits (GDI.441) */ -int GetDIBits( HDC hdc, HBITMAP hbitmap, WORD startscan, WORD lines, +int GetDIBits( HDC hdc, HBITMAP16 hbitmap, WORD startscan, WORD lines, LPSTR bits, BITMAPINFO * info, WORD coloruse ) { DC * dc; @@ -792,10 +792,10 @@ /*********************************************************************** * CreateDIBitmap (GDI.442) */ -HBITMAP CreateDIBitmap( HDC hdc, BITMAPINFOHEADER * header, DWORD init, - LPVOID bits, BITMAPINFO * data, UINT coloruse ) +HBITMAP16 CreateDIBitmap( HDC hdc, BITMAPINFOHEADER * header, DWORD init, + LPVOID bits, BITMAPINFO * data, UINT coloruse ) { - HBITMAP handle; + HBITMAP16 handle; BOOL fColor; DWORD width, height; WORD bpp;
diff --git a/objects/font.c b/objects/font.c index a632754..aca3874 100644 --- a/objects/font.c +++ b/objects/font.c
@@ -529,7 +529,7 @@ static X_PHYSFONT stockFonts[LAST_STOCK_FONT-FIRST_STOCK_FONT+1]; static struct { - HFONT id; + HFONT16 id; LOGFONT16 logfont; int access; int used; @@ -537,7 +537,7 @@ int i; X_PHYSFONT * stockPtr; - HFONT prevHandle = dc->w.hFont; + HFONT16 prevHandle = dc->w.hFont; XFontStruct * fontStruct; dprintf_font(stddeb,"FONT_SelectObject(%p, %04x, %p)\n", dc, hfont, font); @@ -545,7 +545,7 @@ /* Load font if necessary */ if (!font) { - HFONT hnewfont; + HFONT16 hnewfont; hnewfont = CreateFont16(10, 7, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET, 0, 0, @@ -1155,10 +1155,10 @@ */ INT EnumFonts(HDC hDC, LPCSTR lpFaceName, FONTENUMPROC16 lpEnumFunc, LPARAM lpData) { - HANDLE hLog; - HANDLE hMet; - HFONT hFont; - HFONT hOldFont; + HLOCAL16 hLog; + HLOCAL16 hMet; + HFONT16 hFont; + HFONT16 hOldFont; LPLOGFONT16 lpLogFont; LPTEXTMETRIC16 lptm; LPSTR lpOldName; @@ -1225,10 +1225,10 @@ */ INT EnumFontFamilies(HDC hDC, LPCSTR lpszFamily, FONTENUMPROC16 lpEnumFunc, LPARAM lpData) { - HANDLE hLog; - HANDLE hMet; - HFONT hFont; - HFONT hOldFont; + HLOCAL16 hLog; + HLOCAL16 hMet; + HFONT16 hFont; + HFONT16 hOldFont; LPENUMLOGFONT16 lpEnumLogFont; LPTEXTMETRIC16 lptm; LPSTR lpOldName;
diff --git a/objects/gdiobj.c b/objects/gdiobj.c index f196635..3aae235 100644 --- a/objects/gdiobj.c +++ b/objects/gdiobj.c
@@ -12,7 +12,6 @@ #include "brush.h" #include "font.h" #include "heap.h" -#include "module.h" #include "palette.h" #include "pen.h" #include "region.h" @@ -148,8 +147,6 @@ (GDIOBJHDR *) &SystemFixedFont }; -static FARPROC16 defDCHookCallback; - /*********************************************************************** * GDI_Init @@ -165,13 +162,6 @@ if (!X11DRV_Init()) return FALSE; - /* Get default hook */ - - defDCHookCallback = (FARPROC16)MODULE_GetEntryPoint(GetModuleHandle("USER"), - 362 /* DCHook */ ); - dprintf_gdi( stddeb, "DCHook: 16-bit callback is %08x\n", - (unsigned)defDCHookCallback ); - /* Create default palette */ if (!(hpalette = COLOR_Init())) return FALSE; @@ -194,22 +184,13 @@ /*********************************************************************** - * GDI_GetDefDCHook - */ -FARPROC16 GDI_GetDefDCHook(void) -{ - return defDCHookCallback; -} - - -/*********************************************************************** * GDI_AllocObject */ -HANDLE16 GDI_AllocObject( WORD size, WORD magic ) +HGDIOBJ16 GDI_AllocObject( WORD size, WORD magic ) { static DWORD count = 0; GDIOBJHDR * obj; - HANDLE handle = GDI_HEAP_ALLOC( size ); + HGDIOBJ16 handle = GDI_HEAP_ALLOC( size ); if (!handle) return 0; obj = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle ); obj->hNext = 0; @@ -222,7 +203,7 @@ /*********************************************************************** * GDI_FreeObject */ -BOOL32 GDI_FreeObject( HANDLE16 handle ) +BOOL32 GDI_FreeObject( HGDIOBJ16 handle ) { GDIOBJHDR * object; @@ -246,7 +227,7 @@ * Return a pointer to the GDI object associated to the handle. * Return NULL if the object has the wrong magic number. */ -GDIOBJHDR * GDI_GetObjPtr( HANDLE16 handle, WORD magic ) +GDIOBJHDR * GDI_GetObjPtr( HGDIOBJ16 handle, WORD magic ) { GDIOBJHDR * ptr = NULL; @@ -290,13 +271,13 @@ /*********************************************************************** * GetStockObject (GDI.87) */ -HANDLE GetStockObject( int obj ) +HGDIOBJ16 GetStockObject( INT16 obj ) { if ((obj < 0) || (obj >= NB_STOCK_OBJECTS)) return 0; if (!StockObjects[obj]) return 0; dprintf_gdi(stddeb, "GetStockObject: returning %d\n", FIRST_STOCK_HANDLE + obj ); - return (HANDLE)(FIRST_STOCK_HANDLE + obj); + return (HGDIOBJ16)(FIRST_STOCK_HANDLE + obj); } @@ -376,7 +357,7 @@ /*********************************************************************** * SelectObject (GDI.45) */ -HANDLE SelectObject( HDC hdc, HANDLE handle ) +HGDIOBJ16 SelectObject( HDC hdc, HGDIOBJ16 handle ) { GDIOBJHDR * ptr = NULL; DC * dc; @@ -406,7 +387,7 @@ case FONT_MAGIC: return FONT_SelectObject( dc, handle, (FONTOBJ *)ptr ); case REGION_MAGIC: - return (HANDLE)SelectClipRgn( hdc, handle ); + return (HGDIOBJ16)SelectClipRgn( hdc, handle ); } return 0; } @@ -415,7 +396,7 @@ /*********************************************************************** * UnrealizeObject (GDI.150) */ -BOOL UnrealizeObject( HANDLE obj ) +BOOL UnrealizeObject( HGDIOBJ16 obj ) { /* Check if object is valid */ @@ -521,7 +502,7 @@ /*********************************************************************** * IsGDIObject (GDI.462) */ -BOOL IsGDIObject(HANDLE handle) +BOOL16 IsGDIObject( HGDIOBJ16 handle ) { GDIOBJHDR *object = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle ); if (object)
diff --git a/objects/metafile.c b/objects/metafile.c index 3d38d3a..1b1760f 100644 --- a/objects/metafile.c +++ b/objects/metafile.c
@@ -11,11 +11,48 @@ #include "gdi.h" #include "bitmap.h" #include "file.h" +#include "heap.h" #include "metafile.h" +#include "metafiledrv.h" #include "stddebug.h" #include "debug.h" -#define HTINCR 10 /* handle table allocation size increment */ +/****************************************************************** + * MF_AddHandle + * + * Add a handle to an external handle table and return the index + */ + +static int MF_AddHandle(HANDLETABLE16 *ht, WORD htlen, HGDIOBJ16 hobj) +{ + int i; + + for (i = 0; i < htlen; i++) + { + if (*(ht->objectHandle + i) == 0) + { + *(ht->objectHandle + i) = hobj; + return i; + } + } + return -1; +} + + +/****************************************************************** + * MF_AddHandleDC + * + * Note: this function assumes that we never delete objects. + * If we do someday, we'll need to maintain a table to re-use deleted + * handles. + */ +static int MF_AddHandleDC( DC *dc ) +{ + METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dc->physDev; + physDev->mh->mtNoObjects++; + return physDev->nextHandle++; +} + /****************************************************************** * GetMetafile GDI.124 By Kenny MacDonald 30 Nov 94 @@ -79,68 +116,6 @@ } -/****************************************************************** - * CreateMetafile GDI.125 - */ - -HANDLE CreateMetaFile(LPCSTR lpFilename) -{ - DC *dc; - HANDLE handle; - METAHEADER *mh; - HFILE hFile; - - dprintf_metafile(stddeb,"CreateMetaFile: %s\n", lpFilename); - - handle = GDI_AllocObject(sizeof(DC), METAFILE_DC_MAGIC); - - if (!handle) - return 0; - - dc = (DC *)GDI_HEAP_LIN_ADDR(handle); - - if (!(dc->w.hMetaFile = GlobalAlloc16(GMEM_MOVEABLE, sizeof(METAHEADER)))) { - GDI_FreeObject(handle); - return 0; - } - if (!(dc->w.hHT = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT, - sizeof(HANDLETABLE16) * HTINCR))) { - GlobalFree16(dc->w.hMetaFile); - GDI_FreeObject(handle); - return 0; - } - dc->w.HTLen = HTINCR; - dc->w.bitsPerPixel = screenDepth; - mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile); - - mh->mtHeaderSize = MFHEADERSIZE / 2; - mh->mtVersion = MFVERSION; - mh->mtSize = MFHEADERSIZE / 2; - mh->mtNoObjects = 0; - mh->mtMaxRecord = 0; - mh->mtNoParameters = 0; - - if (lpFilename) /* disk based metafile */ - { - mh->mtType = 1; /* disk */ - hFile = _lcreat(lpFilename, 0); - if (_lwrite32(hFile, (char *)mh, MFHEADERSIZE) == -1) - { - GlobalFree16(dc->w.hHT); - GlobalFree16(dc->w.hMetaFile); - GDI_FreeObject(handle); - return 0; - } - mh->mtNoParameters = hFile; /* store file descriptor here */ - /* windows probably uses this too*/ - } - else /* memory based metafile */ - mh->mtType = 0; - - GlobalUnlock16(dc->w.hMetaFile); - dprintf_metafile(stddeb,"CreateMetaFile: returning %04x\n", handle); - return handle; -} /****************************************************************** * CopyMetafile GDI.151 Niels de Carpentier, April 1996 @@ -204,6 +179,7 @@ } +#if 0 /****************************************************************** * CloseMetafile GDI.126 */ @@ -214,15 +190,14 @@ METAHEADER *mh; HMETAFILE16 hmf; HFILE hFile; + METAFILEDRV_PDEVICE *physDev; dprintf_metafile(stddeb,"CloseMetaFile\n"); - dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC); - - if (!dc) - return 0; - - mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile); + if (!(dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC))) return 0; + + physDev = (METAFILEDRV_PDEVICE *)dc->physDev; + mh = (METAHEADER *)GlobalLock16( physDev->hMetafile ); /* Construct the end of metafile record - this is documented * in SDK Knowledgebase Q99334. @@ -230,9 +205,7 @@ if (!MF_MetaParam0(dc, META_EOF)) { - GlobalFree16(dc->w.hHT); - GlobalFree16(dc->w.hMetaFile); - GDI_FreeObject(hdc); + DeleteDC( hdc ); return 0; } @@ -242,25 +215,21 @@ mh->mtNoParameters = 0; if (_llseek(hFile, 0L, 0) == -1) { - GlobalFree16(dc->w.hHT); - GlobalFree16(dc->w.hMetaFile); - GDI_FreeObject(hdc); + DeleteDC( hdc ); return 0; } if (_lwrite32(hFile, (char *)mh, MFHEADERSIZE) == -1) { - GlobalFree16(dc->w.hHT); - GlobalFree16(dc->w.hMetaFile); - GDI_FreeObject(hdc); + DeleteDC( hdc ); return 0; } _lclose(hFile); } - GlobalFree16(dc->w.hHT); - hmf = dc->w.hMetaFile; - GlobalUnlock16(hmf); - GDI_FreeObject(hdc); + hmf = physDev->hMetafile; + GlobalUnlock16( hmf ); + physDev->hMetafile = 0; /* So it won't be deleted */ + DeleteDC( hdc ); return hmf; } @@ -279,7 +248,7 @@ GlobalFree16(hmf); return TRUE; } - +#endif /****************************************************************** * PlayMetafile GDI.123 @@ -418,7 +387,7 @@ WORD nHandles) { short s1; - HANDLE hndl; + HANDLE16 hndl; char *ptr; BITMAPINFOHEADER *infohdr; @@ -774,7 +743,7 @@ * Trade in a meta file object handle for a handle to the meta file memory */ -HANDLE GetMetaFileBits(HMETAFILE16 hmf) +HGLOBAL16 GetMetaFileBits(HMETAFILE16 hmf) { dprintf_metafile(stddeb,"GetMetaFileBits: hMem out: %04x\n", hmf); @@ -787,7 +756,7 @@ * Trade in a meta file memory handle for a handle to a meta file object */ -HMETAFILE16 SetMetaFileBits(HANDLE hMem) +HMETAFILE16 SetMetaFileBits( HGLOBAL16 hMem ) { dprintf_metafile(stddeb,"SetMetaFileBits: hmf out: %04x\n", hMem); @@ -796,88 +765,38 @@ /****************************************************************** * MF_WriteRecord + * + * Warning: this function can change the metafile handle. */ -HMETAFILE16 MF_WriteRecord(HMETAFILE16 hmf, METARECORD *mr, WORD rlen) +static BOOL32 MF_WriteRecord( DC *dc, METARECORD *mr, WORD rlen) { DWORD len; - METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf); - - if (mh->mtType == 0) /* memory based metafile */ + METAHEADER *mh; + METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dc->physDev; + + switch(physDev->mh->mtType) { - len = mh->mtSize * 2 + rlen; - GlobalUnlock16(hmf); - hmf = GlobalReAlloc16(hmf, len, GMEM_MOVEABLE); /* hmf can change */ - mh = (METAHEADER *)GlobalLock16(hmf); - memcpy((WORD *)mh + mh->mtSize, mr, rlen); - } - else if (mh->mtType == 1) /* disk based metafile */ - { - dprintf_metafile(stddeb,"Writing record to disk\n"); - if (_lwrite32(mh->mtNoParameters, (char *)mr, rlen) == -1) - { - GlobalUnlock16(hmf); - return 0; - } - } - else - { - GlobalUnlock16(hmf); - return 0; + case METAFILE_MEMORY: + len = physDev->mh->mtSize * 2 + rlen; + mh = HeapReAlloc( SystemHeap, 0, physDev->mh, len ); + if (!mh) return FALSE; + physDev->mh = mh; + memcpy((WORD *)physDev->mh + physDev->mh->mtSize, mr, rlen); + break; + case METAFILE_DISK: + dprintf_metafile(stddeb,"Writing record to disk\n"); + if (_lwrite32(physDev->mh->mtNoParameters, (char *)mr, rlen) == -1) + return FALSE; + break; + default: + fprintf( stderr, "Uknown metafile type %d\n", physDev->mh->mtType ); + return FALSE; } - mh->mtSize += rlen / 2; - mh->mtMaxRecord = MAX(mh->mtMaxRecord, rlen / 2); - GlobalUnlock16(hmf); - return hmf; -} - - -/****************************************************************** - * MF_AddHandle - * - * Add a handle to an external handle table and return the index - */ - -int MF_AddHandle(HANDLETABLE16 *ht, WORD htlen, HANDLE hobj) -{ - int i; - - for (i = 0; i < htlen; i++) - { - if (*(ht->objectHandle + i) == 0) - { - *(ht->objectHandle + i) = hobj; - return i; - } - } - return -1; -} - - -/****************************************************************** - * MF_AddHandleDC - * - * Add a handle to the handle table in the DC, growing table if - * necessary. Return the index - */ - -int MF_AddHandleDC(DC *dc, HANDLE hobj) -{ - int i; - HANDLETABLE16 *ht = (HANDLETABLE16 *)GlobalLock16(dc->w.hHT); - - if((i = MF_AddHandle(ht, dc->w.HTLen, hobj)) == -1) { - GlobalUnlock16(dc->w.hHT); - if(!(dc->w.hHT = GlobalReAlloc16(dc->w.hHT, (dc->w.HTLen + HTINCR) * - sizeof(HANDLETABLE16), GMEM_MOVEABLE | GMEM_ZEROINIT))) - return -1; - dc->w.HTLen += HTINCR; - ht = (HANDLETABLE16 *)GlobalLock16(dc->w.hHT); - i = MF_AddHandle(ht, dc->w.HTLen, hobj); - } - GlobalUnlock16(dc->w.hHT); - return i; + physDev->mh->mtSize += rlen / 2; + physDev->mh->mtMaxRecord = MAX(physDev->mh->mtMaxRecord, rlen / 2); + return TRUE; } @@ -885,57 +804,45 @@ * MF_MetaParam0 */ -BOOL MF_MetaParam0(DC *dc, short func) +BOOL32 MF_MetaParam0(DC *dc, short func) { char buffer[8]; METARECORD *mr = (METARECORD *)&buffer; - HMETAFILE16 handle; mr->rdSize = 3; mr->rdFunction = func; - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } /****************************************************************** * MF_MetaParam1 */ -BOOL MF_MetaParam1(DC *dc, short func, short param1) +BOOL32 MF_MetaParam1(DC *dc, short func, short param1) { char buffer[8]; METARECORD *mr = (METARECORD *)&buffer; - HMETAFILE16 handle; mr->rdSize = 4; mr->rdFunction = func; *(mr->rdParam) = param1; - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } /****************************************************************** * MF_MetaParam2 */ -BOOL MF_MetaParam2(DC *dc, short func, short param1, short param2) +BOOL32 MF_MetaParam2(DC *dc, short func, short param1, short param2) { char buffer[10]; METARECORD *mr = (METARECORD *)&buffer; - HMETAFILE16 handle; mr->rdSize = 5; mr->rdFunction = func; *(mr->rdParam) = param2; *(mr->rdParam + 1) = param1; - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } @@ -943,12 +850,11 @@ * MF_MetaParam4 */ -BOOL MF_MetaParam4(DC *dc, short func, short param1, short param2, +BOOL32 MF_MetaParam4(DC *dc, short func, short param1, short param2, short param3, short param4) { char buffer[14]; METARECORD *mr = (METARECORD *)&buffer; - HMETAFILE16 handle; mr->rdSize = 7; mr->rdFunction = func; @@ -956,10 +862,7 @@ *(mr->rdParam + 1) = param3; *(mr->rdParam + 2) = param2; *(mr->rdParam + 3) = param1; - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } @@ -967,12 +870,11 @@ * MF_MetaParam6 */ -BOOL MF_MetaParam6(DC *dc, short func, short param1, short param2, +BOOL32 MF_MetaParam6(DC *dc, short func, short param1, short param2, short param3, short param4, short param5, short param6) { char buffer[18]; METARECORD *mr = (METARECORD *)&buffer; - HMETAFILE16 handle; mr->rdSize = 9; mr->rdFunction = func; @@ -982,23 +884,19 @@ *(mr->rdParam + 3) = param3; *(mr->rdParam + 4) = param2; *(mr->rdParam + 5) = param1; - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } /****************************************************************** * MF_MetaParam8 */ -BOOL MF_MetaParam8(DC *dc, short func, short param1, short param2, +BOOL32 MF_MetaParam8(DC *dc, short func, short param1, short param2, short param3, short param4, short param5, short param6, short param7, short param8) { char buffer[22]; METARECORD *mr = (METARECORD *)&buffer; - HMETAFILE16 handle; mr->rdSize = 11; mr->rdFunction = func; @@ -1010,10 +908,7 @@ *(mr->rdParam + 5) = param3; *(mr->rdParam + 6) = param2; *(mr->rdParam + 7) = param1; - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } @@ -1021,37 +916,23 @@ * MF_CreateBrushIndirect */ -BOOL MF_CreateBrushIndirect(DC *dc, HBRUSH hBrush, LOGBRUSH16 *logbrush) +BOOL32 MF_CreateBrushIndirect(DC *dc, HBRUSH16 hBrush, LOGBRUSH16 *logbrush) { int index; - HMETAFILE16 handle; char buffer[sizeof(METARECORD) - 2 + sizeof(LOGBRUSH16)]; METARECORD *mr = (METARECORD *)&buffer; - METAHEADER *mh; mr->rdSize = (sizeof(METARECORD) + sizeof(LOGBRUSH16) - 2) / 2; mr->rdFunction = META_CREATEBRUSHINDIRECT; memcpy(&(mr->rdParam), logbrush, sizeof(LOGBRUSH16)); - if (!(dc->w.hMetaFile = MF_WriteRecord(dc->w.hMetaFile, - mr, mr->rdSize * 2))) - return FALSE; + if (!(MF_WriteRecord( dc, mr, mr->rdSize * 2))) return FALSE; mr->rdSize = sizeof(METARECORD) / 2; mr->rdFunction = META_SELECTOBJECT; - if ((index = MF_AddHandleDC(dc, hBrush)) == -1) - return FALSE; - - mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile); + if ((index = MF_AddHandleDC( dc )) == -1) return FALSE; *(mr->rdParam) = index; - if (index >= mh->mtNoObjects) - mh->mtNoObjects++; - - GlobalUnlock16(dc->w.hMetaFile); - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } @@ -1059,23 +940,21 @@ * MF_CreatePatternBrush */ -BOOL MF_CreatePatternBrush(DC *dc, HBRUSH hBrush, LOGBRUSH16 *logbrush) +BOOL32 MF_CreatePatternBrush(DC *dc, HBRUSH16 hBrush, LOGBRUSH16 *logbrush) { DWORD len, bmSize, biSize; - HANDLE hmr; + HGLOBAL16 hmr; METARECORD *mr; BITMAPOBJ *bmp; BITMAPINFO *info; BITMAPINFOHEADER *infohdr; int index; - HMETAFILE16 handle; char buffer[sizeof(METARECORD)]; - METAHEADER *mh; switch (logbrush->lbStyle) { case BS_PATTERN: - bmp = (BITMAPOBJ *)GDI_GetObjPtr((HANDLE)logbrush->lbHatch, BITMAP_MAGIC); + bmp = (BITMAPOBJ *)GDI_GetObjPtr((HGDIOBJ16)logbrush->lbHatch, BITMAP_MAGIC); if (!bmp) return FALSE; len = sizeof(METARECORD) + sizeof(BITMAPINFOHEADER) + (bmp->bitmap.bmHeight * bmp->bitmap.bmWidthBytes) + 6; @@ -1099,7 +978,7 @@ break; case BS_DIBPATTERN: - info = (BITMAPINFO *)GlobalLock16((HANDLE)logbrush->lbHatch); + info = (BITMAPINFO *)GlobalLock16((HGLOBAL16)logbrush->lbHatch); if (info->bmiHeader.biCompression) bmSize = info->bmiHeader.biSizeImage; else @@ -1120,7 +999,7 @@ default: return FALSE; } - if (!(dc->w.hMetaFile = MF_WriteRecord(dc->w.hMetaFile, mr, len))) + if (!(MF_WriteRecord(dc, mr, len))) { GlobalFree16(hmr); return FALSE; @@ -1131,18 +1010,10 @@ mr = (METARECORD *)&buffer; mr->rdSize = sizeof(METARECORD) / 2; mr->rdFunction = META_SELECTOBJECT; - if ((index = MF_AddHandleDC(dc, hBrush)) == -1) - return FALSE; - mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile); + if ((index = MF_AddHandleDC( dc )) == -1) return FALSE; *(mr->rdParam) = index; - if (index >= mh->mtNoObjects) - mh->mtNoObjects++; - GlobalUnlock16(dc->w.hMetaFile); - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } @@ -1150,36 +1021,23 @@ * MF_CreatePenIndirect */ -BOOL MF_CreatePenIndirect(DC *dc, HPEN16 hPen, LOGPEN16 *logpen) +BOOL32 MF_CreatePenIndirect(DC *dc, HPEN16 hPen, LOGPEN16 *logpen) { int index; - HMETAFILE16 handle; char buffer[sizeof(METARECORD) - 2 + sizeof(LOGPEN16)]; METARECORD *mr = (METARECORD *)&buffer; - METAHEADER *mh; mr->rdSize = (sizeof(METARECORD) + sizeof(LOGPEN16) - 2) / 2; mr->rdFunction = META_CREATEPENINDIRECT; memcpy(&(mr->rdParam), logpen, sizeof(LOGPEN16)); - if (!(dc->w.hMetaFile = MF_WriteRecord(dc->w.hMetaFile, mr, - mr->rdSize * 2))) - return FALSE; + if (!(MF_WriteRecord( dc, mr, mr->rdSize * 2))) return FALSE; mr->rdSize = sizeof(METARECORD) / 2; mr->rdFunction = META_SELECTOBJECT; - if ((index = MF_AddHandleDC(dc, hPen)) == -1) - return FALSE; - - mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile); + if ((index = MF_AddHandleDC( dc )) == -1) return FALSE; *(mr->rdParam) = index; - if (index >= mh->mtNoObjects) - mh->mtNoObjects++; - GlobalUnlock16(dc->w.hMetaFile); - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } @@ -1187,47 +1045,34 @@ * MF_CreateFontIndirect */ -BOOL MF_CreateFontIndirect(DC *dc, HFONT hFont, LOGFONT16 *logfont) +BOOL32 MF_CreateFontIndirect(DC *dc, HFONT16 hFont, LOGFONT16 *logfont) { int index; - HMETAFILE16 handle; char buffer[sizeof(METARECORD) - 2 + sizeof(LOGFONT16)]; METARECORD *mr = (METARECORD *)&buffer; - METAHEADER *mh; mr->rdSize = (sizeof(METARECORD) + sizeof(LOGFONT16) - 2) / 2; mr->rdFunction = META_CREATEFONTINDIRECT; memcpy(&(mr->rdParam), logfont, sizeof(LOGFONT16)); - if (!(dc->w.hMetaFile = MF_WriteRecord(dc->w.hMetaFile, mr, - mr->rdSize * 2))) - return FALSE; + if (!(MF_WriteRecord( dc, mr, mr->rdSize * 2))) return FALSE; mr->rdSize = sizeof(METARECORD) / 2; mr->rdFunction = META_SELECTOBJECT; - if ((index = MF_AddHandleDC(dc, hFont)) == -1) - return FALSE; - - mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile); + if ((index = MF_AddHandleDC( dc )) == -1) return FALSE; *(mr->rdParam) = index; - if (index >= mh->mtNoObjects) - mh->mtNoObjects++; - GlobalUnlock16(dc->w.hMetaFile); - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; - - return handle; + return MF_WriteRecord( dc, mr, mr->rdSize * 2); } /****************************************************************** * MF_TextOut */ -BOOL MF_TextOut(DC *dc, short x, short y, LPCSTR str, short count) +BOOL32 MF_TextOut(DC *dc, short x, short y, LPCSTR str, short count) { - HMETAFILE16 handle; + BOOL32 ret; DWORD len; - HANDLE hmr; + HGLOBAL16 hmr; METARECORD *mr; len = sizeof(METARECORD) + (((count + 1) >> 1) * 2) + 4; @@ -1242,21 +1087,20 @@ memcpy(mr->rdParam + 1, str, count); *(mr->rdParam + ((count + 1) >> 1) + 1) = y; *(mr->rdParam + ((count + 1) >> 1) + 2) = x; - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; + ret = MF_WriteRecord( dc, mr, mr->rdSize * 2); GlobalFree16(hmr); - return handle; + return ret; } /****************************************************************** * MF_ExtTextOut */ -BOOL MF_ExtTextOut(DC *dc, short x, short y, UINT16 flags, const RECT16 *rect, - LPCSTR str, short count, const INT16 *lpDx) +BOOL32 MF_ExtTextOut(DC*dc, short x, short y, UINT16 flags, const RECT16 *rect, + LPCSTR str, short count, const INT16 *lpDx) { - HMETAFILE16 handle; + BOOL32 ret; DWORD len; - HANDLE hmr; + HGLOBAL16 hmr; METARECORD *mr; len = sizeof(METARECORD) + (((count + 1) >> 1) * 2) + 2 * sizeof(short) @@ -1278,20 +1122,19 @@ memcpy(mr->rdParam + 8, str, count); if (lpDx) memcpy(mr->rdParam + 8+ ((count + 1) >> 1),lpDx,count*sizeof(INT16)); - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; + ret = MF_WriteRecord( dc, mr, mr->rdSize * 2); GlobalFree16(hmr); - return handle; + return ret; } /****************************************************************** * MF_MetaPoly - implements Polygon and Polyline */ -BOOL MF_MetaPoly(DC *dc, short func, LPPOINT16 pt, short count) +BOOL32 MF_MetaPoly(DC *dc, short func, LPPOINT16 pt, short count) { - HMETAFILE16 handle; + BOOL32 ret; DWORD len; - HANDLE hmr; + HGLOBAL16 hmr; METARECORD *mr; len = sizeof(METARECORD) + (count * 4); @@ -1304,22 +1147,21 @@ mr->rdFunction = func; *(mr->rdParam) = count; memcpy(mr->rdParam + 1, pt, count * 4); - handle = MF_WriteRecord(dc->w.hMetaFile, mr, mr->rdSize * 2); - dc->w.hMetaFile = handle; + ret = MF_WriteRecord( dc, mr, mr->rdSize * 2); GlobalFree16(hmr); - return handle; + return ret; } /****************************************************************** * MF_BitBlt */ -BOOL MF_BitBlt(DC *dcDest, short xDest, short yDest, short width, - short height, HDC hdcSrc, short xSrc, short ySrc, DWORD rop) +BOOL32 MF_BitBlt(DC *dcDest, short xDest, short yDest, short width, + short height, HDC16 hdcSrc, short xSrc, short ySrc, DWORD rop) { - HMETAFILE16 handle; + BOOL32 ret; DWORD len; - HANDLE hmr; + HGLOBAL16 hmr; METARECORD *mr; DC *dcSrc; BITMAP16 BM; @@ -1347,13 +1189,12 @@ *(mr->rdParam + 4) = width; *(mr->rdParam + 5) = yDest; *(mr->rdParam + 6) = xDest; - handle = MF_WriteRecord(dcDest->w.hMetaFile, mr, mr->rdSize * 2); + ret = MF_WriteRecord( dcDest, mr, mr->rdSize * 2); } else - handle = 0; - dcDest->w.hMetaFile = handle; + ret = FALSE; GlobalFree16(hmr); - return handle; + return ret; } @@ -1365,13 +1206,13 @@ */ #define STRETCH_VIA_DIB #undef STRETCH_VIA_DIB -BOOL MF_StretchBlt(DC *dcDest, short xDest, short yDest, short widthDest, - short heightDest, HDC hdcSrc, short xSrc, short ySrc, - short widthSrc, short heightSrc, DWORD rop) +BOOL32 MF_StretchBlt(DC *dcDest, short xDest, short yDest, short widthDest, + short heightDest, HDC16 hdcSrc, short xSrc, short ySrc, + short widthSrc, short heightSrc, DWORD rop) { - HMETAFILE16 handle; + BOOL32 ret; DWORD len; - HANDLE hmr; + HGLOBAL16 hmr; METARECORD *mr; DC *dcSrc; BITMAP16 BM; @@ -1434,13 +1275,12 @@ *(mr->rdParam + 7) = widthDest; *(mr->rdParam + 8) = yDest; *(mr->rdParam + 9) = xDest; - handle = MF_WriteRecord(dcDest->w.hMetaFile, mr, mr->rdSize * 2); + ret = MF_WriteRecord( dcDest, mr, mr->rdSize * 2); } else - handle = 0; - dcDest->w.hMetaFile = handle; + ret = FALSE; GlobalFree16(hmr); - return handle; + return ret; }
diff --git a/objects/text.c b/objects/text.c index 3d7eb81..acf51de 100644 --- a/objects/text.c +++ b/objects/text.c
@@ -325,7 +325,7 @@ const RECT16 *lprect, LPCSTR str, UINT16 count, const INT16 *lpDx ) { - HRGN hRgnClip = 0; + HRGN32 hRgnClip = 0; int dir, ascent, descent, i; XCharStruct info; XFontStruct *font; @@ -638,7 +638,7 @@ /*********************************************************************** * GrayString (USER.185) */ -BOOL GrayString(HDC hdc, HBRUSH hbr, GRAYSTRINGPROC16 gsprc, LPARAM lParam, +BOOL GrayString(HDC hdc, HBRUSH16 hbr, GRAYSTRINGPROC16 gsprc, LPARAM lParam, INT cch, INT x, INT y, INT cx, INT cy) { BOOL ret;