123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- /*
- * gdiplusmetafile.h
- *
- * GDI+ Metafile class
- *
- * This file is part of the w32api package.
- *
- * Contributors:
- * Created by Markus Koenig <markus@stber-koenig.de>
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
- #ifndef __GDIPLUS_METAFILE_H
- #define __GDIPLUS_METAFILE_H
- #if __GNUC__ >=3
- #pragma GCC system_header
- #endif
- #ifndef __cplusplus
- #error "A C++ compiler is required to include gdiplusmetafile.h."
- #endif
- class Metafile: public Image
- {
- public:
- static UINT EmfToWmfBits(HENHMETAFILE hEmf,
- UINT cbData16, LPBYTE pData16,
- INT iMapMode = MM_ANISOTROPIC,
- EmfToWmfBitsFlags eFlags = EmfToWmfBitsFlagsDefault)
- {
- return DllExports::GdipEmfToWmfBits(hEmf,
- cbData16, pData16, iMapMode, eFlags);
- }
- static Status GetMetafileHeader(const WCHAR *filename,
- MetafileHeader *header)
- {
- return DllExports::GdipGetMetafileHeaderFromFile(
- filename, header);
- }
- static Status GetMetafileHeader(IStream *stream, MetafileHeader *header)
- {
- return DllExports::GdipGetMetafileHeaderFromStream(
- stream, header);
- }
- ////TODO: Metafile::GetMetafileHeader
- //static Status GetMetafileHeader(HMETAFILE hWmf,
- // const WmfPlaceableFileHeader *wmfPlaceableFileHeader,
- // MetafileHeader *header)
- //{
- // // WTF: No flat API to do this.
- // return NotImplemented;
- //}
- static Status GetMetafileHeader(HENHMETAFILE hEmf,
- MetafileHeader *header)
- {
- return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header);
- }
- Metafile(HMETAFILE hWmf,
- const WmfPlaceableFileHeader *wmfPlaceableFileHeader,
- BOOL deleteWmf = FALSE): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipCreateMetafileFromWmf(
- hWmf, deleteWmf, wmfPlaceableFileHeader,
- &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(HENHMETAFILE hEmf, BOOL deleteEmf = FALSE): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipCreateMetafileFromEmf(
- hEmf, deleteEmf, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(const WCHAR *filename): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipCreateMetafileFromFile(
- filename, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(const WCHAR *filename,
- const WmfPlaceableFileHeader *wmfPlaceableFileHeader):
- Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipCreateMetafileFromWmfFile(
- filename, wmfPlaceableFileHeader,
- &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(IStream *stream): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipCreateMetafileFromStream(
- stream, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(HDC referenceHdc, EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafile(
- referenceHdc, type, NULL, MetafileFrameUnitGdi,
- description, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(HDC referenceHdc, const RectF& frameRect,
- MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
- EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafile(
- referenceHdc, type, &frameRect, frameUnit,
- description, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(HDC referenceHdc, const Rect& frameRect,
- MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
- EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafileI(
- referenceHdc, type, &frameRect, frameUnit,
- description, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(const WCHAR *filename, HDC referenceHdc,
- EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafileFileName(
- filename, referenceHdc, type, NULL,
- MetafileFrameUnitGdi, description,
- &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(const WCHAR *filename, HDC referenceHdc,
- const RectF& frameRect,
- MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
- EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafileFileName(
- filename, referenceHdc, type, &frameRect,
- frameUnit, description, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(const WCHAR *filename, HDC referenceHdc,
- const Rect& frameRect,
- MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
- EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafileFileNameI(
- filename, referenceHdc, type, &frameRect,
- frameUnit, description, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(IStream *stream, HDC referenceHdc,
- EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafileStream(
- stream, referenceHdc, type, NULL,
- MetafileFrameUnitGdi, description,
- &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(IStream *stream, HDC referenceHdc, const RectF& frameRect,
- MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
- EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafileStream(
- stream, referenceHdc, type, &frameRect,
- frameUnit, description, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- Metafile(IStream *stream, HDC referenceHdc, const Rect& frameRect,
- MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
- EmfType type = EmfTypeEmfPlusDual,
- const WCHAR *description = NULL): Image(NULL, Ok)
- {
- GpMetafile *nativeMetafile = NULL;
- lastStatus = DllExports::GdipRecordMetafileStreamI(
- stream, referenceHdc, type, &frameRect,
- frameUnit, description, &nativeMetafile);
- nativeImage = nativeMetafile;
- }
- virtual ~Metafile()
- {
- }
- virtual Metafile* Clone() const
- {
- GpImage *cloneImage = NULL;
- Status status = updateStatus(DllExports::GdipCloneImage(
- nativeImage, &cloneImage));
- if (status == Ok) {
- Metafile *result = new Metafile(cloneImage, lastStatus);
- if (!result) {
- DllExports::GdipDisposeImage(cloneImage);
- lastStatus = OutOfMemory;
- }
- return result;
- } else {
- return NULL;
- }
- }
- ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
- //Status ConvertToEmfPlus(const Graphics *refGraphics,
- // BOOL *conversionSuccess = NULL,
- // EmfType emfType = EmfTypeEmfPlusOnly,
- // const WCHAR *description = NULL)
- //{
- // // FIXME: can't test GdipConvertToEmfPlus because it isn't exported in 1.0
- // return updateStatus(DllExports::GdipConvertToEmfPlus(
- // refGraphics ? refGraphics->nativeGraphics : NULL,
- // (GpMetafile*) nativeImage,
- // conversionSuccess, emfType, description, ???));
- //}
- ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
- //Status ConvertToEmfPlus(const Graphics *refGraphics,
- // const WCHAR *filename,
- // BOOL *conversionSuccess = NULL,
- // EmfType emfType = EmfTypeEmfPlusOnly,
- // const WCHAR *description = NULL)
- //{
- // // FIXME: can't test GdipConvertToEmfPlusToFile because it isn't exported in 1.0
- // return updateStatus(DllExports::GdipConvertToEmfPlusToFile(
- // refGraphics ? refGraphics->nativeGraphics : NULL,
- // (GpMetafile*) nativeImage, conversionSuccess,
- // filename, emfType, description, ???));
- //}
- ////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
- //Status ConvertToEmfPlus(const Graphics *refGraphics,
- // IStream *stream,
- // BOOL *conversionSuccess = NULL,
- // EmfType emfType = EmfTypeEmfPlusOnly,
- // const WCHAR *description = NULL)
- //{
- // // FIXME: can't test GdipConvertToEmfPlusToStream because it isn't exported in 1.0
- // return updateStatus(DllExports::GdipConvertToEmfPlusToStream(
- // refGraphics ? refGraphics->nativeGraphics : NULL,
- // (GpMetafile*) nativeImage, conversionSuccess,
- // stream, emfType, description, ???));
- //}
- UINT GetDownLevelRasterizationLimit() const
- {
- UINT result = 0;
- updateStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit(
- (GpMetafile*) nativeImage, &result));
- return result;
- }
- HENHMETAFILE GetHENHMETAFILE()
- {
- HENHMETAFILE result = NULL;
- updateStatus(DllExports::GdipGetHemfFromMetafile(
- (GpMetafile*) nativeImage, &result));
- return result;
- }
- Status GetMetafileHeader(MetafileHeader *header) const
- {
- return updateStatus(DllExports::GdipGetMetafileHeaderFromMetafile(
- (GpMetafile*) nativeImage, header));
- }
- Status PlayRecord(EmfPlusRecordType recordType, UINT flags,
- UINT dataSize, const BYTE *data) const
- {
- return updateStatus(DllExports::GdipPlayMetafileRecord(
- (GpMetafile*) nativeImage,
- recordType, flags, dataSize, data));
- }
- Status SetDownLevelRasterizationLimit(UINT limitDpi)
- {
- return updateStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit(
- (GpMetafile*) nativeImage, limitDpi));
- }
- private:
- Metafile(GpImage *image, Status status): Image(image, status) {}
- Metafile(const Metafile&);
- Metafile& operator=(const Metafile&);
- };
- #endif /* __GDIPLUS_METAFILE_H */
|