1 /* 2 * Copyright (C) 2007 Novell, Inc (http://www.novell.com) 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 5 * and associated documentation files (the "Software"), to deal in the Software without restriction, 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 8 * subject to the following conditions: 9 * 10 * The above copyright notice and this permission notice shall be included in all copies or substantial 11 * portions of the Software. 12 * 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 14 * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 15 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 16 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 17 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 * 19 * Authors: 20 * Sebastien Pouliot <sebastien@ximian.com> 21 */ 22 23 #ifndef __METAFILE_PRIVATE_H__ 24 #define __METAFILE_PRIVATE_H__ 25 26 #include "gdiplus-private.h" 27 #include "codecs-private.h" 28 #include "bitmap-private.h" 29 #include "matrix-private.h" 30 #include "bmpcodec.h" 31 #include "emfcodec.h" 32 #include "wmfcodec.h" 33 34 /* 35 * http://wvware.sourceforge.net/caolan/ora-wmf.html 36 */ 37 38 #define ALDUS_PLACEABLE_METAFILE_KEY 0x9AC6CDD7 39 #define WMF_TYPE_AND_HEADERSIZE_KEY 0x00090001 40 #define EMF_EMR_HEADER_KEY 0x1 41 42 #define MM_PER_INCH 25.4f 43 44 /* object types */ 45 #define METAOBJECT_TYPE_EMPTY 0 46 #define METAOBJECT_TYPE_PEN 1 47 #define METAOBJECT_TYPE_BRUSH 2 48 49 #define gdip_get_metaheader(image) (&((GpMetafile*)image)->metafile_header) 50 51 #if G_BYTE_ORDER == G_LITTLE_ENDIAN 52 #define GETDW(x) (*(DWORD*)(data + (x))) 53 #else 54 #define GETDW(x) (GUINT32_FROM_LE(*(DWORD*)(data + (x)))) 55 #endif 56 57 typedef struct { 58 void *ptr; 59 int type; 60 } MetaObject; 61 62 struct _Metafile { 63 GpImage base; 64 MetafileHeader metafile_header; 65 BOOL delete; 66 BYTE *data; 67 int length; 68 BOOL recording; /* recording into memory (data), file (fp) or user stream (stream) */ 69 FILE *fp; 70 void *stream; 71 }; 72 73 typedef struct { 74 GpMetafile *metafile; 75 int x, y, width, height; 76 int objects_count; 77 MetaObject *objects; 78 MetaObject created; 79 GpGraphics *graphics; 80 GpMatrix initial; 81 GpMatrix matrix; 82 DWORD bk_mode; 83 DWORD bk_color; 84 float miter_limit; 85 int selected_pen; 86 int selected_brush; 87 int selected_font; 88 int selected_palette; 89 int map_mode; 90 FillMode fill_mode; 91 int current_x, current_y; 92 /* path related data */ 93 BOOL use_path; 94 GpPath *path; 95 int path_x, path_y; 96 /* stock objects */ 97 GpPen *stock_pen_white; 98 GpPen *stock_pen_black; 99 GpPen *stock_pen_null; 100 GpSolidFill *stock_brush_white; 101 GpSolidFill *stock_brush_ltgray; 102 GpSolidFill *stock_brush_gray; 103 GpSolidFill *stock_brush_dkgray; 104 GpSolidFill *stock_brush_black; 105 GpSolidFill *stock_brush_null; 106 /* bitmap representation */ 107 BYTE *scan0; 108 } MetafilePlayContext; 109 110 typedef struct { 111 int num; 112 GpPointF *points; 113 } PointFList; 114 115 typedef struct { 116 DWORD cbPixelFormat; 117 DWORD offPixelFormat; 118 DWORD bOpenGL; 119 } HeaderExtension1; 120 121 GpStatus gdip_get_metafile_from (void *pointer, GpMetafile **metafile, ImageSource source) GDIP_INTERNAL; 122 GpStatus gdip_metafile_clone (GpMetafile *metafile, GpMetafile **clonedmetafile) GDIP_INTERNAL; 123 GpStatus gdip_metafile_dispose (GpMetafile *metafile) GDIP_INTERNAL; 124 125 GpStatus gdip_get_bitmap_from_metafile (GpMetafile *metafile, INT width, INT height, GpImage **thumbnail) GDIP_INTERNAL; 126 127 GpStatus gdip_metafile_stop_recording (GpMetafile *metafile) GDIP_INTERNAL; 128 129 GpStatus gdip_metafile_play_emf (MetafilePlayContext *context) GDIP_INTERNAL; 130 GpStatus gdip_metafile_play_wmf (MetafilePlayContext *context) GDIP_INTERNAL; 131 GpStatus gdip_metafile_play_emfplus_block (MetafilePlayContext *context, BYTE* data, int length) GDIP_INTERNAL; 132 133 MetafilePlayContext* gdip_metafile_play_setup (GpMetafile *metafile, GpGraphics *graphics, int x, int y, int width, 134 int height) GDIP_INTERNAL; 135 GpStatus gdip_metafile_play (MetafilePlayContext *context) GDIP_INTERNAL; 136 GpStatus gdip_metafile_play_cleanup (MetafilePlayContext *context) GDIP_INTERNAL; 137 138 GpPen* gdip_metafile_GetSelectedPen (MetafilePlayContext *context) GDIP_INTERNAL; 139 GpBrush* gdip_metafile_GetSelectedBrush (MetafilePlayContext *context) GDIP_INTERNAL; 140 GpStatus GdiComment (MetafilePlayContext *context, BYTE* data, DWORD size) GDIP_INTERNAL; 141 142 GpStatus gdip_metafile_SaveDC (MetafilePlayContext *context) GDIP_INTERNAL; 143 GpStatus gdip_metafile_SetBkMode (MetafilePlayContext *context, DWORD bkMode) GDIP_INTERNAL; 144 GpStatus gdip_metafile_SetMapMode (MetafilePlayContext *context, DWORD mode) GDIP_INTERNAL; 145 GpStatus gdip_metafile_SetROP2 (MetafilePlayContext *context, DWORD rop) GDIP_INTERNAL; 146 GpStatus gdip_metafile_SetRelabs (MetafilePlayContext *context, DWORD mode) GDIP_INTERNAL; 147 GpStatus gdip_metafile_SetPolyFillMode (MetafilePlayContext *context, DWORD mode) GDIP_INTERNAL; 148 GpStatus gdip_metafile_SetStretchBltMode (MetafilePlayContext *context, int iStretchMode) GDIP_INTERNAL; 149 GpStatus gdip_metafile_RestoreDC (MetafilePlayContext *context) GDIP_INTERNAL; 150 GpStatus gdip_metafile_SelectObject (MetafilePlayContext *context, DWORD slot) GDIP_INTERNAL; 151 GpStatus gdip_metafile_ModifyWorldTransform (MetafilePlayContext *context, XFORM *lpXform, DWORD iMode) GDIP_INTERNAL; 152 GpStatus gdip_metafile_SetTextAlign (MetafilePlayContext *context, DWORD textalign) GDIP_INTERNAL; 153 GpStatus gdip_metafile_DeleteObject (MetafilePlayContext *context, DWORD slot) GDIP_INTERNAL; 154 GpStatus gdip_metafile_SetBkColor (MetafilePlayContext *context, DWORD color) GDIP_INTERNAL; 155 GpStatus gdip_metafile_SetWindowOrg (MetafilePlayContext *context, int x, int y) GDIP_INTERNAL; 156 GpStatus gdip_metafile_SetWindowExt (MetafilePlayContext *context, int height, int width) GDIP_INTERNAL; 157 GpStatus gdip_metafile_LineTo (MetafilePlayContext *context, int x, int y) GDIP_INTERNAL; 158 GpStatus gdip_metafile_MoveTo (MetafilePlayContext *context, int x, int y) GDIP_INTERNAL; 159 GpStatus gdip_metafile_SetMiterLimit (MetafilePlayContext *context, float eNewLimit, float *peOldLimit) GDIP_INTERNAL; 160 GpStatus gdip_metafile_CreatePenIndirect (MetafilePlayContext *context, DWORD style, DWORD width, DWORD color) GDIP_INTERNAL; 161 GpStatus gdip_metafile_ExtCreatePen (MetafilePlayContext *context, DWORD dwPenStyle, DWORD dwWidth, CONST LOGBRUSH *lplb, 162 DWORD dwStyleCount, CONST DWORD *lpStyle) GDIP_INTERNAL; 163 GpStatus gdip_metafile_CreateBrushIndirect (MetafilePlayContext *context, DWORD style, DWORD color, DWORD hatch) GDIP_INTERNAL; 164 GpStatus gdip_metafile_Arc (MetafilePlayContext *context, int left, int top, int right, int bottom, 165 int xstart, int ystart, int xend, int yend) GDIP_INTERNAL; 166 GpStatus gdip_metafile_Rectangle (MetafilePlayContext *context, int bottomRect, int rightRect, int topRect, int leftRect) GDIP_INTERNAL; 167 GpStatus gdip_metafile_SetPixel (MetafilePlayContext *context, DWORD color, int x, int y) GDIP_INTERNAL; 168 GpStatus gdip_metafile_StretchDIBits (MetafilePlayContext *context, int XDest, int YDest, int nDestWidth, int nDestHeight, 169 int XSrc, int YSrc, int nSrcWidth, int nSrcHeight, CONST void *lpBits, CONST BITMAPINFO *lpBitsInfo, 170 UINT iUsage, DWORD dwRop) GDIP_INTERNAL; 171 GpStatus gdip_metafile_PolyBezier (MetafilePlayContext *context, GpPointF *points, int count) GDIP_INTERNAL; 172 GpStatus gdip_metafile_Polygon (MetafilePlayContext *context, GpPointF *points, int count) GDIP_INTERNAL; 173 GpStatus gdip_metafile_BeginPath (MetafilePlayContext *context) GDIP_INTERNAL; 174 GpStatus gdip_metafile_EndPath (MetafilePlayContext *context) GDIP_INTERNAL; 175 GpStatus gdip_metafile_CloseFigure (MetafilePlayContext *context) GDIP_INTERNAL; 176 GpStatus gdip_metafile_FillPath (MetafilePlayContext *context) GDIP_INTERNAL; 177 GpStatus gdip_metafile_StrokePath (MetafilePlayContext *context) GDIP_INTERNAL; 178 GpStatus gdip_metafile_StrokeAndFillPath (MetafilePlayContext *context) GDIP_INTERNAL; 179 180 #include "metafile.h" 181 182 #endif 183