Small fixes for EnhMetaFile playback.
This commit is contained in:
parent
64eed99f8e
commit
0ae4e09188
|
@ -60,7 +60,7 @@ static ENHMETAHEADER *EMF_GetEnhMetaHeader( HENHMETAFILE hmf )
|
||||||
ENHMETAFILEOBJ *metaObj = (ENHMETAFILEOBJ *)GDI_GetObjPtr( hmf,
|
ENHMETAFILEOBJ *metaObj = (ENHMETAFILEOBJ *)GDI_GetObjPtr( hmf,
|
||||||
ENHMETAFILE_MAGIC );
|
ENHMETAFILE_MAGIC );
|
||||||
TRACE("hmf %04x -> enhmetaObj %p\n", hmf, metaObj);
|
TRACE("hmf %04x -> enhmetaObj %p\n", hmf, metaObj);
|
||||||
return metaObj->emh;
|
return metaObj ? metaObj->emh : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
|
@ -108,7 +108,8 @@ HENHMETAFILE WINAPI GetEnhMetaFileA(
|
||||||
HENHMETAFILE hmf;
|
HENHMETAFILE hmf;
|
||||||
HFILE hFile;
|
HFILE hFile;
|
||||||
|
|
||||||
hFile = CreateFileA(lpszMetaFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
|
hFile = CreateFileA(lpszMetaFile, GENERIC_READ, FILE_SHARE_READ, 0,
|
||||||
|
OPEN_EXISTING, 0, 0);
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
if (hFile == INVALID_HANDLE_VALUE) {
|
||||||
WARN("could not open %s\n", lpszMetaFile);
|
WARN("could not open %s\n", lpszMetaFile);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -128,7 +129,8 @@ HENHMETAFILE WINAPI GetEnhMetaFileW(
|
||||||
HENHMETAFILE hmf;
|
HENHMETAFILE hmf;
|
||||||
HFILE hFile;
|
HFILE hFile;
|
||||||
|
|
||||||
hFile = CreateFileW(lpszMetaFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
|
hFile = CreateFileW(lpszMetaFile, GENERIC_READ, FILE_SHARE_READ, 0,
|
||||||
|
OPEN_EXISTING, 0, 0);
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
if (hFile == INVALID_HANDLE_VALUE) {
|
||||||
WARN("could not open %s\n", debugstr_w(lpszMetaFile));
|
WARN("could not open %s\n", debugstr_w(lpszMetaFile));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -156,6 +158,7 @@ UINT WINAPI GetEnhMetaFileHeader(
|
||||||
|
|
||||||
if (!buf) return sizeof(ENHMETAHEADER);
|
if (!buf) return sizeof(ENHMETAHEADER);
|
||||||
emh = EMF_GetEnhMetaHeader(hmf);
|
emh = EMF_GetEnhMetaHeader(hmf);
|
||||||
|
if(!emh) return FALSE;
|
||||||
memmove(buf, emh, MIN(sizeof(ENHMETAHEADER), bufsize));
|
memmove(buf, emh, MIN(sizeof(ENHMETAHEADER), bufsize));
|
||||||
EMF_ReleaseEnhMetaHeader(hmf);
|
EMF_ReleaseEnhMetaHeader(hmf);
|
||||||
return MIN(sizeof(ENHMETAHEADER), bufsize);
|
return MIN(sizeof(ENHMETAHEADER), bufsize);
|
||||||
|
@ -174,6 +177,7 @@ UINT WINAPI GetEnhMetaFileDescriptionA(
|
||||||
LPENHMETAHEADER emh = EMF_GetEnhMetaHeader(hmf);
|
LPENHMETAHEADER emh = EMF_GetEnhMetaHeader(hmf);
|
||||||
INT first;
|
INT first;
|
||||||
|
|
||||||
|
if(!emh) return FALSE;
|
||||||
if(emh->nDescription == 0 || emh->offDescription == 0) {
|
if(emh->nDescription == 0 || emh->offDescription == 0) {
|
||||||
EMF_ReleaseEnhMetaHeader(hmf);
|
EMF_ReleaseEnhMetaHeader(hmf);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -211,6 +215,7 @@ UINT WINAPI GetEnhMetaFileDescriptionW(
|
||||||
{
|
{
|
||||||
LPENHMETAHEADER emh = EMF_GetEnhMetaHeader(hmf);
|
LPENHMETAHEADER emh = EMF_GetEnhMetaHeader(hmf);
|
||||||
|
|
||||||
|
if(!emh) return FALSE;
|
||||||
if(emh->nDescription == 0 || emh->offDescription == 0) {
|
if(emh->nDescription == 0 || emh->offDescription == 0) {
|
||||||
EMF_ReleaseEnhMetaHeader(hmf);
|
EMF_ReleaseEnhMetaHeader(hmf);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -548,9 +553,12 @@ BOOL WINAPI EnumEnhMetaFile(
|
||||||
{
|
{
|
||||||
BOOL ret = TRUE;
|
BOOL ret = TRUE;
|
||||||
LPENHMETARECORD p = (LPENHMETARECORD) EMF_GetEnhMetaHeader(hmf);
|
LPENHMETARECORD p = (LPENHMETARECORD) EMF_GetEnhMetaHeader(hmf);
|
||||||
INT count = ((LPENHMETAHEADER) p)->nHandles;
|
INT count;
|
||||||
HANDLETABLE *ht = HeapAlloc( GetProcessHeap(), 0,
|
HANDLETABLE *ht;
|
||||||
sizeof(HANDLETABLE)*count);
|
|
||||||
|
if(!p) return FALSE;
|
||||||
|
count = ((LPENHMETAHEADER) p)->nHandles;
|
||||||
|
ht = HeapAlloc( GetProcessHeap(), 0, sizeof(HANDLETABLE)*count);
|
||||||
ht->objectHandle[0] = hmf;
|
ht->objectHandle[0] = hmf;
|
||||||
while (ret) {
|
while (ret) {
|
||||||
ret = (*callback)(hdc, ht, p, count, data);
|
ret = (*callback)(hdc, ht, p, count, data);
|
||||||
|
@ -580,11 +588,14 @@ BOOL WINAPI PlayEnhMetaFile(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
LPENHMETARECORD p = (LPENHMETARECORD) EMF_GetEnhMetaHeader(hmf);
|
LPENHMETARECORD p = (LPENHMETARECORD) EMF_GetEnhMetaHeader(hmf);
|
||||||
INT count = ((LPENHMETAHEADER) p)->nHandles;
|
INT count;
|
||||||
HANDLETABLE *ht = HeapAlloc( GetProcessHeap(), 0,
|
HANDLETABLE *ht;
|
||||||
sizeof(HANDLETABLE) * count);
|
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
INT savedMode = 0;
|
INT savedMode = 0;
|
||||||
|
|
||||||
|
if(!p) return FALSE;
|
||||||
|
count = ((LPENHMETAHEADER) p)->nHandles;
|
||||||
|
ht = HeapAlloc( GetProcessHeap(), 0, sizeof(HANDLETABLE) * count);
|
||||||
if (lpRect) {
|
if (lpRect) {
|
||||||
LPENHMETAHEADER h = (LPENHMETAHEADER) p;
|
LPENHMETAHEADER h = (LPENHMETAHEADER) p;
|
||||||
FLOAT xscale = (h->rclBounds.right - h->rclBounds.left) /
|
FLOAT xscale = (h->rclBounds.right - h->rclBounds.left) /
|
||||||
|
@ -640,6 +651,7 @@ HENHMETAFILE WINAPI CopyEnhMetaFileA(
|
||||||
ENHMETAHEADER *emrSrc = EMF_GetEnhMetaHeader( hmfSrc ), *emrDst;
|
ENHMETAHEADER *emrSrc = EMF_GetEnhMetaHeader( hmfSrc ), *emrDst;
|
||||||
HENHMETAFILE hmfDst;
|
HENHMETAFILE hmfDst;
|
||||||
|
|
||||||
|
if(!emrSrc) return FALSE;
|
||||||
if (!file) {
|
if (!file) {
|
||||||
emrDst = HeapAlloc( SystemHeap, 0, emrSrc->nBytes );
|
emrDst = HeapAlloc( SystemHeap, 0, emrSrc->nBytes );
|
||||||
memcpy( emrDst, emrSrc, emrSrc->nBytes );
|
memcpy( emrDst, emrSrc, emrSrc->nBytes );
|
||||||
|
|
Loading…
Reference in New Issue