90#define STREAM_NUMBER_NOT_SET -2
91#define STREAM_NUMBER_CONTENTS -1
216 return wine_dbg_sprintf(
"{ cfFormat = 0x%x, ptd = %p, dwAspect = %ld, lindex = %ld, tymed = %ld }",
217 formatetc->cfFormat, formatetc->ptd, formatetc->dwAspect,
218 formatetc->lindex, formatetc->tymed);
239 colors =
info->bmiHeader.biClrUsed;
242 if (!colors && (
info->bmiHeader.biBitCount <= 8))
243 colors = 1 <<
info->bmiHeader.biBitCount;
292 FORMATETC
fmt = *formatetc;
297 fmt.tymed = TYMED_HGLOBAL;
344 if (!
fmt->cfFormat ||
347 (
fmt->cfFormat ==
CF_DIB &&
fmt->tymed == TYMED_HGLOBAL) ||
350 else if (
fmt->tymed == TYMED_HGLOBAL)
354 WARN(
"invalid clipformat/tymed combination: %d/%ld\n",
fmt->cfFormat,
fmt->tymed);
367 entry->stgmedium.tymed = TYMED_NULL;
374 entry->advise_flags = advf;
383 DWORD id = automatic ? 1 :
This->last_cache_id;
390 TRACE(
"creating unsupported format %d\n", formatetc->cfFormat);
404 This->last_cache_id++;
428 TRACE(
"%p, %lx, %ld.\n",
this, aspect, lindex);
435 if ((this->sinkAspects & aspect) != 0)
437 if (this->sinkInterface !=
NULL)
439 IAdviseSink_OnViewChange(this->sinkInterface,
447 if ( (this->sinkAdviseFlag & ADVF_ONLYONCE) != 0)
449 IAdviseSink_Release(this->sinkInterface);
451 this->sinkInterface =
NULL;
452 this->sinkAspects = 0;
453 this->sinkAdviseFlag = 0;
503 char format_name[256];
507 else if (clipformat < 0xc000)
519 if (clipformat < 0xc000)
533 WCHAR pres[] = {2,
'O',
'l',
'e',
'P',
'r',
'e',
's',
534 '0' + (stream_number / 100) % 10,
535 '0' + (stream_number / 10) % 10,
536 '0' + stream_number % 10, 0};
560 med->tymed = TYMED_ENHMF;
561 med->pUnkForRelease =
NULL;
589 CLIPFORMAT clipformat;
594 hr = IStream_Stat( stm, &
stat, STATFLAG_NONAME );
606 hr = IStream_Read( stm, &mf_place,
sizeof(mf_place), &
read );
610 hr = IStream_Seek( stm, offset_zero, STREAM_SEEK_CUR, ¤t_pos );
639 * 2540) / mf_place.
inch;
641 * 2540) / mf_place.
inch;
676 hr = IStream_Stat( stm, &
stat, STATFLAG_NONAME );
683 hr = IStream_Read( stm, &pres,
sizeof(pres), &
read );
692 hr = IStream_Seek( stm, offset_zero, STREAM_SEEK_CUR, ¤t_pos );
701 hr = IStream_Read( stm, dib,
sizeof(
DWORD), &
read );
702 if (
hr !=
S_OK)
goto fail;
703 bi_size = *(
DWORD *)dib;
704 if (
stat.cbSize.QuadPart < bi_size)
goto fail;
707 hr = IStream_Read( stm, dib +
sizeof(
DWORD), bi_size -
sizeof(
DWORD), &
read );
708 if (
hr !=
S_OK)
goto fail;
711 if (
stat.cbSize.QuadPart < info_size)
goto fail;
712 if (info_size > bi_size)
714 hr = IStream_Read( stm, dib + bi_size, info_size - bi_size, &
read );
715 if (
hr !=
S_OK)
goto fail;
717 stat.cbSize.QuadPart -= info_size;
724 skip.QuadPart =
file.bfOffBits -
sizeof(
file) - info_size;
725 if (
stat.cbSize.QuadPart <
skip.QuadPart)
goto fail;
726 hr = IStream_Seek( stm,
skip, STREAM_SEEK_CUR,
NULL );
727 if (
hr !=
S_OK)
goto fail;
728 stat.cbSize.QuadPart -=
skip.QuadPart;
731 hr = IStream_Read( stm, dib + info_size,
stat.cbSize.LowPart, &
read );
732 if (
hr !=
S_OK)
goto fail;
734 if (bi_size >=
sizeof(*
info))
737 if (
info->biXPelsPerMeter == 0 ||
info->biYPelsPerMeter == 0)
783 hr = IStream_Stat( stm, &
stat, STATFLAG_NONAME );
855 IStream_Release( stm );
861 if (
entry->fmtetc.ptd)
862 FIXME(
"ptd not serialized\n");
868 header->dwObjectExtentX = 0;
869 header->dwObjectExtentY = 0;
879 if (
entry->stgmedium.tymed != TYMED_NULL)
894 header.dwSize = data_size;
910 if (
hr ==
S_OK && data_size)
945 if (
entry->stgmedium.tymed != TYMED_NULL)
953 header.dwSize = data_size;
964 if (
hr ==
S_OK && data_size)
968 else if (
entry->stgmedium.tymed != TYMED_NULL)
986 meta_place_rec.
key = 0x9ac6cdd7;
987 meta_place_rec.
hwmf = 0;
988 meta_place_rec.
inch = 576;
1004 if (
hr ==
S_OK && data_size)
1032 header.dwSize = data_size;
1045 if (
hr ==
S_OK && data_size)
1049 else if (
entry->stgmedium.tymed != TYMED_NULL)
1081 WCHAR pres[] = {2,
'O',
'l',
'e',
'P',
'r',
'e',
's',
1125 FIXME(
"got unsupported clipboard format %x\n",
cache_entry->fmtetc.cfFormat);
1136 const STGMEDIUM *src_stgm)
1138 if (src_stgm->tymed == TYMED_MFPICT)
1146 dest_mfpict =
GlobalLock(dest_stgm->hMetaFilePict);
1152 *dest_mfpict = *src_mfpict;
1157 else if (src_stgm->tymed != TYMED_NULL)
1160 if (!dest_stgm->hGlobal)
1163 dest_stgm->tymed = src_stgm->tymed;
1164 dest_stgm->pUnkForRelease = src_stgm->pUnkForRelease;
1165 if (dest_stgm->pUnkForRelease)
1166 IUnknown_AddRef(dest_stgm->pUnkForRelease);
1185 memset( bmi, 0, header_size );
1189 med->tymed = TYMED_HGLOBAL;
1190 med->pUnkForRelease =
NULL;
1211 med->tymed = TYMED_GDI;
1212 med->pUnkForRelease =
NULL;
1220 const FORMATETC *formatetc,
1221 STGMEDIUM *stgmedium,
1227 if ((!
cache_entry->fmtetc.cfFormat && !formatetc->cfFormat) ||
1228 (
cache_entry->fmtetc.tymed == TYMED_NULL && formatetc->tymed == TYMED_NULL) ||
1229 stgmedium->tymed == TYMED_NULL)
1231 WARN(
"invalid formatetc\n");
1295 default:
return TYMED_HGLOBAL;
1309 static const struct data
1376 if (this->outer_unk == iface)
1377 *ppvObject = &this->IOleCache2_iface;
1383 *ppvObject = &this->IDataObject_iface;
1388 *ppvObject = &this->IPersistStorage_iface;
1393 *ppvObject = &this->IViewObject2_iface;
1398 *ppvObject = &this->IOleCache2_iface;
1402 *ppvObject = &this->IOleCacheControl_iface;
1405 if ((*ppvObject)==0)
1411 IUnknown_AddRef((
IUnknown*)*ppvObject);
1463 return IUnknown_QueryInterface(this->outer_unk,
riid, ppvObject);
1474 return IUnknown_AddRef(this->outer_unk);
1485 return IUnknown_Release(this->outer_unk);
1495 LPFORMATETC pformatetcIn,
1503 memset(pmedium, 0,
sizeof(*pmedium));
1514 LPFORMATETC pformatetc,
1539 LPFORMATETC pformatectIn,
1540 LPFORMATETC pformatetcOut)
1553 LPFORMATETC pformatetc,
1560 TRACE(
"(%p, %p, %p, %d)\n", iface, pformatetc, pmedium, fRelease);
1567 hres = IOleCache2_SetData(oleCache, pformatetc, pmedium, fRelease);
1569 IOleCache2_Release(oleCache);
1595 FORMATETC* pformatetc,
1598 DWORD* pdwConnection)
1645 return IUnknown_QueryInterface(this->outer_unk,
riid, ppvObject);
1656 return IUnknown_AddRef(this->outer_unk);
1667 return IUnknown_Release(this->outer_unk);
1693 TRACE(
"(%p)\n", iface);
1719 TRACE(
"(%p, %p)\n", iface, pStg);
1721 if (
This->presentationStorage !=
NULL)
1724 This->presentationStorage = pStg;
1726 IStorage_AddRef(
This->presentationStorage);
1732 IStorage_Release( pStg );
1768 CLIPFORMAT clipformat;
1770 int stream_number = 0;
1783 fmtetc.cfFormat = clipformat;
1785 fmtetc.dwAspect =
header.dvAspect;
1786 fmtetc.lindex =
header.lindex;
1791 IStream_Release( stm );
1815 IStream_Release( stm );
1834 TRACE(
"(%p, %p)\n", iface, stg);
1836 IPersistStorage_HandsOffStorage( iface );
1848 if (
This->clsid_static)
1859 This->presentationStorage = stg;
1860 IStorage_AddRef(
This->presentationStorage );
1879 int stream_number = 0;
1881 TRACE(
"(%p, %p, %d)\n", iface, stg, same_as_load);
1886 if (
cache_entry->save_stream_num != stream_number)
1921 TRACE(
"(%p, %p)\n", iface, pStgNew);
1925 IPersistStorage_HandsOffStorage(iface);
1944 TRACE(
"(%p)\n", iface);
1946 if (this->presentationStorage !=
NULL)
1948 IStorage_Release(this->presentationStorage);
1949 this->presentationStorage =
NULL;
1970 return IUnknown_QueryInterface(this->outer_unk,
riid, ppvObject);
1981 return IUnknown_AddRef(this->outer_unk);
1992 return IUnknown_Release(this->outer_unk);
2006 DVTARGETDEVICE*
ptd,
2018 TRACE(
"%p, %lx, %ld, %p, %p, %p, %p, %p, %p, %Ix.\n",
2030 if (lprcBounds==
NULL)
2036 if ((
cache_entry->fmtetc.dwAspect != dwDrawAspect) ||
2052 if (pfnContinue && !pfnContinue(dwContinue))
return E_ABORT;
2064 SIZE oldViewportExt;
2065 POINT oldViewportOrg;
2068 if ((
cache_entry->stgmedium.tymed != TYMED_MFPICT) ||
2117 if ((
cache_entry->stgmedium.tymed != TYMED_HGLOBAL) ||
2124 0, 0,
info->bmiHeader.biWidth,
info->bmiHeader.biHeight,
2133 WARN(
"no data could be found to be drawn\n");
2143 DVTARGETDEVICE*
ptd,
2144 HDC hicTargetDevice,
2184 TRACE(
"%p, %lx, %lx, %p.\n", iface, aspects, advf, pAdvSink);
2189 if (this->sinkInterface !=
NULL)
2191 IAdviseSink_Release(this->sinkInterface);
2192 this->sinkInterface =
NULL;
2193 this->sinkAspects = 0;
2194 this->sinkAdviseFlag = 0;
2202 this->sinkInterface = pAdvSink;
2203 this->sinkAspects = aspects;
2204 this->sinkAdviseFlag = advf;
2206 IAdviseSink_AddRef(this->sinkInterface);
2213 if (advf & ADVF_PRIMEFIRST)
2235 TRACE(
"(%p, %p, %p, %p)\n", iface, pAspects, pAdvf, ppAdvSink);
2241 *pAspects = this->sinkAspects;
2244 *pAdvf = this->sinkAdviseFlag;
2246 if (ppAdvSink!=
NULL)
2248 if (this->sinkInterface !=
NULL)
2249 IAdviseSink_QueryInterface(this->sinkInterface,
2252 else *ppAdvSink =
NULL;
2267 DVTARGETDEVICE*
ptd,
2274 TRACE(
"%p, %lx, %ld, %p, %p.\n", iface, dwDrawAspect, lindex,
ptd, lpsizel);
2283 FIXME(
"Unimplemented flag lindex = %ld\n", lindex);
2290 FIXME(
"Unimplemented ptd = %p\n",
ptd);
2295 if ((
cache_entry->fmtetc.dwAspect != dwDrawAspect) ||
2318 if ((
cache_entry->stgmedium.tymed != TYMED_MFPICT) ||
2322 lpsizel->
cx = mfpict->
xExt;
2323 lpsizel->
cy = mfpict->
yExt;
2332 LONG x_pels_m, y_pels_m;
2335 if ((
cache_entry->stgmedium.tymed != TYMED_HGLOBAL) ||
2339 x_pels_m =
info->biXPelsPerMeter;
2340 y_pels_m =
info->biYPelsPerMeter;
2343 if (x_pels_m != 0 && y_pels_m != 0)
2345 lpsizel->
cx =
info->biWidth * 100000 / x_pels_m;
2346 lpsizel->
cy =
info->biHeight * 100000 / y_pels_m;
2364 WARN(
"no data could be found to get the extents from\n");
2388 return IUnknown_QueryInterface(this->outer_unk,
riid, ppvObject);
2399 return IUnknown_AddRef(this->outer_unk);
2410 return IUnknown_Release(this->outer_unk);
2424 flags =
cache_entry->advise_flags & ~(ADVFCACHE_NOHANDLER | ADVFCACHE_FORCEBUILTIN | ADVFCACHE_ONSAVE);
2426 if(
This->running_object)
2427 if(!(
flags & ADVF_NODATA))
2435 FORMATETC* pformatetc,
2437 DWORD* pdwConnection)
2444 TRACE(
"%p, %#lx, %p.\n", pformatetc, advf, pdwConnection);
2446 if (!pformatetc || !pdwConnection)
2451 fmt_cpy = *pformatetc;
2452 if (fmt_cpy.cfFormat ==
CF_BITMAP && fmt_cpy.tymed == TYMED_GDI)
2454 fmt_cpy.cfFormat =
CF_DIB;
2455 fmt_cpy.tymed = TYMED_HGLOBAL;
2459 if (fmt_cpy.dwAspect == DVASPECT_ICON && fmt_cpy.cfFormat == 0)
2462 fmt_cpy.tymed = TYMED_MFPICT;
2470 TRACE(
"found an existing cache entry\n");
2495 TRACE(
"%ld\n", dwConnection);
2504 WARN(
"no connection found for %ld\n", dwConnection);
2532 if (
i ==
count)
goto fail;
2542 if (
i ==
count)
goto fail;
2546 data[
i].formatetc.tymed = TYMED_GDI;
2566 return IOleCache2_UpdateCache( iface,
data, UPDFCACHE_ALLBUTNODATACACHE,
NULL );
2571 FORMATETC* pformatetc,
2579 TRACE(
"(%p, %p, %s)\n", pformatetc, pmedium, fRelease ?
"TRUE" :
"FALSE");
2593 WARN(
"cache entry not found\n");
2600 BOOL is_blank =
entry->stgmedium.tymed == TYMED_NULL;
2602 if ((
mode & UPDFCACHE_ONLYIFBLANK) && !is_blank)
return FALSE;
2604 if ((
mode & UPDFCACHE_NODATACACHE) && (
entry->advise_flags & ADVF_NODATA))
return TRUE;
2605 if ((
mode & UPDFCACHE_ONSAVECACHE) && (
entry->advise_flags & ADVFCACHE_ONSAVE))
return TRUE;
2606 if ((
mode & UPDFCACHE_ONSTOPCACHE) && (
entry->advise_flags & ADVF_DATAONSTOP))
return TRUE;
2607 if ((
mode & UPDFCACHE_NORMALCACHE) && (
entry->advise_flags == 0))
return TRUE;
2608 if ((
mode & UPDFCACHE_IFBLANK) && (is_blank && !(
entry->advise_flags & ADVF_NODATA)))
return TRUE;
2641 hr = IDataObject_GetData(
data, &
fmt, &med );
2645 fmt.tymed = TYMED_GDI;
2646 hr = IDataObject_GetData(
data, &
fmt, &med );
2651 fmt.tymed = TYMED_MFPICT;
2652 hr = IDataObject_GetData(
data, &
fmt, &med );
2658 else done_one =
TRUE;
2665 fmt.cfFormat = view_list[
i];
2667 hr = IDataObject_QueryGetData(
data, &
fmt );
2670 hr = IDataObject_GetData(
data, &
fmt, &med );
2685 else done_one =
TRUE;
2698 DWORD dwDiscardOptions)
2704 TRACE(
"%ld\n", dwDiscardOptions);
2706 if (dwDiscardOptions == DISCARDCACHE_SAVEIFDIRTY)
2735 return IUnknown_QueryInterface(this->outer_unk,
riid, ppvObject);
2746 return IUnknown_AddRef(this->outer_unk);
2757 return IUnknown_Release(this->outer_unk);
2768 TRACE(
"(%p)->(%p)\n", iface, data_obj);
2770 if(
This->running_object)
return S_OK;
2773 This->running_object = data_obj;
2791 TRACE(
"(%p)\n", iface);
2793 if(!
This->running_object)
return S_OK;
2826 IAdviseSink_AddRef(iface);
2846 IOleCache2_SetData(&
This->IOleCache2_iface,
fmt, med,
FALSE);
struct outqueuenode * head
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
const CLSID CLSID_Picture_EnhMetafile
const CLSID CLSID_Picture_Dib
const CLSID CLSID_Picture_Metafile
HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD array_len, STATDATA *data, BOOL copy, IEnumSTATDATA **ppenum)
static HRESULT copy_formatetc(FORMATETC *dst, const FORMATETC *src)
_In_ size_t const _In_ int _In_ bool const _In_ unsigned const _In_ __acrt_rounding_mode const _Inout_ __crt_cached_ptd_host & ptd
static HRESULT WINAPI DataCache_IViewObject2_QueryInterface(IViewObject2 *iface, REFIID riid, void **ppvObject)
static DataCache * impl_from_IUnknown(IUnknown *iface)
static int bitmap_info_size(const BITMAPINFO *info, WORD coloruse)
static HRESULT WINAPI DataCache_EnumFormatEtc(IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
static HRESULT DataCacheEntry_LoadData(DataCacheEntry *cache_entry, IStorage *stg)
static void DataCache_Destroy(DataCache *ptrToDestroy)
static HRESULT WINAPI DataCache_GetData(IDataObject *iface, LPFORMATETC pformatetcIn, STGMEDIUM *pmedium)
static DataCache * impl_from_IOleCache2(IOleCache2 *iface)
static void init_stream_header(DataCacheEntry *entry, PresentationDataHeader *header)
static HRESULT DataCacheEntry_SetData(DataCacheEntry *cache_entry, const FORMATETC *formatetc, STGMEDIUM *stgmedium, BOOL fRelease)
static HRESULT WINAPI DataCache_Freeze(IViewObject2 *iface, DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze)
static HRESULT WINAPI DataCache_GetClassID(IPersistStorage *iface, CLSID *clsid)
static void WINAPI DataCache_OnClose(IAdviseSink *iface)
static HRESULT save_dib(DataCacheEntry *entry, BOOL contents, IStream *stream)
static const IAdviseSinkVtbl DataCache_IAdviseSink_VTable
static HRESULT parse_contents_stream(DataCache *cache, IStorage *stg)
static ULONG WINAPI DataCache_IOleCacheControl_Release(IOleCacheControl *iface)
static HRESULT WINAPI DataCache_UpdateCache(IOleCache2 *iface, IDataObject *data, DWORD mode, void *reserved)
static HRESULT add_cache_entry(DataCache *This, const FORMATETC *fmt, DWORD advf, int stream_number)
static HRESULT check_valid_formatetc(const FORMATETC *fmt)
static HRESULT WINAPI DataCache_OnStop(IOleCacheControl *iface)
static HRESULT WINAPI DataCache_Draw(IViewObject2 *iface, DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL(CALLBACK *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue)
static HRESULT WINAPI DataCache_GetAdvise(IViewObject2 *iface, DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink)
static HRESULT WINAPI DataCache_Cache(IOleCache2 *iface, FORMATETC *pformatetc, DWORD advf, DWORD *pdwConnection)
static HRESULT get_static_entry(DataCache *cache, DataCacheEntry **cache_entry)
static HRESULT WINAPI DataCache_EnumDAdvise(IDataObject *iface, IEnumSTATDATA **ppenumAdvise)
static HRESULT WINAPI DataCache_GetExtent(IViewObject2 *iface, DWORD dwDrawAspect, LONG lindex, DVTARGETDEVICE *ptd, LPSIZEL lpsizel)
static const IUnknownVtbl DataCache_NDIUnknown_VTable
static HRESULT open_pres_stream(IStorage *stg, int stream_number, IStream **stm)
static HRESULT WINAPI DataCache_Load(IPersistStorage *iface, IStorage *stg)
static HRESULT WINAPI DataCache_DUnadvise(IDataObject *iface, DWORD dwConnection)
static HRESULT copy_stg_medium(CLIPFORMAT cf, STGMEDIUM *dest_stgm, const STGMEDIUM *src_stgm)
#define STREAM_NUMBER_CONTENTS
static HRESULT read_clipformat(IStream *stream, CLIPFORMAT *clipformat)
static HRESULT WINAPI DataCache_SaveCompleted(IPersistStorage *iface, IStorage *pStgNew)
static void WINAPI DataCache_OnDataChange(IAdviseSink *iface, FORMATETC *fmt, STGMEDIUM *med)
static HRESULT load_dib(DataCacheEntry *cache_entry, IStream *stm)
static HRESULT load_mf_pict(DataCacheEntry *cache_entry, IStream *stm)
static HRESULT WINAPI DataCache_IAdviseSink_QueryInterface(IAdviseSink *iface, REFIID iid, void **obj)
static HRESULT WINAPI DataCache_NDIUnknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppvObject)
static const IViewObject2Vtbl DataCache_IViewObject2_VTable
static HRESULT write_clipformat(IStream *stream, CLIPFORMAT clipformat)
struct PresentationDataHeader PresentationDataHeader
static ULONG WINAPI DataCache_IViewObject2_AddRef(IViewObject2 *iface)
static HRESULT WINAPI DataCache_IPersistStorage_QueryInterface(IPersistStorage *iface, REFIID riid, void **ppvObject)
static const IPersistStorageVtbl DataCache_IPersistStorage_VTable
static HRESULT DataCacheEntry_DiscardData(DataCacheEntry *cache_entry)
static BOOL entry_updatable(DataCacheEntry *entry, DWORD mode)
static ULONG WINAPI DataCache_IOleCacheControl_AddRef(IOleCacheControl *iface)
static const IOleCache2Vtbl DataCache_IOleCache2_VTable
static HRESULT WINAPI DataCache_GetDataHere(IDataObject *iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium)
static HRESULT WINAPI DataCache_IDataObject_SetData(IDataObject *iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
static HRESULT WINAPI DataCache_OnRun(IOleCacheControl *iface, IDataObject *data_obj)
static void DataCache_FireOnViewChange(DataCache *this, DWORD aspect, LONG lindex)
static HRESULT DataCacheEntry_GetData(DataCacheEntry *cache_entry, IStorage *stg, FORMATETC *fmt, STGMEDIUM *stgmedium)
static HRESULT DataCacheEntry_Save(DataCacheEntry *cache_entry, IStorage *storage, BOOL same_as_load)
static HRESULT WINAPI DataCache_IOleCache2_SetData(IOleCache2 *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
static HRESULT WINAPI DataCache_IsDirty(IPersistStorage *iface)
static const IDataObjectVtbl DataCache_IDataObject_VTable
static HRESULT WINAPI DataCache_InitNew(IPersistStorage *iface, IStorage *pStg)
static HRESULT synthesize_dib(HBITMAP bm, STGMEDIUM *med)
static DataCache * impl_from_IViewObject2(IViewObject2 *iface)
static HRESULT load_emf(DataCacheEntry *cache_entry, IStream *stm)
static HRESULT WINAPI DataCache_InitCache(IOleCache2 *iface, IDataObject *data)
static ULONG WINAPI DataCache_IAdviseSink_AddRef(IAdviseSink *iface)
static HRESULT WINAPI DataCache_IOleCacheControl_QueryInterface(IOleCacheControl *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI DataCache_EnumCache(IOleCache2 *iface, IEnumSTATDATA **enum_stat)
static ULONG WINAPI DataCache_NDIUnknown_Release(IUnknown *iface)
static HRESULT WINAPI DataCache_QueryGetData(IDataObject *iface, FORMATETC *fmt)
static HRESULT WINAPI DataCache_Unfreeze(IViewObject2 *iface, DWORD dwFreeze)
static HRESULT WINAPI DataCache_IOleCache2_QueryInterface(IOleCache2 *iface, REFIID riid, void **ppvObject)
HRESULT WINAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid, REFIID riid, LPVOID *ppvObj)
static ULONG WINAPI DataCache_IPersistStorage_Release(IPersistStorage *iface)
static HRESULT WINAPI DataCache_DiscardCache(IOleCache2 *iface, DWORD dwDiscardOptions)
static DataCache * impl_from_IOleCacheControl(IOleCacheControl *iface)
static HRESULT save_emf(DataCacheEntry *entry, BOOL contents, IStream *stream)
static HRESULT synthesize_emf(HMETAFILEPICT data, STGMEDIUM *med)
static void DataCacheEntry_Destroy(DataCache *cache, DataCacheEntry *cache_entry)
const char * debugstr_formatetc(const FORMATETC *formatetc)
static HRESULT setup_sink(DataCache *This, DataCacheEntry *cache_entry)
static HRESULT parse_pres_streams(DataCache *cache, IStorage *stg)
static HRESULT create_stream(DataCacheEntry *cache_entry, IStorage *storage, BOOL contents, IStream **stream)
static void WINAPI DataCache_OnSave(IAdviseSink *iface)
static ULONG WINAPI DataCache_IOleCache2_Release(IOleCache2 *iface)
static HRESULT save_view_cache(DataCacheEntry *entry, IStream *stream)
#define STREAM_NUMBER_NOT_SET
static ULONG WINAPI DataCache_IViewObject2_Release(IViewObject2 *iface)
static HRESULT WINAPI DataCache_DAdvise(IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
static BOOL init_cache_entry(DataCacheEntry *entry, const FORMATETC *fmt, DWORD advf, DWORD id)
static DataCache * impl_from_IPersistStorage(IPersistStorage *iface)
static DataCache * impl_from_IDataObject(IDataObject *iface)
static void WINAPI DataCache_OnViewChange(IAdviseSink *iface, DWORD aspect, LONG index)
static ULONG WINAPI DataCache_IAdviseSink_Release(IAdviseSink *iface)
static DataCacheEntry * DataCache_GetEntryForFormatEtc(DataCache *This, const FORMATETC *formatetc)
static DataCache * impl_from_IAdviseSink(IAdviseSink *iface)
static ULONG WINAPI DataCache_NDIUnknown_AddRef(IUnknown *iface)
static HRESULT WINAPI DataCache_GetColorSet(IViewObject2 *iface, DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDevice, LOGPALETTE **ppColorSet)
static ULONG WINAPI DataCache_IDataObject_Release(IDataObject *iface)
static ULONG WINAPI DataCache_IPersistStorage_AddRef(IPersistStorage *iface)
static HRESULT create_automatic_entry(DataCache *cache, const CLSID *clsid)
static HRESULT WINAPI DataCache_GetCanonicalFormatEtc(IDataObject *iface, LPFORMATETC pformatectIn, LPFORMATETC pformatetcOut)
static HRESULT synthesize_bitmap(HGLOBAL dib, STGMEDIUM *med)
static ULONG WINAPI DataCache_IOleCache2_AddRef(IOleCache2 *iface)
static HRESULT WINAPI DataCache_Save(IPersistStorage *iface, IStorage *stg, BOOL same_as_load)
static HRESULT WINAPI DataCache_SetAdvise(IViewObject2 *iface, DWORD aspects, DWORD advf, IAdviseSink *pAdvSink)
static HRESULT save_mfpict(DataCacheEntry *entry, BOOL contents, IStream *stream)
static void WINAPI DataCache_OnRename(IAdviseSink *iface, IMoniker *mk)
static HRESULT WINAPI DataCache_IDataObject_QueryInterface(IDataObject *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI DataCache_HandsOffStorage(IPersistStorage *iface)
static const IOleCacheControlVtbl DataCache_IOleCacheControl_VTable
static HRESULT DataCache_CreateEntry(DataCache *This, const FORMATETC *formatetc, DWORD advf, BOOL automatic, DataCacheEntry **cache_entry)
static ULONG WINAPI DataCache_IDataObject_AddRef(IDataObject *iface)
static DWORD tymed_from_cf(DWORD cf)
static HRESULT WINAPI DataCache_Uncache(IOleCache2 *iface, DWORD dwConnection)
static DataCache * DataCache_Construct(REFCLSID clsid, LPUNKNOWN pUnkOuter)
HRESULT WINAPI ReadClassStg(IStorage *pstg, CLSID *pclsid)
const char * wine_dbg_sprintf(const char *format,...)
#define HeapFree(x, y, z)
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
HANDLE WINAPI OleDuplicateData(HANDLE hSrc, CLIPFORMAT cfFormat, UINT uiFlags)
#define check(expected, result)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
static ERESOURCE GlobalLock
void WINAPI CoTaskMemFree(void *ptr)
#define memcpy(s1, s2, n)
static const BYTE masks[8]
static const char * contents
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
#define STGM_SHARE_EXCLUSIVE
const GUID IID_IViewObject
const GUID IID_IAdviseSink
const GUID IID_IViewObject2
const GUID IID_IOleCache2
const GUID IID_IOleCacheControl
const GUID IID_IDataObject
const GUID IID_IPersistStorage
#define IsEqualIID(riid1, riid2)
#define IsEqualCLSID(rclsid1, rclsid2)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
IAdviseSink * sinkInterface
IAdviseSink IAdviseSink_iface
IViewObject2 IViewObject2_iface
IDataObject IDataObject_iface
IStorage * presentationStorage
IOleCache2 IOleCache2_iface
IOleCacheControl IOleCacheControl_iface
IPersistStorage IPersistStorage_iface
IDataObject * running_object
BITMAPINFOHEADER bmiHeader
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
#define CACHE_S_SAMECACHE
#define OLE_E_NOCONNECTION
#define CACHE_S_FORMATETC_NOTSUPPORTED
#define CACHE_E_NOCACHE_UPDATED
#define OLE_E_ADVISENOTSUPPORTED
#define CO_E_ALREADYINITIALIZED
int WINAPI SetMapMode(_In_ HDC, _In_ int)
UINT WINAPI GetEnhMetaFileBits(_In_ HENHMETAFILE hEMF, _In_ UINT nSize, _Out_writes_bytes_opt_(nSize) LPBYTE lpData)
struct tagBITMAPFILEHEADER BITMAPFILEHEADER
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
int WINAPI GetDIBits(_In_ HDC hdc, _In_ HBITMAP hbm, _In_ UINT start, _In_ UINT cLines, _Out_opt_ LPVOID lpvBits, _At_((LPBITMAPINFOHEADER) lpbmi, _Inout_) LPBITMAPINFO lpbmi, _In_ UINT usage)
BOOL WINAPI SetViewportExtEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPSIZE)
BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HMETAFILE WINAPI CopyMetaFileW(_In_ HMETAFILE hmfSrc, _In_opt_ LPCWSTR pszFile)
UINT WINAPI GetWinMetaFileBits(_In_ HENHMETAFILE hemf, _In_ UINT cbData16, _Out_writes_bytes_opt_(cbData16) LPBYTE pData16, _In_ INT iMapMode, _In_ HDC hdcRef)
BOOL WINAPI SetWindowExtEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPSIZE)
UINT WINAPI GetMetaFileBitsEx(_In_ HMETAFILE hMF, _In_ UINT cbBuffer, _Out_writes_bytes_opt_(cbBuffer) LPVOID lpData)
HMETAFILE WINAPI SetMetaFileBitsEx(_In_ UINT cbBuffer, _In_reads_bytes_(cbBuffer) CONST BYTE *lpData)
HENHMETAFILE WINAPI SetEnhMetaFileBits(_In_ UINT nSize, _In_reads_bytes_(nSize) const BYTE *pb)
struct tagENHMETAHEADER ENHMETAHEADER
HBITMAP WINAPI CreateDIBitmap(_In_ HDC hdc, _In_opt_ const BITMAPINFOHEADER *pbmih, _In_ DWORD fdwInit, _In_opt_ const VOID *pvInit, _In_opt_ const BITMAPINFO *pbmi, _In_ UINT uUsage)
BOOL WINAPI PlayMetaFile(_In_ HDC, _In_ HMETAFILE)
int WINAPI StretchDIBits(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ const VOID *, _In_ const BITMAPINFO *, _In_ UINT, _In_ DWORD)
HENHMETAFILE WINAPI SetWinMetaFileBits(_In_ UINT nSize, _In_reads_bytes_(nSize) const BYTE *lpMeta16Data, _In_opt_ HDC hdcRef, _In_opt_ const METAFILEPICT *lpMFP)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
int WINAPI GetClipboardFormatNameA(_In_ UINT format, _Out_writes_(cchMaxCount) LPSTR lpszFormatName, _In_ int cchMaxCount)
HDC WINAPI GetDC(_In_opt_ HWND)
UINT WINAPI RegisterClipboardFormatA(_In_ LPCSTR)