mirror of
https://github.com/reactos/reactos.git
synced 2026-06-04 10:20:48 +08:00
[NtUser] Fix Clipboard Synthesized Returns
Add supported for Meta file synthesized renderings. See CORE-12143.
This commit is contained in:
@@ -290,7 +290,7 @@ cleanup:
|
||||
static VOID NTAPI
|
||||
IntAddSynthesizedFormats(PWINSTATION_OBJECT pWinStaObj)
|
||||
{
|
||||
BOOL bHaveText, bHaveUniText, bHaveOemText, bHaveLocale, bHaveBm, bHaveDib;
|
||||
BOOL bHaveText, bHaveUniText, bHaveOemText, bHaveLocale, bHaveBm, bHaveDib, bHaveMFP, bHaveEMF;
|
||||
|
||||
bHaveText = IntIsFormatAvailable(pWinStaObj, CF_TEXT);
|
||||
bHaveOemText = IntIsFormatAvailable(pWinStaObj, CF_OEMTEXT);
|
||||
@@ -298,6 +298,8 @@ IntAddSynthesizedFormats(PWINSTATION_OBJECT pWinStaObj)
|
||||
bHaveLocale = IntIsFormatAvailable(pWinStaObj, CF_LOCALE);
|
||||
bHaveBm = IntIsFormatAvailable(pWinStaObj, CF_BITMAP);
|
||||
bHaveDib = IntIsFormatAvailable(pWinStaObj, CF_DIB);
|
||||
bHaveMFP = IntIsFormatAvailable(pWinStaObj, CF_METAFILEPICT);
|
||||
bHaveEMF = IntIsFormatAvailable(pWinStaObj, CF_ENHMETAFILE);
|
||||
|
||||
/* Add CF_LOCALE format if we have CF_TEXT, CF_OEMTEXT or CF_UNICODETEXT */
|
||||
if (!bHaveLocale && (bHaveText || bHaveOemText || bHaveUniText))
|
||||
@@ -334,6 +336,14 @@ IntAddSynthesizedFormats(PWINSTATION_OBJECT pWinStaObj)
|
||||
if (!bHaveBm && bHaveDib)
|
||||
IntAddFormatedData(pWinStaObj, CF_BITMAP, DATA_SYNTH_KRNL, FALSE, TRUE);
|
||||
|
||||
/* Add CF_ENHMETAFILE. Note: it is synthesized in gdi32.dll */
|
||||
if (bHaveMFP && !bHaveEMF)
|
||||
IntAddFormatedData(pWinStaObj, CF_ENHMETAFILE, DATA_SYNTH_USER, FALSE, TRUE);
|
||||
|
||||
/* Add CF_METAFILEPICT. Note: it is synthesized in gdi32.dll */
|
||||
if (bHaveEMF && !bHaveMFP)
|
||||
IntAddFormatedData(pWinStaObj, CF_METAFILEPICT, DATA_SYNTH_USER, FALSE, TRUE);
|
||||
|
||||
/* Note: We need to render the DIB or DIBV5 format as soon as possible
|
||||
because pallette information may change */
|
||||
if (!bHaveDib && bHaveBm)
|
||||
@@ -934,6 +944,16 @@ NtUserGetClipboardData(UINT fmt, PGETCLIPBDATA pgcd)
|
||||
IntSynthesizeBitmap(pWinStaObj, pElement);
|
||||
break;
|
||||
|
||||
case CF_METAFILEPICT:
|
||||
uSourceFmt = CF_ENHMETAFILE;
|
||||
pElement = IntGetFormatElement(pWinStaObj, uSourceFmt);
|
||||
break;
|
||||
|
||||
case CF_ENHMETAFILE:
|
||||
uSourceFmt = CF_METAFILEPICT;
|
||||
pElement = IntGetFormatElement(pWinStaObj, uSourceFmt);
|
||||
break;
|
||||
|
||||
default:
|
||||
ASSERT(FALSE);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user