PATCH: OleFont

Marcus Meissner marcus at jet.franken.de
Mon Jun 23 17:10:54 CDT 2003


Hi,

Tested against Primary Word, some Visual Basic program.
Testcase run against native oleaut32.dll.

New file is dlls/oleaut32/tests/olefont.c, attached.

Ciao, Marcus

Changelog:
	OleCreateFontIndirect(NULL,...) uses the OLE StdFont.
	Added testcase for OleCreateFontIndirect(NULL).
	Added VT_NULL -> VT_BOOL variant converter.

Index: dlls/oleaut32/olefont.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/olefont.c,v
retrieving revision 1.21
diff -u -r1.21 olefont.c
--- dlls/oleaut32/olefont.c	23 Jan 2003 01:23:59 -0000	1.21
+++ dlls/oleaut32/olefont.c	23 Jun 2003 22:07:37 -0000
@@ -306,8 +306,22 @@
 
   *ppvObj = 0;
 
-  if (lpFontDesc == 0)
-    return NO_ERROR; /* MSDN Oct 2001 */
+  if (!lpFontDesc) {
+    FONTDESC fd;
+
+    WCHAR fname[] = { 'S','y','s','t','e','m',0 };
+
+    fd.cbSizeofstruct = sizeof(fd);
+    fd.lpstrName      = fname;
+    fd.cySize.s.Lo    = 80000;
+    fd.cySize.s.Hi    = 0;
+    fd.sWeight 	      = 0;
+    fd.sCharset       = 0;
+    fd.fItalic	      = 0;
+    fd.fUnderline     = 0;
+    fd.fStrikethrough = 0;
+    lpFontDesc = &fd;
+  }
 
   /*
    * Try to construct a new instance of the class.
@@ -1964,20 +1978,7 @@
 static HRESULT WINAPI SFCF_CreateInstance(
 	LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj
 ) {
-	FONTDESC fd;
-
-	WCHAR fname[] = { 'S','y','s','t','e','m',0 };
-
-	fd.cbSizeofstruct = sizeof(fd);
-	fd.lpstrName      = fname;
-	fd.cySize.s.Lo    = 80000;
-	fd.cySize.s.Hi    = 0;
-	fd.sWeight 	      = 0;
-	fd.sCharset       = 0;
-	fd.fItalic	      = 0;
-	fd.fUnderline     = 0;
-	fd.fStrikethrough = 0;
-	return OleCreateFontIndirect(&fd,riid,ppobj);
+	return OleCreateFontIndirect(NULL,riid,ppobj);
 
 }
 
Index: dlls/oleaut32/variant.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/variant.c,v
retrieving revision 1.64
diff -u -r1.64 variant.c
--- dlls/oleaut32/variant.c	18 Jun 2003 03:30:40 -0000	1.64
+++ dlls/oleaut32/variant.c	23 Jun 2003 22:07:49 -0000
@@ -1539,6 +1539,7 @@
 	case( VT_BOOL ):
 		switch( vtFrom )
 		{
+		case( VT_NULL ):
 		case( VT_EMPTY ):
 		    	res = S_OK;
 			V_UNION(pd,boolVal) = VARIANT_FALSE;
Index: dlls/oleaut32/tests/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/tests/Makefile.in,v
retrieving revision 1.3
diff -u -r1.3 Makefile.in
--- dlls/oleaut32/tests/Makefile.in	2 Jan 2003 23:13:56 -0000	1.3
+++ dlls/oleaut32/tests/Makefile.in	23 Jun 2003 22:07:49 -0000
@@ -7,6 +7,7 @@
 EXTRALIBS = $(LIBUUID)
 
 CTESTS = \
+	olefont.c \
 	safearray.c \
 	vartest.c
 
-------------- next part --------------
/*
 * OLEFONT test program
 *
 * Copyright 2003 Marcus Meissner
 *
 */


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <time.h>

#include <wine/test.h>
#include <winbase.h>
#include <winuser.h>
#include <wingdi.h>
#include <winnls.h>
#include <winerror.h>
#include <winnt.h>

#include <wtypes.h>
#include <olectl.h>


START_TEST(olefont)
{
	LPVOID pvObj = NULL;
	HRESULT hres;
	IFont*	font = NULL;

	hres = OleCreateFontIndirect(NULL, &IID_IFont, &font);
	
	ok(hres == S_OK,"OCFI (NULL,..) does not return 0, but 0x%08lx",hres);
	ok(font != NULL,"OCFI (NULL,..) does return NULL, insytead of !NULL");

	hres = IFont_QueryInterface( font, &IID_IFont, &pvObj);
	
	ok(hres == S_OK,"IFont_QI does not return S_OK, but 0x%08lx", hres);
	ok(pvObj != NULL,"IFont_QI does return NULL, instead of a ptr");
}


More information about the wine-patches mailing list