Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers gdiplusmetafile.h Source File

gdiplusmetafile.h

00001 /*
00002  * gdiplusmetafile.h
00003  *
00004  * GDI+ Metafile class
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Markus Koenig <markus@stber-koenig.de>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __GDIPLUS_METAFILE_H
00024 #define __GDIPLUS_METAFILE_H
00025 #if __GNUC__ >=3
00026 #pragma GCC system_header
00027 #endif
00028 
00029 #ifndef __cplusplus
00030 #error "A C++ compiler is required to include gdiplusmetafile.h."
00031 #endif
00032 
00033 class Metafile: public Image
00034 {
00035 public:
00036     static UINT EmfToWmfBits(HENHMETAFILE hEmf,
00037             UINT cbData16, LPBYTE pData16,
00038             INT iMapMode = MM_ANISOTROPIC,
00039             EmfToWmfBitsFlags eFlags = EmfToWmfBitsFlagsDefault)
00040     {
00041         return DllExports::GdipEmfToWmfBits(hEmf,
00042                 cbData16, pData16, iMapMode, eFlags);
00043     }
00044     static Status GetMetafileHeader(const WCHAR *filename,
00045             MetafileHeader *header)
00046     {
00047         return DllExports::GdipGetMetafileHeaderFromFile(
00048                 filename, header);
00049     }
00050     static Status GetMetafileHeader(IStream *stream, MetafileHeader *header)
00051     {
00052         return DllExports::GdipGetMetafileHeaderFromStream(
00053                 stream, header);
00054     }
00055     ////TODO: Metafile::GetMetafileHeader
00056     //static Status GetMetafileHeader(HMETAFILE hWmf,
00057     //      const WmfPlaceableFileHeader *wmfPlaceableFileHeader,
00058     //      MetafileHeader *header)
00059     //{
00060     //  // WTF: No flat API to do this.
00061     //  return NotImplemented;
00062     //}
00063     static Status GetMetafileHeader(HENHMETAFILE hEmf,
00064             MetafileHeader *header)
00065     {
00066         return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header);
00067     }
00068 
00069     Metafile(HMETAFILE hWmf,
00070             const WmfPlaceableFileHeader *wmfPlaceableFileHeader,
00071             BOOL deleteWmf = FALSE): Image(NULL, Ok)
00072     {
00073         GpMetafile *nativeMetafile = NULL;
00074         lastStatus = DllExports::GdipCreateMetafileFromWmf(
00075                 hWmf, deleteWmf, wmfPlaceableFileHeader,
00076                 &nativeMetafile);
00077         nativeImage = nativeMetafile;
00078     }
00079     Metafile(HENHMETAFILE hEmf, BOOL deleteEmf = FALSE): Image(NULL, Ok)
00080     {
00081         GpMetafile *nativeMetafile = NULL;
00082         lastStatus = DllExports::GdipCreateMetafileFromEmf(
00083                 hEmf, deleteEmf, &nativeMetafile);
00084         nativeImage = nativeMetafile;
00085     }
00086     Metafile(const WCHAR *filename): Image(NULL, Ok)
00087     {
00088         GpMetafile *nativeMetafile = NULL;
00089         lastStatus = DllExports::GdipCreateMetafileFromFile(
00090                 filename, &nativeMetafile);
00091         nativeImage = nativeMetafile;
00092     }
00093     Metafile(const WCHAR *filename,
00094             const WmfPlaceableFileHeader *wmfPlaceableFileHeader):
00095             Image(NULL, Ok)
00096     {
00097         GpMetafile *nativeMetafile = NULL;
00098         lastStatus = DllExports::GdipCreateMetafileFromWmfFile(
00099                 filename, wmfPlaceableFileHeader,
00100                 &nativeMetafile);
00101         nativeImage = nativeMetafile;
00102     }
00103     Metafile(IStream *stream): Image(NULL, Ok)
00104     {
00105         GpMetafile *nativeMetafile = NULL;
00106         lastStatus = DllExports::GdipCreateMetafileFromStream(
00107                 stream, &nativeMetafile);
00108         nativeImage = nativeMetafile;
00109     }
00110     Metafile(HDC referenceHdc, EmfType type = EmfTypeEmfPlusDual,
00111             const WCHAR *description = NULL): Image(NULL, Ok)
00112     {
00113         GpMetafile *nativeMetafile = NULL;
00114         lastStatus = DllExports::GdipRecordMetafile(
00115                 referenceHdc, type, NULL, MetafileFrameUnitGdi,
00116                 description, &nativeMetafile);
00117         nativeImage = nativeMetafile;
00118     }
00119     Metafile(HDC referenceHdc, const RectF& frameRect,
00120             MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
00121             EmfType type = EmfTypeEmfPlusDual,
00122             const WCHAR *description = NULL): Image(NULL, Ok)
00123     {
00124         GpMetafile *nativeMetafile = NULL;
00125         lastStatus = DllExports::GdipRecordMetafile(
00126                 referenceHdc, type, &frameRect, frameUnit,
00127                 description, &nativeMetafile);
00128         nativeImage = nativeMetafile;
00129     }
00130     Metafile(HDC referenceHdc, const Rect& frameRect,
00131             MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
00132             EmfType type = EmfTypeEmfPlusDual,
00133             const WCHAR *description = NULL): Image(NULL, Ok)
00134     {
00135         GpMetafile *nativeMetafile = NULL;
00136         lastStatus = DllExports::GdipRecordMetafileI(
00137                 referenceHdc, type, &frameRect, frameUnit,
00138                 description, &nativeMetafile);
00139         nativeImage = nativeMetafile;
00140     }
00141     Metafile(const WCHAR *filename, HDC referenceHdc,
00142             EmfType type = EmfTypeEmfPlusDual,
00143             const WCHAR *description = NULL): Image(NULL, Ok)
00144     {
00145         GpMetafile *nativeMetafile = NULL;
00146         lastStatus = DllExports::GdipRecordMetafileFileName(
00147                 filename, referenceHdc, type, NULL,
00148                 MetafileFrameUnitGdi, description,
00149                 &nativeMetafile);
00150         nativeImage = nativeMetafile;
00151     }
00152     Metafile(const WCHAR *filename, HDC referenceHdc,
00153             const RectF& frameRect,
00154             MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
00155             EmfType type = EmfTypeEmfPlusDual,
00156             const WCHAR *description = NULL): Image(NULL, Ok)
00157     {
00158         GpMetafile *nativeMetafile = NULL;
00159         lastStatus = DllExports::GdipRecordMetafileFileName(
00160                 filename, referenceHdc, type, &frameRect,
00161                 frameUnit, description, &nativeMetafile);
00162         nativeImage = nativeMetafile;
00163     }
00164     Metafile(const WCHAR *filename, HDC referenceHdc,
00165             const Rect& frameRect,
00166             MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
00167             EmfType type = EmfTypeEmfPlusDual,
00168             const WCHAR *description = NULL): Image(NULL, Ok)
00169     {
00170         GpMetafile *nativeMetafile = NULL;
00171         lastStatus = DllExports::GdipRecordMetafileFileNameI(
00172                 filename, referenceHdc, type, &frameRect,
00173                 frameUnit, description, &nativeMetafile);
00174         nativeImage = nativeMetafile;
00175     }
00176     Metafile(IStream *stream, HDC referenceHdc,
00177             EmfType type = EmfTypeEmfPlusDual,
00178             const WCHAR *description = NULL): Image(NULL, Ok)
00179     {
00180         GpMetafile *nativeMetafile = NULL;
00181         lastStatus = DllExports::GdipRecordMetafileStream(
00182                 stream, referenceHdc, type, NULL,
00183                 MetafileFrameUnitGdi, description,
00184                 &nativeMetafile);
00185         nativeImage = nativeMetafile;
00186     }
00187     Metafile(IStream *stream, HDC referenceHdc, const RectF& frameRect,
00188             MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
00189             EmfType type = EmfTypeEmfPlusDual,
00190             const WCHAR *description = NULL): Image(NULL, Ok)
00191     {
00192         GpMetafile *nativeMetafile = NULL;
00193         lastStatus = DllExports::GdipRecordMetafileStream(
00194                 stream, referenceHdc, type, &frameRect,
00195                 frameUnit, description, &nativeMetafile);
00196         nativeImage = nativeMetafile;
00197     }
00198     Metafile(IStream *stream, HDC referenceHdc, const Rect& frameRect,
00199             MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
00200             EmfType type = EmfTypeEmfPlusDual,
00201             const WCHAR *description = NULL): Image(NULL, Ok)
00202     {
00203         GpMetafile *nativeMetafile = NULL;
00204         lastStatus = DllExports::GdipRecordMetafileStreamI(
00205                 stream, referenceHdc, type, &frameRect,
00206                 frameUnit, description, &nativeMetafile);
00207         nativeImage = nativeMetafile;
00208     }
00209     virtual ~Metafile()
00210     {
00211     }
00212     virtual Metafile* Clone() const
00213     {
00214         GpImage *cloneImage = NULL;
00215         Status status = updateStatus(DllExports::GdipCloneImage(
00216                 nativeImage, &cloneImage));
00217         if (status == Ok) {
00218             Metafile *result = new Metafile(cloneImage, lastStatus);
00219             if (!result) {
00220                 DllExports::GdipDisposeImage(cloneImage);
00221                 lastStatus = OutOfMemory;
00222             }
00223             return result;
00224         } else {
00225             return NULL;
00226         }
00227     }
00228 
00229     ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
00230     //Status ConvertToEmfPlus(const Graphics *refGraphics,
00231     //      BOOL *conversionSuccess = NULL,
00232     //      EmfType emfType = EmfTypeEmfPlusOnly,
00233     //      const WCHAR *description = NULL)
00234     //{
00235     //  // FIXME: can't test GdipConvertToEmfPlus because it isn't exported in 1.0
00236     //  return updateStatus(DllExports::GdipConvertToEmfPlus(
00237     //          refGraphics ? refGraphics->nativeGraphics : NULL,
00238     //          (GpMetafile*) nativeImage,
00239     //          conversionSuccess, emfType, description, ???));
00240     //}
00241     ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
00242     //Status ConvertToEmfPlus(const Graphics *refGraphics,
00243     //      const WCHAR *filename,
00244     //      BOOL *conversionSuccess = NULL,
00245     //      EmfType emfType = EmfTypeEmfPlusOnly,
00246     //      const WCHAR *description = NULL)
00247     //{
00248     //  // FIXME: can't test GdipConvertToEmfPlusToFile because it isn't exported in 1.0
00249     //  return updateStatus(DllExports::GdipConvertToEmfPlusToFile(
00250     //          refGraphics ? refGraphics->nativeGraphics : NULL,
00251     //          (GpMetafile*) nativeImage, conversionSuccess,
00252     //          filename, emfType, description, ???));
00253     //}
00254     ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
00255     //Status ConvertToEmfPlus(const Graphics *refGraphics,
00256     //      IStream *stream,
00257     //      BOOL *conversionSuccess = NULL,
00258     //      EmfType emfType = EmfTypeEmfPlusOnly,
00259     //      const WCHAR *description = NULL)
00260     //{
00261     //  // FIXME: can't test GdipConvertToEmfPlusToStream because it isn't exported in 1.0
00262     //  return updateStatus(DllExports::GdipConvertToEmfPlusToStream(
00263     //          refGraphics ? refGraphics->nativeGraphics : NULL,
00264     //          (GpMetafile*) nativeImage, conversionSuccess,
00265     //          stream, emfType, description, ???));
00266     //}
00267     UINT GetDownLevelRasterizationLimit() const
00268     {
00269         UINT result = 0;
00270         updateStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit(
00271                 (GpMetafile*) nativeImage, &result));
00272         return result;
00273     }
00274     HENHMETAFILE GetHENHMETAFILE()
00275     {
00276         HENHMETAFILE result = NULL;
00277         updateStatus(DllExports::GdipGetHemfFromMetafile(
00278                 (GpMetafile*) nativeImage, &result));
00279         return result;
00280     }
00281     Status GetMetafileHeader(MetafileHeader *header) const
00282     {
00283         return updateStatus(DllExports::GdipGetMetafileHeaderFromMetafile(
00284                 (GpMetafile*) nativeImage, header));
00285     }
00286     Status PlayRecord(EmfPlusRecordType recordType, UINT flags,
00287             UINT dataSize, const BYTE *data) const
00288     {
00289         return updateStatus(DllExports::GdipPlayMetafileRecord(
00290                 (GpMetafile*) nativeImage,
00291                 recordType, flags, dataSize, data));
00292     }
00293     Status SetDownLevelRasterizationLimit(UINT limitDpi)
00294     {
00295         return updateStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit(
00296                 (GpMetafile*) nativeImage, limitDpi));
00297     }
00298 
00299 private:
00300     Metafile(GpImage *image, Status status): Image(image, status) {}
00301     Metafile(const Metafile&);
00302     Metafile& operator=(const Metafile&);
00303 };
00304 
00305 #endif /* __GDIPLUS_METAFILE_H */