gdi32: Write the map mode and window size records after the mfcomment.
This commit is contained in:
parent
87418f0aaa
commit
8edbd0639e
|
@ -1222,12 +1222,72 @@ end:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************
|
||||||
|
* set_window
|
||||||
|
*
|
||||||
|
* Helper for GetWinMetaFileBits
|
||||||
|
*
|
||||||
|
* Add the SetWindowOrg and SetWindowExt records
|
||||||
|
*/
|
||||||
|
static BOOL set_window(HDC hdc, HENHMETAFILE emf, HDC ref_dc, INT map_mode)
|
||||||
|
{
|
||||||
|
ENHMETAHEADER header;
|
||||||
|
INT horz_res, vert_res, horz_size, vert_size;
|
||||||
|
POINT pt;
|
||||||
|
|
||||||
|
if(!GetEnhMetaFileHeader(emf, sizeof(header), &header)) return FALSE;
|
||||||
|
|
||||||
|
horz_res = GetDeviceCaps(ref_dc, HORZRES);
|
||||||
|
vert_res = GetDeviceCaps(ref_dc, VERTRES);
|
||||||
|
horz_size = GetDeviceCaps(ref_dc, HORZSIZE);
|
||||||
|
vert_size = GetDeviceCaps(ref_dc, VERTSIZE);
|
||||||
|
|
||||||
|
switch(map_mode)
|
||||||
|
{
|
||||||
|
case MM_TEXT:
|
||||||
|
case MM_ISOTROPIC:
|
||||||
|
case MM_ANISOTROPIC:
|
||||||
|
pt.y = MulDiv(header.rclFrame.top, vert_res, vert_size * 100);
|
||||||
|
pt.x = MulDiv(header.rclFrame.left, horz_res, horz_size * 100);
|
||||||
|
break;
|
||||||
|
case MM_LOMETRIC:
|
||||||
|
pt.y = MulDiv(-header.rclFrame.top, 1, 10) + 1;
|
||||||
|
pt.x = MulDiv( header.rclFrame.left, 1, 10);
|
||||||
|
break;
|
||||||
|
case MM_HIMETRIC:
|
||||||
|
pt.y = -header.rclFrame.top + 1;
|
||||||
|
pt.x = header.rclFrame.left;
|
||||||
|
break;
|
||||||
|
case MM_LOENGLISH:
|
||||||
|
pt.y = MulDiv(-header.rclFrame.top, 10, 254) + 1;
|
||||||
|
pt.x = MulDiv( header.rclFrame.left, 10, 254);
|
||||||
|
break;
|
||||||
|
case MM_HIENGLISH:
|
||||||
|
pt.y = MulDiv(-header.rclFrame.top, 100, 254) + 1;
|
||||||
|
pt.x = MulDiv( header.rclFrame.left, 100, 254);
|
||||||
|
break;
|
||||||
|
case MM_TWIPS:
|
||||||
|
pt.y = MulDiv(-header.rclFrame.top, 72 * 20, 2540) + 1;
|
||||||
|
pt.x = MulDiv( header.rclFrame.left, 72 * 20, 2540);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
WARN("Unknown map mode %d\n", map_mode);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
SetWindowOrgEx(hdc, pt.x, pt.y, NULL);
|
||||||
|
|
||||||
|
pt.x = MulDiv(header.rclFrame.right - header.rclFrame.left, horz_res, horz_size * 100);
|
||||||
|
pt.y = MulDiv(header.rclFrame.bottom - header.rclFrame.top, vert_res, vert_size * 100);
|
||||||
|
SetWindowExtEx(hdc, pt.x, pt.y, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* GetWinMetaFileBits [GDI32.@]
|
* GetWinMetaFileBits [GDI32.@]
|
||||||
*/
|
*/
|
||||||
UINT WINAPI GetWinMetaFileBits(HENHMETAFILE hemf,
|
UINT WINAPI GetWinMetaFileBits(HENHMETAFILE hemf,
|
||||||
UINT cbBuffer, LPBYTE lpbBuffer,
|
UINT cbBuffer, LPBYTE lpbBuffer,
|
||||||
INT fnMapMode, HDC hdcRef)
|
INT map_mode, HDC hdcRef)
|
||||||
{
|
{
|
||||||
HDC hdcmf;
|
HDC hdcmf;
|
||||||
HMETAFILE hmf;
|
HMETAFILE hmf;
|
||||||
|
@ -1237,11 +1297,14 @@ UINT WINAPI GetWinMetaFileBits(HENHMETAFILE hemf,
|
||||||
GetClipBox(hdcRef, &rc);
|
GetClipBox(hdcRef, &rc);
|
||||||
|
|
||||||
TRACE("(%p,%d,%p,%d,%p) rc=%s\n", hemf, cbBuffer, lpbBuffer,
|
TRACE("(%p,%d,%p,%d,%p) rc=%s\n", hemf, cbBuffer, lpbBuffer,
|
||||||
fnMapMode, hdcRef, wine_dbgstr_rect(&rc));
|
map_mode, hdcRef, wine_dbgstr_rect(&rc));
|
||||||
|
|
||||||
hdcmf = CreateMetaFileW(NULL);
|
hdcmf = CreateMetaFileW(NULL);
|
||||||
|
|
||||||
add_mf_comment(hdcmf, hemf);
|
add_mf_comment(hdcmf, hemf);
|
||||||
|
SetMapMode(hdcmf, map_mode);
|
||||||
|
if(!set_window(hdcmf, hemf, hdcRef, map_mode))
|
||||||
|
goto error;
|
||||||
|
|
||||||
PlayEnhMetaFile(hdcmf, hemf, &rc);
|
PlayEnhMetaFile(hdcmf, hemf, &rc);
|
||||||
hmf = CloseMetaFile(hdcmf);
|
hmf = CloseMetaFile(hdcmf);
|
||||||
|
@ -1260,6 +1323,10 @@ UINT WINAPI GetWinMetaFileBits(HENHMETAFILE hemf,
|
||||||
comment_rec->rdParm[8] = ~checksum + 1;
|
comment_rec->rdParm[8] = ~checksum + 1;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
error:
|
||||||
|
DeleteMetaFile(CloseMetaFile(hdcmf));
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
|
|
Loading…
Reference in New Issue