Moved EnumObjects16, LineDDA16 and associated glue code to gdi16.c.
diff --git a/dlls/gdi/gdi16.c b/dlls/gdi/gdi16.c
index 2997d38..510437c 100644
--- a/dlls/gdi/gdi16.c
+++ b/dlls/gdi/gdi16.c
@@ -30,6 +30,60 @@
#define HGDIOBJ_32(handle16) ((HGDIOBJ)(ULONG_PTR)(handle16))
#define HGDIOBJ_16(handle32) ((HGDIOBJ16)(ULONG_PTR)(handle32))
+/* ### start build ### */
+extern WORD CALLBACK GDI_CallTo16_word_ll(FARPROC16,LONG,LONG);
+extern WORD CALLBACK GDI_CallTo16_word_wwl(FARPROC16,WORD,WORD,LONG);
+/* ### stop build ### */
+
+struct callback16_info
+{
+ FARPROC16 proc;
+ LPARAM param;
+};
+
+/* callback for LineDDA16 */
+static void CALLBACK linedda_callback( INT x, INT y, LPARAM param )
+{
+ const struct callback16_info *info = (struct callback16_info *)param;
+ GDI_CallTo16_word_wwl( info->proc, x, y, info->param );
+}
+
+/* callback for EnumObjects16 */
+static INT CALLBACK enum_pens_callback( void *ptr, LPARAM param )
+{
+ const struct callback16_info *info = (struct callback16_info *)param;
+ LOGPEN *pen = ptr;
+ LOGPEN16 pen16;
+ SEGPTR segptr;
+ INT ret;
+
+ pen16.lopnStyle = pen->lopnStyle;
+ pen16.lopnWidth.x = pen->lopnWidth.x;
+ pen16.lopnWidth.y = pen->lopnWidth.y;
+ pen16.lopnColor = pen->lopnColor;
+ segptr = MapLS( &pen16 );
+ ret = GDI_CallTo16_word_ll( info->proc, segptr, info->param );
+ UnMapLS( segptr );
+ return ret;
+}
+
+/* callback for EnumObjects16 */
+static INT CALLBACK enum_brushes_callback( void *ptr, LPARAM param )
+{
+ const struct callback16_info *info = (struct callback16_info *)param;
+ LOGBRUSH *brush = ptr;
+ LOGBRUSH16 brush16;
+ SEGPTR segptr;
+ INT ret;
+
+ brush16.lbStyle = brush->lbStyle;
+ brush16.lbColor = brush->lbColor;
+ brush16.lbHatch = brush->lbHatch;
+ segptr = MapLS( &brush16 );
+ ret = GDI_CallTo16_word_ll( info->proc, segptr, info->param );
+ UnMapLS( segptr );
+ return ret;
+}
/* convert a LOGFONT16 to a LOGFONTW */
static void logfont_16_to_W( const LOGFONT16 *font16, LPLOGFONTW font32 )
@@ -941,6 +995,26 @@
/***********************************************************************
+ * EnumObjects (GDI.71)
+ */
+INT16 WINAPI EnumObjects16( HDC16 hdc, INT16 obj, GOBJENUMPROC16 proc, LPARAM lParam )
+{
+ struct callback16_info info;
+
+ info.proc = (FARPROC16)proc;
+ info.param = lParam;
+ switch(obj)
+ {
+ case OBJ_PEN:
+ return EnumObjects( HDC_32(hdc), OBJ_PEN, enum_pens_callback, (LPARAM)&info );
+ case OBJ_BRUSH:
+ return EnumObjects( HDC_32(hdc), OBJ_BRUSH, enum_brushes_callback, (LPARAM)&info );
+ }
+ return 0;
+}
+
+
+/***********************************************************************
* EqualRgn (GDI.72)
*/
BOOL16 WINAPI EqualRgn16( HRGN16 rgn1, HRGN16 rgn2 )
@@ -1207,6 +1281,21 @@
}
+
+
+/**********************************************************************
+ * LineDDA (GDI.100)
+ */
+void WINAPI LineDDA16( INT16 nXStart, INT16 nYStart, INT16 nXEnd,
+ INT16 nYEnd, LINEDDAPROC16 proc, LPARAM lParam )
+{
+ struct callback16_info info;
+ info.proc = (FARPROC16)proc;
+ info.param = lParam;
+ LineDDA( nXStart, nYStart, nXEnd, nYEnd, linedda_callback, (LPARAM)&info );
+}
+
+
/***********************************************************************
* OffsetRgn (GDI.101)
*/
diff --git a/objects/gdiobj.c b/objects/gdiobj.c
index caac258..d25f773 100644
--- a/objects/gdiobj.c
+++ b/objects/gdiobj.c
@@ -28,7 +28,6 @@
#include "wingdi.h"
#include "winreg.h"
#include "winerror.h"
-#include "wine/winbase16.h"
#include "bitmap.h"
#include "font.h"
@@ -39,9 +38,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(gdi);
-/* ### start build ### */
-extern WORD CALLBACK GDI_CallTo16_word_ll(GOBJENUMPROC16,LONG,LONG);
-/* ### stop build ### */
/***********************************************************************
* GDI stock objects
@@ -1116,70 +1112,6 @@
RGB(0x80,0x80,0x80), RGB(0xc0,0xc0,0xc0)
};
-/***********************************************************************
- * EnumObjects (GDI.71)
- */
-INT16 WINAPI EnumObjects16( HDC16 hdc, INT16 nObjType,
- GOBJENUMPROC16 lpEnumFunc, LPARAM lParam )
-{
- INT16 i, retval = 0;
- LOGPEN16 pen;
- LOGBRUSH16 brush;
- SEGPTR segptr;
-
- TRACE("%04x %d %08lx %08lx\n",
- hdc, nObjType, (DWORD)lpEnumFunc, lParam );
- switch(nObjType)
- {
- case OBJ_PEN:
- /* Enumerate solid pens */
- segptr = MapLS( &pen );
- 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 = GDI_CallTo16_word_ll( lpEnumFunc, segptr, lParam );
- TRACE("solid pen %08lx, ret=%d\n", solid_colors[i], retval);
- if (!retval) break;
- }
- UnMapLS( segptr );
- break;
-
- case OBJ_BRUSH:
- /* Enumerate solid brushes */
- segptr = MapLS( &brush );
- 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 = GDI_CallTo16_word_ll( lpEnumFunc, segptr, lParam );
- TRACE("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 = GDI_CallTo16_word_ll( lpEnumFunc, segptr, lParam );
- TRACE("hatched brush %d, ret=%d\n", i, retval);
- if (!retval) break;
- }
- UnMapLS( segptr );
- break;
-
- default:
- WARN("(%d): Invalid type\n", nObjType );
- break;
- }
- return retval;
-}
-
/***********************************************************************
* EnumObjects (GDI32.@)
diff --git a/objects/linedda.c b/objects/linedda.c
index aae98bf..f4bd666 100644
--- a/objects/linedda.c
+++ b/objects/linedda.c
@@ -21,24 +21,6 @@
#include <stdlib.h>
#include "windef.h"
#include "wingdi.h"
-#include "wine/wingdi16.h"
-
-/* ### start build ### */
-extern WORD CALLBACK DDA_CallTo16_word_wwl(LINEDDAPROC16,WORD,WORD,LONG);
-/* ### stop build ### */
-
-struct linedda16_info
-{
- LINEDDAPROC16 proc;
- LPARAM param;
-};
-
-
-static void CALLBACK DDA_callback( INT x, INT y, LPARAM param )
-{
- const struct linedda16_info *info = (struct linedda16_info *)param;
- DDA_CallTo16_word_wwl( info->proc, x, y, info->param );
-}
/**********************************************************************
* LineDDA (GDI32.@)
@@ -85,16 +67,3 @@
}
return TRUE;
}
-
-
-/**********************************************************************
- * LineDDA (GDI.100)
- */
-void WINAPI LineDDA16( INT16 nXStart, INT16 nYStart, INT16 nXEnd,
- INT16 nYEnd, LINEDDAPROC16 proc, LPARAM lParam )
-{
- struct linedda16_info info;
- info.proc = proc;
- info.param = lParam;
- LineDDA( nXStart, nYStart, nXEnd, nYEnd, DDA_callback, (LPARAM)&info );
-}