Added support for alternate DIBBITBLT layout.

This commit is contained in:
Caolan McNamara 1999-03-13 12:47:36 +00:00 committed by Alexandre Julliard
parent 006efb357f
commit 8e5e588b8e
1 changed files with 24 additions and 6 deletions

View File

@ -906,6 +906,17 @@ void WINAPI PlayMetaFileRecord16(
break; break;
case META_DIBBITBLT: case META_DIBBITBLT:
{
/*In practice ive found that theres two layout for META_DIBBITBLT,
one (the first here) is the usual one when a src dc is actually passed
int, the second occurs when the src dc is passed in as NULL to
the creating BitBlt.
as the second case has no dib, a size check will suffice to distinguish.
Caolan.McNamara@ul.ie
*/
if (mr->rdSize > 12)
{ {
LPBITMAPINFO info = (LPBITMAPINFO) &(mr->rdParm[8]); LPBITMAPINFO info = (LPBITMAPINFO) &(mr->rdParm[8]);
LPSTR bits = (LPSTR)info + DIB_BitmapInfoSize( info, mr->rdParm[0] ); LPSTR bits = (LPSTR)info + DIB_BitmapInfoSize( info, mr->rdParm[0] );
@ -914,6 +925,13 @@ void WINAPI PlayMetaFileRecord16(
mr->rdParm[5],mr->rdParm[4],bits,info, mr->rdParm[5],mr->rdParm[4],bits,info,
DIB_RGB_COLORS,MAKELONG(mr->rdParm[0],mr->rdParm[1])); DIB_RGB_COLORS,MAKELONG(mr->rdParm[0],mr->rdParm[1]));
} }
else /*equivalent to a PatBlt*/
{
PatBlt16(hdc, mr->rdParm[8], mr->rdParm[7],
mr->rdParm[6], mr->rdParm[5],
MAKELONG(*(mr->rdParm), *(mr->rdParm + 1)));
}
}
break; break;
case META_SETTEXTCHAREXTRA: case META_SETTEXTCHAREXTRA: