Release 961102
Sat Nov 2 12:50:40 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [files/dos_fs.c]
Added long file name mask in DOSFS_FindNext().
* [loader/pe_image.c] [loader/task.c]
Moved Win32 task startup into TASK_CallToStart().
* [objects/dc.c]
Fixed SetDCState() for memory DC (thanks to Constantine
Sapuntzakis for spotting this one).
* [windows/winpos.c]
Fixed WINPOS_ForceXWindowRaise() to preserve correct Z-order.
* [*/*]
Added Win32 version for many graphics functions.
Thu Oct 31 10:00:18 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [controls/button.c]
BUTTON_CheckAutoRadioButton() unchecks only auto radio buttons.
* [controls/edit.c]
EM_GETSEL result should have HIWORD(result) >= LOWORD(result); old
EDIT_EM_GetSel() renamed to EDIT_GetSel().
* [windows/dialog.c]
DS_LOCALEDIT is a dialog style not an edit style.
* [windows/winproc.c]
Stop stack trashing when wndPtr->text == NULL.
Tue Oct 29 23:35:04 1996 Constantine P Sapuntzakis <csapuntz@mit.edu>
* [windows/dce.c]
GetDCEx32 - The determination of whether to use the DC cache or
not should be independent of DCX_USESTYLE.
Sat Oct 26 17:31:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [files/directory.c]
Added errno.h to #includes
* [tools/makedep.c]
Close files once they have been processed.
diff --git a/objects/gdiobj.c b/objects/gdiobj.c
index 9392bd9..0502c69 100644
--- a/objects/gdiobj.c
+++ b/objects/gdiobj.c
@@ -4,6 +4,7 @@
* Copyright 1993 Alexandre Julliard
*/
+#define NO_TRANSITION_TYPES /* This file is Win32-clean */
#include <stdlib.h>
#include <stdio.h>
#include "gdi.h"
@@ -242,14 +243,23 @@
/***********************************************************************
- * DeleteObject (GDI.69)
+ * DeleteObject16 (GDI.69)
*/
-BOOL DeleteObject( HGDIOBJ16 obj )
+BOOL16 DeleteObject16( HGDIOBJ16 obj )
+{
+ return DeleteObject32( obj );
+}
+
+
+/***********************************************************************
+ * DeleteObject32 (GDI32.70)
+ */
+BOOL32 DeleteObject32( HGDIOBJ32 obj )
{
/* Check if object is valid */
GDIOBJHDR * header = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( obj );
- if (!header) return FALSE;
+ if (!header || HIWORD(obj)) return FALSE;
dprintf_gdi(stddeb, "DeleteObject: %04x\n", obj );
@@ -269,9 +279,18 @@
/***********************************************************************
- * GetStockObject (GDI.87)
+ * GetStockObject16 (GDI.87)
*/
-HGDIOBJ16 GetStockObject( INT16 obj )
+HGDIOBJ16 GetStockObject16( INT16 obj )
+{
+ return (HGDIOBJ16)GetStockObject32( obj );
+}
+
+
+/***********************************************************************
+ * GetStockObject32 (GDI32.220)
+ */
+HGDIOBJ32 GetStockObject32( INT32 obj )
{
if ((obj < 0) || (obj >= NB_STOCK_OBJECTS)) return 0;
if (!StockObjects[obj]) return 0;
@@ -299,9 +318,9 @@
switch(ptr->wMagic)
{
case PEN_MAGIC:
- return PEN_GetObject( (PENOBJ *)ptr, count, buffer );
+ return PEN_GetObject16( (PENOBJ *)ptr, count, buffer );
case BRUSH_MAGIC:
- return BRUSH_GetObject( (BRUSHOBJ *)ptr, count, buffer );
+ return BRUSH_GetObject16( (BRUSHOBJ *)ptr, count, buffer );
case BITMAP_MAGIC:
return BITMAP_GetObject16( (BITMAPOBJ *)ptr, count, buffer );
case FONT_MAGIC:
@@ -330,12 +349,14 @@
switch(ptr->wMagic)
{
+ case PEN_MAGIC:
+ return PEN_GetObject32( (PENOBJ *)ptr, count, buffer );
+ case BRUSH_MAGIC:
+ return BRUSH_GetObject32( (BRUSHOBJ *)ptr, count, buffer );
case BITMAP_MAGIC:
return BITMAP_GetObject32( (BITMAPOBJ *)ptr, count, buffer );
case FONT_MAGIC:
return FONT_GetObject32A( (FONTOBJ *)ptr, count, buffer );
- case PEN_MAGIC:
- case BRUSH_MAGIC:
case PALETTE_MAGIC:
fprintf( stderr, "GetObject32: magic %04x not implemented\n",
ptr->wMagic );
@@ -355,9 +376,18 @@
/***********************************************************************
- * SelectObject (GDI.45)
+ * SelectObject16 (GDI.45)
*/
-HGDIOBJ16 SelectObject( HDC16 hdc, HGDIOBJ16 handle )
+HGDIOBJ16 SelectObject16( HDC16 hdc, HGDIOBJ16 handle )
+{
+ return (HGDIOBJ16)SelectObject32( hdc, handle );
+}
+
+
+/***********************************************************************
+ * SelectObject32 (GDI32.299)
+ */
+HGDIOBJ32 SelectObject32( HDC32 hdc, HGDIOBJ32 handle )
{
GDIOBJHDR * ptr = NULL;
DC * dc;
@@ -387,16 +417,25 @@
case FONT_MAGIC:
return FONT_SelectObject( dc, handle, (FONTOBJ *)ptr );
case REGION_MAGIC:
- return (HGDIOBJ16)SelectClipRgn( hdc, handle );
+ return (HGDIOBJ16)SelectClipRgn16( hdc, handle );
}
return 0;
}
/***********************************************************************
- * UnrealizeObject (GDI.150)
+ * UnrealizeObject16 (GDI.150)
*/
-BOOL UnrealizeObject( HGDIOBJ16 obj )
+BOOL16 UnrealizeObject16( HGDIOBJ16 obj )
+{
+ return UnrealizeObject32( obj );
+}
+
+
+/***********************************************************************
+ * UnrealizeObject (GDI32.358)
+ */
+BOOL32 UnrealizeObject32( HGDIOBJ32 obj )
{
/* Check if object is valid */
@@ -421,10 +460,10 @@
/***********************************************************************
- * EnumObjects (GDI.71)
+ * EnumObjects16 (GDI.71)
*/
-INT EnumObjects( HDC16 hdc, INT nObjType, GOBJENUMPROC16 lpEnumFunc,
- LPARAM lParam )
+INT16 EnumObjects16( HDC16 hdc, INT16 nObjType, GOBJENUMPROC16 lpEnumFunc,
+ LPARAM lParam )
{
/* Solid colors to enumerate */
static const COLORREF solid_colors[] =
@@ -438,11 +477,11 @@
RGB(0x80,0x80,0x80), RGB(0xc0,0xc0,0xc0)
};
- int i, retval = 0;
+ INT16 i, retval = 0;
LOGPEN16 *pen;
LOGBRUSH16 *brush = NULL;
- dprintf_gdi( stddeb, "EnumObjects: %04x %d %08lx %08lx\n",
+ dprintf_gdi( stddeb, "EnumObjects16: %04x %d %08lx %08lx\n",
hdc, nObjType, (DWORD)lpEnumFunc, lParam );
switch(nObjType)
{
@@ -456,7 +495,7 @@
pen->lopnWidth.y = 0;
pen->lopnColor = solid_colors[i];
retval = lpEnumFunc( SEGPTR_GET(pen), lParam );
- dprintf_gdi( stddeb, "EnumObject: solid pen %08lx, ret=%d\n",
+ dprintf_gdi( stddeb, "EnumObjects16: solid pen %08lx, ret=%d\n",
solid_colors[i], retval);
if (!retval) break;
}
@@ -472,7 +511,7 @@
brush->lbColor = solid_colors[i];
brush->lbHatch = 0;
retval = lpEnumFunc( SEGPTR_GET(brush), lParam );
- dprintf_gdi( stddeb, "EnumObject: solid brush %08lx, ret=%d\n",
+ dprintf_gdi( stddeb, "EnumObjects16: solid brush %08lx, ret=%d\n",
solid_colors[i], retval);
if (!retval) break;
}
@@ -484,7 +523,7 @@
brush->lbColor = RGB(0,0,0);
brush->lbHatch = i;
retval = lpEnumFunc( SEGPTR_GET(brush), lParam );
- dprintf_gdi( stddeb, "EnumObject: hatched brush %d, ret=%d\n",
+ dprintf_gdi( stddeb, "EnumObjects16: hatched brush %d, ret=%d\n",
i, retval);
if (!retval) break;
}
@@ -492,7 +531,83 @@
break;
default:
- fprintf( stderr, "EnumObjects: invalid type %d\n", nObjType );
+ fprintf( stderr, "EnumObjects16: invalid type %d\n", nObjType );
+ break;
+ }
+ return retval;
+}
+
+
+/***********************************************************************
+ * EnumObjects32 (GDI32.89)
+ */
+INT32 EnumObjects32( HDC32 hdc, INT32 nObjType, GOBJENUMPROC32 lpEnumFunc,
+ LPARAM lParam )
+{
+ /* Solid colors to enumerate */
+ static const COLORREF solid_colors[] =
+ { RGB(0x00,0x00,0x00), RGB(0xff,0xff,0xff),
+ RGB(0xff,0x00,0x00), RGB(0x00,0xff,0x00),
+ RGB(0x00,0x00,0xff), RGB(0xff,0xff,0x00),
+ RGB(0xff,0x00,0xff), RGB(0x00,0xff,0xff),
+ RGB(0x80,0x00,0x00), RGB(0x00,0x80,0x00),
+ RGB(0x80,0x80,0x00), RGB(0x00,0x00,0x80),
+ RGB(0x80,0x00,0x80), RGB(0x00,0x80,0x80),
+ RGB(0x80,0x80,0x80), RGB(0xc0,0xc0,0xc0)
+ };
+
+ INT32 i, retval = 0;
+ LOGPEN32 pen;
+ LOGBRUSH32 brush;
+
+ dprintf_gdi( stddeb, "EnumObjects32: %04x %d %08lx %08lx\n",
+ hdc, nObjType, (DWORD)lpEnumFunc, lParam );
+ switch(nObjType)
+ {
+ case OBJ_PEN:
+ /* Enumerate solid pens */
+ for (i = 0; i < sizeof(solid_colors)/sizeof(solid_colors[0]); i++)
+ {
+ pen.lopnStyle = PS_SOLID;
+ pen.lopnWidth.x = 1;
+ pen.lopnWidth.y = 0;
+ pen.lopnColor = solid_colors[i];
+ retval = lpEnumFunc( &pen, lParam );
+ dprintf_gdi( stddeb, "EnumObjects32: solid pen %08lx, ret=%d\n",
+ solid_colors[i], retval);
+ if (!retval) break;
+ }
+ break;
+
+ case OBJ_BRUSH:
+ /* Enumerate solid brushes */
+ for (i = 0; i < sizeof(solid_colors)/sizeof(solid_colors[0]); i++)
+ {
+ brush.lbStyle = BS_SOLID;
+ brush.lbColor = solid_colors[i];
+ brush.lbHatch = 0;
+ retval = lpEnumFunc( &brush, lParam );
+ dprintf_gdi( stddeb, "EnumObjects32: solid brush %08lx, ret=%d\n",
+ solid_colors[i], retval);
+ if (!retval) break;
+ }
+
+ /* Now enumerate hatched brushes */
+ if (retval) for (i = HS_HORIZONTAL; i <= HS_DIAGCROSS; i++)
+ {
+ brush.lbStyle = BS_HATCHED;
+ brush.lbColor = RGB(0,0,0);
+ brush.lbHatch = i;
+ retval = lpEnumFunc( &brush, lParam );
+ dprintf_gdi( stddeb, "EnumObjects32: hatched brush %d, ret=%d\n",
+ i, retval);
+ if (!retval) break;
+ }
+ break;
+
+ default:
+ /* FIXME: implement Win32 types */
+ fprintf( stderr, "EnumObjects32: invalid type %d\n", nObjType );
break;
}
return retval;