[PATCH 06/10] ole32: Add support for loading dibs.
Huw Davies
huw at codeweavers.com
Wed Mar 25 03:37:38 CDT 2015
---
dlls/ole32/datacache.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/dlls/ole32/datacache.c b/dlls/ole32/datacache.c
index a2b7e57..36c02dd 100644
--- a/dlls/ole32/datacache.c
+++ b/dlls/ole32/datacache.c
@@ -581,6 +581,43 @@ static HRESULT load_mf_pict( DataCacheEntry *cache_entry, IStream *stm )
return hr;
}
+static HRESULT load_dib( DataCacheEntry *cache_entry, IStream *stm )
+{
+ HRESULT hr;
+ STATSTG stat;
+ void *dib;
+ HGLOBAL hglobal;
+ ULONG read;
+
+ if (cache_entry->stream_type != contents_stream)
+ {
+ FIXME( "Unimplemented for stream type %d\n", cache_entry->stream_type );
+ return E_FAIL;
+ }
+
+ hr = IStream_Stat( stm, &stat, STATFLAG_NONAME );
+ if (FAILED( hr )) return hr;
+
+ hglobal = GlobalAlloc( GMEM_MOVEABLE, stat.cbSize.u.LowPart );
+ if (!hglobal) return E_OUTOFMEMORY;
+ dib = GlobalLock( hglobal );
+
+ hr = IStream_Read( stm, dib, stat.cbSize.u.LowPart, &read );
+ GlobalUnlock( hglobal );
+
+ if (hr != S_OK || read != stat.cbSize.u.LowPart)
+ {
+ GlobalFree( hglobal );
+ return E_FAIL;
+ }
+
+ cache_entry->data_cf = cache_entry->fmtetc.cfFormat;
+ cache_entry->stgmedium.tymed = TYMED_HGLOBAL;
+ cache_entry->stgmedium.u.hGlobal = hglobal;
+
+ return S_OK;
+}
+
/************************************************************************
* DataCacheEntry_LoadData
*
@@ -608,6 +645,10 @@ static HRESULT DataCacheEntry_LoadData(DataCacheEntry *cache_entry)
hr = load_mf_pict( cache_entry, stm );
break;
+ case CF_DIB:
+ hr = load_dib( cache_entry, stm );
+ break;
+
default:
FIXME( "Unimplemented clip format %x\n", cache_entry->fmtetc.cfFormat );
hr = E_NOTIMPL;
--
1.8.0
More information about the wine-patches
mailing list