1 #include <precomp.h> 2 3 #define NDEBUG 4 #include <debug.h> 5 6 /* 7 * @unimplemented 8 */ 9 BOOL 10 WINAPI 11 IsValidEnhMetaRecord( 12 PVOID pv0, 13 PVOID pv1) 14 { 15 UNIMPLEMENTED; 16 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 17 return FALSE; 18 } 19 20 /* 21 * @unimplemented 22 */ 23 BOOL 24 WINAPI 25 IsValidEnhMetaRecordOffExt( 26 PVOID pv0, 27 PVOID pv1, 28 DWORD dwOffset, 29 DWORD dwExtends ) 30 { 31 UNIMPLEMENTED; 32 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 33 return FALSE; 34 } 35 36 /* 37 * @implemented 38 */ 39 HANDLE 40 WINAPI 41 GdiConvertEnhMetaFile(HENHMETAFILE hemf) 42 { 43 HANDLE hmo = NULL; 44 BYTE * Buffer = NULL; 45 UINT nSize; 46 47 nSize = GetEnhMetaFileBits( hemf, 0, NULL ); 48 if (nSize == 0) 49 goto Exit; 50 51 // allocate buffer 52 Buffer = (BYTE *)LocalAlloc(LPTR, nSize); 53 if (Buffer == NULL) 54 goto Exit; 55 56 nSize = GetEnhMetaFileBits( hemf, nSize, Buffer ); 57 if (nSize == 0) 58 goto Exit; 59 60 hmo = NtGdiCreateServerMetaFile( GDITAG_TYPE_EMF, nSize, Buffer, 0, 0, 0 ); 61 62 Exit: 63 // clean up 64 if (Buffer) 65 LocalFree(Buffer); 66 return hmo; 67 } 68 69 /* 70 * @implemented 71 */ 72 HENHMETAFILE 73 WINAPI 74 GdiCreateLocalEnhMetaFile(HANDLE hmo) 75 { 76 HENHMETAFILE hEMF; 77 BYTE * Buffer = NULL; 78 UINT nSize; 79 DWORD iType, mm, xExt, yExt; 80 81 nSize = NtGdiGetServerMetaFileBits( hmo, 0, NULL, NULL, NULL, NULL, NULL); 82 if (nSize == 0) 83 goto Exit; 84 85 // allocate buffer 86 Buffer = (BYTE *)LocalAlloc(LPTR, nSize); 87 if (Buffer == NULL) 88 goto Exit; 89 90 // store to buffer 91 nSize = NtGdiGetServerMetaFileBits( hmo, nSize, Buffer, &iType, &mm, &xExt, &yExt); 92 if (nSize == 0) 93 goto Exit; 94 95 if ( iType == GDITAG_TYPE_MFP ) // handle conversion to EMF 96 { 97 METAFILEPICT Info; 98 99 Info.hMF = NULL; 100 Info.mm = mm; 101 Info.xExt = xExt; 102 Info.yExt = yExt; 103 104 hEMF = SetWinMetaFileBits( nSize, Buffer, NULL, &Info ); // Translate from old style to new style. 105 if (hEMF == NULL) 106 goto Exit; 107 } 108 else 109 { 110 hEMF = SetEnhMetaFileBits(nSize, Buffer); 111 if (hEMF == NULL) 112 goto Exit; 113 } 114 115 Exit: 116 // clean up 117 if (Buffer) 118 LocalFree(Buffer); 119 return hEMF; 120 } 121 122 /* 123 * @implemented 124 */ 125 BOOL 126 WINAPI 127 GdiComment( 128 _In_ HDC hdc, 129 _In_ UINT cbSize, 130 _In_ const BYTE *lpData) 131 { 132 if (GDI_HANDLE_GET_TYPE(hdc) != GDILoObjType_LO_ALTDC_TYPE) 133 return TRUE; 134 135 return EMFDC_GdiComment( hdc, cbSize, lpData ); 136 } 137 138 /* 139 * @implemented 140 */ 141 UINT 142 WINAPI 143 GetEnhMetaFilePixelFormat( 144 HENHMETAFILE hemf, 145 UINT cbBuffer, 146 PIXELFORMATDESCRIPTOR *ppfd ) 147 { 148 ENHMETAHEADER pemh; 149 150 if(GetEnhMetaFileHeader(hemf, sizeof(ENHMETAHEADER), &pemh)) 151 { 152 if(pemh.bOpenGL) 153 { 154 if(pemh.cbPixelFormat) 155 { 156 memcpy((void*)ppfd, UlongToPtr(pemh.offPixelFormat), cbBuffer ); 157 return(pemh.cbPixelFormat); 158 } 159 } 160 } 161 return(0); 162 } 163