PATCH: olepic things
Marcus Meissner
marcus at jet.franken.de
Sat Dec 28 14:13:15 CST 2002
Hi,
Ciao, Marcus
Changelog:
Support DllGetClassObject of CLSID_StdPicture.
PICTYPE_NONE has width/height 0.
Index: dlls/oleaut32/oleaut.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/oleaut.c,v
retrieving revision 1.25
diff -u -r1.25 oleaut.c
--- dlls/oleaut32/oleaut.c 12 Dec 2002 22:24:45 -0000 1.25
+++ dlls/oleaut32/oleaut.c 28 Dec 2002 20:10:14 -0000
@@ -507,6 +507,7 @@
}
extern void _get_STDFONT_CF(LPVOID);
+extern void _get_STDPIC_CF(LPVOID);
/***********************************************************************
* DllGetClassObject (OLEAUT32.1)
@@ -517,6 +518,13 @@
if (IsEqualGUID(rclsid,&CLSID_StdFont)) {
if (IsEqualGUID(iid,&IID_IClassFactory)) {
_get_STDFONT_CF(ppv);
+ IClassFactory_AddRef((IClassFactory*)*ppv);
+ return S_OK;
+ }
+ }
+ if (IsEqualGUID(rclsid,&CLSID_StdPicture)) {
+ if (IsEqualGUID(iid,&IID_IClassFactory)) {
+ _get_STDPIC_CF(ppv);
IClassFactory_AddRef((IClassFactory*)*ppv);
return S_OK;
}
Index: dlls/oleaut32/olepicture.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/olepicture.c,v
retrieving revision 1.20
diff -u -r1.20 olepicture.c
--- dlls/oleaut32/olepicture.c 11 Nov 2002 19:54:22 -0000 1.20
+++ dlls/oleaut32/olepicture.c 28 Dec 2002 20:10:14 -0000
@@ -219,6 +219,11 @@
newObject->himetricHeight = pictDesc->u.wmf.yExt;
break;
+ case PICTYPE_NONE:
+ /* not sure what to do here */
+ newObject->himetricWidth = newObject->himetricHeight = 0;
+ break;
+
case PICTYPE_ICON:
case PICTYPE_ENHMETAFILE:
default:
@@ -997,6 +1002,8 @@
} else {
This->desc.picType = PICTYPE_ICON;
This->desc.u.icon.hicon = hicon;
+ This->himetricWidth = cifd->idEntries[i].bWidth;
+ This->himetricHeight = cifd->idEntries[i].bHeight;
hr = S_OK;
}
break;
@@ -1308,3 +1315,63 @@
IPicture_Release(newpic);
return hr;
}
+
+/*******************************************************************************
+ * StdPic ClassFactory
+ */
+typedef struct
+{
+ /* IUnknown fields */
+ ICOM_VFIELD(IClassFactory);
+ DWORD ref;
+} IClassFactoryImpl;
+
+static HRESULT WINAPI
+SPCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+
+ FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI
+SPCF_AddRef(LPCLASSFACTORY iface) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ return ++(This->ref);
+}
+
+static ULONG WINAPI SPCF_Release(LPCLASSFACTORY iface) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ /* static class, won't be freed */
+ return --(This->ref);
+}
+
+static HRESULT WINAPI SPCF_CreateInstance(
+ LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj
+) {
+ PICTDESC pd;
+
+ FIXME("(%p,%p,%s,%p), creating stdpic with PICTYPE_NONE.\n",iface,pOuter,debugstr_guid(riid),ppobj);
+ pd.cbSizeofstruct = sizeof(pd);
+ pd.picType = PICTYPE_NONE;
+ return OleCreatePictureIndirect(&pd,riid,TRUE,ppobj);
+
+}
+
+static HRESULT WINAPI SPCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ FIXME("(%p)->(%d),stub!\n",This,dolock);
+ return S_OK;
+}
+
+static ICOM_VTABLE(IClassFactory) SPCF_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ SPCF_QueryInterface,
+ SPCF_AddRef,
+ SPCF_Release,
+ SPCF_CreateInstance,
+ SPCF_LockServer
+};
+static IClassFactoryImpl STDPIC_CF = {&SPCF_Vtbl, 1 };
+
+void _get_STDPIC_CF(LPVOID *ppv) { *ppv = (LPVOID)&STDPIC_CF; }
More information about the wine-patches
mailing list