summaryrefslogtreecommitdiff
path: root/include/vcl/emfact.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/vcl/emfact.hxx')
-rw-r--r--include/vcl/emfact.hxx1187
1 files changed, 1187 insertions, 0 deletions
diff --git a/include/vcl/emfact.hxx b/include/vcl/emfact.hxx
new file mode 100644
index 000000000000..891dfc1a7a53
--- /dev/null
+++ b/include/vcl/emfact.hxx
@@ -0,0 +1,1187 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_VCL_EMFACT_HXX
+#define INCLUDED_VCL_EMFACT_HXX
+
+#include <vcl/metaact.hxx>
+#include <tools/stream.hxx>
+
+/// Control record types
+#define EMR_HEADER_ACTION 0x0001
+#define EMR_EOF_ACTION 0x000E
+
+/// Comment record type
+#define EMR_COMMENT_ACTION 0x0046
+
+/// State record types
+#define EMR_SETWINDOWEXTEX_ACTION 0x0009
+#define EMR_SETWINDOWORGEX_ACTION 0x000A
+#define EMR_SETVIEWPORTEXTEX_ACTION 0x000B
+#define EMR_SETVIEWPORTORGEX_ACTION 0x000C
+#define EMR_SETBRUSHORGEX_ACTION 0x000D
+#define EMR_SETMAPPERFLAGS_ACTION 0x0010
+#define EMR_SETMAPMODE_ACTION 0x0011
+#define EMR_SETBKMODE_ACTION 0x0012
+#define EMR_SETPOLYFILLMODE_ACTION 0x0013
+#define EMR_SETROP2_ACTION 0x0014
+#define EMR_SETSTRETCHBLTMODE_ACTION 0x0015
+#define EMR_SETTEXTALIGN_ACTION 0x0016
+#define EMR_SETCOLORADJUSTMENT_ACTION 0x0017
+#define EMR_SETTEXTCOLOR_ACTION 0x0018
+#define EMR_SETBKCOLOR_ACTION 0x0019
+#define EMR_MOVETOEX_ACTION 0x001B
+#define EMR_SCALEVIEWPORTEXTEX_ACTION 0x001F
+#define EMR_SCALEWINDOWEXTEX_ACTION 0x0020
+#define EMR_SAVEDC_ACTION 0x0021
+#define EMR_RESTOREDC_ACTION 0x0022
+#define EMR_SETMITERLIMIT_ACTION 0x003A
+#define EMR_SETARCDIRECTION_ACTION 0x0039
+#define EMR_INVERTRGN_ACTION 0x0049
+#define EMR_SETICMMODE_ACTION 0x0062
+#define EMR_PIXELFORMAT_ACTION 0x0068
+#define EMR_FORCEUFIMAPPING_ACTION 0x006D
+#define EMR_SETICMPROFILEA_ACTION 0x0070
+#define EMR_SETICMPROFILEW_ACTION 0x0071
+#define EMR_SETLAYOUT_ACTION 0x0073
+#define EMR_SETLINKEDUFIS_ACTION 0x0077
+#define EMR_SETTEXTJUSTIFICATION_ACTION 0x0078
+#define EMR_COLORMATCHTOTARGETW_ACTION 0x0079
+
+/// Transformation record types
+#define EMR_SETWORLDTRANSFORM_ACTION 0x0023
+#define EMR_MODIFYWORLDTRANSFORM_ACTION 0x0024
+
+/// Object creation record types
+#define EMR_CREATEPEN_ACTION 0x0026
+#define EMR_CREATEBRUSHINDIRECT_ACTION 0x0027
+#define EMR_CREATEPALETTE_ACTION 0x0031
+#define EMR_EXTCREATEFONTINDIRECTW_ACTION 0x0052
+#define EMR_CREATEMONOBRUSH_ACTION 0x005D
+#define EMR_CREATEDIBPATTERNBRUSHPT_ACTION 0x005E
+#define EMR_EXTCREATEPEN_ACTION 0x005F
+#define EMR_CREATECOLORSPACE_ACTION 0x0063
+#define EMR_CREATECOLORSPACEW_ACTION 0x007A
+
+/// Object manipulation record types
+#define EMR_SELECTOBJECT_ACTION 0x0025
+#define EMR_DELETEOBJECT_ACTION 0x0028
+#define EMR_SELECTPALETTE_ACTION 0x0030
+#define EMR_SETPALETTEENTRIES_ACTION 0x0032
+#define EMR_RESIZEPALETTE_ACTION 0x0033
+#define EMR_SETCOLORSPACE_ACTION 0x0064
+#define EMR_DELETECOLORSPACE_ACTION 0x0065
+#define EMR_COLORCORRECTPALETTE_ACTION 0x006F
+
+/// Clipping record types
+#define EMR_OFFSETCLIPRGN_ACTION 0x001A
+#define EMR_SETMETARGN_ACTION 0x001C
+#define EMR_EXCLUDECLIPRECT_ACTION 0x001D
+#define EMR_INTERSECTCLIPRECT_ACTION 0x001E
+#define EMR_SELECTCLIPPATH_ACTION 0x0043
+#define EMR_EXTSELECTCLIPRGN_ACTION 0x004B
+
+/// Drawing record types
+#define EMR_POLYBEZIER_ACTION 0x0002
+#define EMR_POLYGON_ACTION 0x0003
+#define EMR_POLYLINE_ACTION 0x0004
+#define EMR_POLYBEZIERTO_ACTION 0x0005
+#define EMR_POLYLINETO_ACTION 0x0006
+#define EMR_POLYPOLYLINE_ACTION 0x0007
+#define EMR_POLYPOLYGON_ACTION 0x0008
+#define EMR_SETPIXELV_ACTION 0x000F
+#define EMR_ANGLEARC_ACTION 0x0029
+#define EMR_ELLIPSE_ACTION 0x002A
+#define EMR_RECTANGLE_ACTION 0x002B
+#define EMR_ROUNDRECT_ACTION 0x002C
+#define EMR_ARC_ACTION 0x002D
+#define EMR_CHORD_ACTION 0x002E
+#define EMR_PIE_ACTION 0x002F
+#define EMR_EXTFLOODFILL_ACTION 0x0035
+#define EMR_LINETO_ACTION 0x0036
+#define EMR_ARCTO_ACTION 0x0037
+#define EMR_POLYDRAW_ACTION 0x0038
+#define EMR_FILLPATH_ACTION 0x003E
+#define EMR_STROKEANDFILLPATH_ACTION 0x003F
+#define EMR_STROKEPATH_ACTION 0x0040
+#define EMR_FILLRGN_ACTION 0x0047
+#define EMR_FRAMERGN_ACTION 0x0048
+#define EMR_PAINTRGN_ACTION 0x004A
+#define EMR_EXTTEXTOUTA_ACTION 0x0053
+#define EMR_EXTTEXTOUTW_ACTION 0x0054
+#define EMR_POLYBEZIER16_ACTION 0x0055
+#define EMR_POLYGON16_ACTION 0x0056
+#define EMR_POLYLINE16_ACTION 0x0057
+#define EMR_POLYBEZIERTO16_ACTION 0x0058
+#define EMR_POLYLINETO16_ACTION 0x0059
+#define EMR_POLYPOLYLINE16_ACTION 0x005A
+#define EMR_POLYPOLYGON16_ACTION 0x005B
+#define EMR_POLYDRAW16_ACTION 0x005C
+#define EMR_POLYTEXTOUTA_ACTION 0x0060
+#define EMR_POLYTEXTOUTW_ACTION 0x0061
+#define EMR_SMALLTEXTOUT_ACTION 0x006C
+#define EMR_GRADIENTFILL_ACTION 0x0076
+
+/// Bitmap record types
+#define EMR_BITBLT_ACTION 0x004C
+#define EMR_STRETCHBLT_ACTION 0x004D
+#define EMR_MASKBLT_ACTION 0x004E
+#define EMR_PLGBLT_ACTION 0x004F
+#define EMR_SETDIBITSTODEVICE_ACTION 0x0050
+#define EMR_STRETCHDIBITS_ACTION 0x0051
+#define EMR_ALPHABLEND_ACTION 0x0072
+#define EMR_TRANSPARENTBLT_ACTION 0x0074
+
+/// Escape records (note: we really do NOT want to implement these...)
+#define EMR_DRAWESCAPE_ACTION 0x0069
+#define EMR_EXTESCAPE_ACTION 0x006A
+#define EMR_NAMEDESCAPE_ACTION 0x006E
+
+/// OpenGL records
+#define EMR_GLSRECORD_ACTION 0x0066
+#define EMR_GLSBOUNDEDRECORD_ACTION 0x0067
+
+/// Path records
+#define EMR_BEGINPATH_ACTION 0x003B
+#define EMR_ENDPATH_ACTION 0x003C
+#define EMR_CLOSEFIGURE_ACTION 0x003D
+#define EMR_FLATTENPATH_ACTION 0x0041
+#define EMR_WIDENPATH_ACTION 0x0042
+#define EMR_ABORTPATH_ACTION 0x0044
+
+/// Region data header
+// #define RDH_RECTANGLES 0x00000001
+
+/// Pixel format descriptor bit flags (note comment at end of value is short
+/// bit flag constants - see [MS-EMF] section 2.2.22)
+#define PFD_NEED_PALETTE 0x00000001 // P
+#define PFD_GENERIC_FORMAT 0x00000002 // F
+#define PFD_SUPPORT_OPENGL 0x00000004 // SO
+#define PFD_SUPPORT_GDI 0x00000008 // G
+#define PFD_DRAW_TO_BITMAP 0x00000010 // M
+#define PFD_DRAW_TO_WINDOW 0x00000020 // W
+#define PFD_STEREO 0x00000040 // S
+#define PFD_DOUBLEBUFFER 0x00000080 // D
+#define PFD_SUPPORT_COMPOSITION 0x00000100 // C
+#define PFD_DIRECT3D_ACCELERATED 0x00000200 // DA
+#define PFD_SUPPORT_DIRECTDRAW 0x00000400 // DS
+#define PFD_GENERIC_ACCELERATED 0x00000800 // A
+#define PFD_SWAP_LAYER_BUFFERS 0x00001000 // SL
+#define PFD_SWAP_COPY 0x00002000 // SC
+#define PFD_SWAP_EXCHANGE 0x00004000 // SE
+#define PFD_NEED_SYSTEM_PALETTE 0x00008000 // SP
+#define PFD_RESERVED_BIT16 0x00010000 // Bit 16
+#define PFD_RESERVED_BIT17 0x00020000 // Bit 17
+#define PFD_RESERVED_BIT18 0x00040000 // Bit 18
+#define PFD_RESERVED_BIT19 0x00080000 // Bit 19
+#define PFD_RESERVED_BIT20 0x00100000 // Bit 20
+#define PFD_RESERVED_BIT21 0x00200000 // Bit 21
+#define PFD_RESERVED_BIT22 0x00400000 // Bit 22
+#define PFD_RESERVED_BIT23 0x00800000 // Bit 23
+#define PFD_RESERVED_BIT24 0x01000000 // Bit 24
+#define PFD_RESERVED_BIT25 0x02000000 // Bit 25
+#define PFD_RESERVED_BIT26 0x04000000 // Bit 26
+#define PFD_RESERVED_BIT27 0x08000000 // Bit 27
+#define PFD_STEREO_DONTCARE 0x10000000 // SD
+#define PFD_DOUBLEBUFFER_DONTCARE 0x20000000 // DD
+#define PFD_DEPTH_DONTCARE 0x40000000 // DP
+#define PFD_RESERVED_BIT31 0X80000000 // Bit 31
+
+// Pixel format descriptor types
+#define PFD_TYPE_RGBA 0x00 // Pixel format is RGBA
+#define PFD_TYPE_COLORINDEX 0x01 // Each pixel is index in a color table
+
+class EmfClosePath
+{
+ bool bPathClosed;
+
+public:
+
+ EmfClosePath() { bPathClosed=false; }
+ virtual ~EmfClosePath() {}
+
+ virtual void ClosePath() { bPathClosed=true; }
+ virtual int IsPathClosed() { return bPathClosed; }
+};
+
+enum PointEMF
+{
+ PT_CLOSEFIGURE = 0x01,
+ PT_LINETO = 0x02,
+ PT_BEZIERTO = 0x04,
+ PT_MOVETO = 0x06
+};
+
+struct PointL
+{
+ sal_Int32 mnX;
+ sal_Int32 mnY;
+
+ void Read( SvStream& rIStm );
+};
+
+struct PointS
+{
+ sal_Int16 mnX;
+ sal_Int16 mnY;
+
+ void Read( SvStream& rIStm );
+};
+
+struct RectL
+{
+ sal_uInt32 mnLeft;
+ sal_uInt32 mnTop;
+ sal_uInt32 mnRight;
+ sal_uInt32 mnBottom;
+
+ void Read( SvStream& rIStm );
+};
+
+struct SizeL
+{
+ sal_uInt32 mnX;
+ sal_uInt32 mnY;
+
+ void Read( SvStream& rIStm );
+};
+
+// TernaryRasterOperation (MS-WMF 2.1.1.31)
+
+#define BLACKNESS_EMF 0x00
+#define DPSOON_EMF 0x01
+#define DPSONA_EMF 0x02
+#define PSON_EMF 0x03
+#define SDPONA_EMF 0x04
+#define DPON_EMF 0x05
+#define PDSXNON_EMF 0x06
+#define PDSAON_EMF 0x07
+#define SDPNAA_EMF 0x08
+#define PDSXON_EMF 0x09
+#define DPNA_EMF 0x0A
+#define PSDNAON_EMF 0x0B
+#define SPNA_EMF 0x0C
+#define PDSNAON_EMF 0x0D
+#define PDSONON_EMF 0x0E
+#define PN_EMF 0x0F
+#define PDSONA_EMF 0x10
+#define NOTSRCERASE_EMF 0x11
+#define SDPXNON_EMF 0x12
+#define SDPAON_EMF 0x13
+#define DPSXNON_EMF 0x14
+#define DPSAON_EMF 0x15
+#define PSDPSANAXX_EMF 0x16
+#define SSPXDSXAXN_EMF 0x17
+#define SPXPDXA_EMF 0x18
+#define SDPSANAXN_EMF 0x19
+#define PDSPAOX_EMF 0x1A
+#define SDPSXAXN_EMF 0x1B
+#define PSDPAOX_EMF 0x1C
+#define DSPDXAXN_EMF 0x1D
+#define PDSOX_EMF 0x1E
+#define PDSOAN_EMF 0x1F
+#define DPSNAA_EMF 0x20
+#define SDPXON_EMF 0x21
+#define DSNA_EMF 0x22
+#define SPDNAON_EMF 0x23
+#define SPXDSXA_EMF 0x24
+#define PDSPANAXN_EMF 0x25
+#define SDPSAOX_EMF 0x26
+#define SDPSXNOX_EMF 0x27
+#define DPSXA_EMF 0x28
+#define PSDPSAOXXN_EMF 0x29
+#define DPSANA_EMF 0x2A
+#define SSPXPDXAXN_EMF 0x2B
+#define SPDSOAX_EMF 0x2C
+#define PSDNOX_EMF 0x2D
+#define PSDPXOX_EMF 0x2E
+#define PSDNOAN_EMF 0x2F
+#define PSNA_EMF 0x30
+#define SDPNAON_EMF 0x31
+#define SDPSOOX_EMF 0x32
+#define NOTSRCCOPY_EMF 0x33
+#define SPDSAOX_EMF 0x34
+#define SPDSXNOX_EMF 0x35
+#define SDPOX_EMF 0x36
+#define SDPOAN_EMF 0x37
+#define PSDPOAX_EMF 0x38
+#define SPDNOX_EMF 0x39
+#define SPDSXOX_EMF 0x3A
+#define SPDNOAN_EMF 0x3B
+#define PSX_EMF 0x3C
+#define SPDSONOX_EMF 0x3D
+#define SPDSNAOX_EMF 0x3E
+#define PSAN_EMF 0x3F
+#define PSDNAA_EMF 0x40
+#define DPSXON_EMF 0x41
+#define SDXPDXA_EMF 0x42
+#define SPDSANAXN_EMF 0x43
+#define SRCERASE_EMF 0x44
+#define DPSNAON_EMF 0x45
+#define DSPDAOX_EMF 0x46
+#define PSDPXAXN_EMF 0x47
+#define SDPXA_EMF 0x48
+#define PDSPDAOXXN_EMF 0x49
+#define DPSDOAX_EMF 0x4A
+#define PDSNOX_EMF 0x4B
+#define SDPANA_EMF 0x4C
+#define SSPXDSXOXN_EMF 0x4D
+#define PDSPXOX_EMF 0x4E
+#define PDSNOAN_EMF 0x4F
+#define PDNA_EMF 0x50
+#define DSPNAON_EMF 0x51
+#define DPSDAOX_EMF 0x52
+#define SPDSXAXN_EMF 0x53
+#define DPSONON_EMF 0x54
+#define DSTINVERT_EMF 0x55
+#define DPSOX_EMF 0x56
+#define DPSOAN_EMF 0x57
+#define PDSPOAX_EMF 0x58
+#define DPSNOX_EMF 0x59
+#define PATINVERT_EMF 0x5A
+#define DPSDONOX_EMF 0x5B
+#define DPSDXOX_EMF 0x5C
+#define DPSNOAN_EMF 0x5D
+#define DPSDNAOX_EMF 0x5E
+#define DPAN_EMF 0x5F
+#define PDSXA_EMF 0x60
+#define DSPDSAOXXN_EMF 0x61
+#define DSPDOAX_EMF 0x62
+#define SDPNOX_EMF 0x63
+#define SDPSOAX_EMF 0x64
+#define DSPNOX_EMF 0x65
+#define SRCINVERT_EMF 0x66
+#define SDPSONOX_EMF 0x67
+#define DSPDSONOXXN_EMF 0x68
+#define PDSXXN_EMF 0x69
+#define DPSAX_EMF 0x6A
+#define PSDPSOAXXN_EMF 0x6B
+#define SDPAX_EMF 0x6C
+#define PDSPDOAXXN_EMF 0x6D
+#define SDPSNOAX_EMF 0x6E
+#define PDXNAN_EMF 0x6F
+#define PDSANA_EMF 0x70
+#define SSDXPDXAXN_EMF 0x71
+#define SDPSXOX_EMF 0x72
+#define SDPNOAN_EMF 0x73
+#define DSPDXOX_EMF 0x74
+#define DSPNOAN_EMF 0x75
+#define SDPSNAOX_EMF 0x76
+#define DSAN_EMF 0x77
+#define PDSAX_EMF 0x78
+#define DSPDSOAXXN_EMF 0x79
+#define DPSDNOAX_EMF 0x7A
+#define SDPXNAN_EMF 0x7B
+#define SPDSNOAX_EMF 0x7C
+#define DPSXNAN_EMF 0x7D
+#define SPXDSXO_EMF 0x7E
+#define DPSAAN_EMF 0x7F
+#define DPSAA_EMF 0x80
+#define SPXDSXON_EMF 0x81
+#define DPSXNA_EMF 0x82
+#define SPDSNOAXN_EMF 0x83
+#define SDPXNA_EMF 0x84
+#define PDSPNOAXN_EMF 0x85
+#define DSPDSOAXX_EMF 0x86
+#define PDSAXN_EMF 0x87
+#define SRCAND_EMF 0x88
+#define SDPSNAOXN_EMF 0x89
+#define DSPNOA_EMF 0x8A
+#define DSPDXOXN_EMF 0x8B
+#define SDPNOA_EMF 0x8C
+#define SDPSXOXN_EMF 0x8D
+#define SSDXPDXAX_EMF 0x8E
+#define PDSANAN_EMF 0x8F
+#define PDSXNA_EMF 0x90
+#define SDPSNOAXN_EMF 0x91
+#define DPSDPOAXX_EMF 0x92
+#define SPDAXN_EMF 0x93
+#define PSDPSOAXX_EMF 0x94
+#define DPSAXN_EMF 0x95
+#define DPSXX_EMF 0x96
+#define PSDPSONOXX_EMF 0x97
+#define SDPSONOXN_EMF 0x98
+#define DSXN_EMF 0x99
+#define DPSNAX_EMF 0x9A
+#define SDPSOAXN_EMF 0x9B
+#define SPDNAX_EMF 0x9C
+#define DSPDOAXN_EMF 0x9D
+#define DSPDSAOXX_EMF 0x9E
+#define PDSXAN_EMF 0x9F
+#define DPA_EMF 0xA0
+#define PDSPNAOXN_EMF 0xA1
+#define DPSNOA_EMF 0xA2
+#define DPSDXOXN_EMF 0xA3
+#define PDSPONOXN_EMF 0xA4
+#define PDXN_EMF 0xA5
+#define DSPNAX_EMF 0xA6
+#define PDSPOAXN_EMF 0xA7
+#define DPSOA_EMF 0xA8
+#define DPSOXN_EMF 0xA9
+#define D_EMF 0xAA
+#define DPSONO_EMF 0xAB
+#define SPDSXAX_EMF 0xAC
+#define DPSDAOXN_EMF 0xAD
+#define DSPNAO_EMF 0xAE
+#define DPNO_EMF 0xAF
+#define PDSNOA_EMF 0xB0
+#define PDSPXOXN_EMF 0xB1
+#define SSPXDSXOX_EMF 0xB2
+#define SDPANAN_EMF 0xB3
+#define PSDNAX_EMF 0xB4
+#define DPSDOAXN_EMF 0xB5
+#define DPSDPAOXX_EMF 0xB6
+#define SDPXAN_EMF 0xB7
+#define PSDPXAX_EMF 0xB8
+#define DSPDAOXN_EMF 0xB9
+#define DPSNAO_EMF 0xBA
+#define MERGEPAINT_EMF 0xBB
+#define SPDSANAX_EMF 0xBC
+#define SDXPDXAN_EMF 0xBD
+#define DPSXO_EMF 0xBE
+#define DPSANO_EMF 0xBF
+#define MERGECOPY_EMF 0xC0
+#define SPDSNAOXN_EMF 0xC1
+#define SPDSONOXN_EMF 0xC2
+#define PSXN_EMF 0xC3
+#define SPDNOA_EMF 0xC4
+#define SPDSXOXN_EMF 0xC5
+#define SDPNAX_EMF 0xC6
+#define PSDPOAXN_EMF 0xC7
+#define SDPOA_EMF 0xC8
+#define SPDOXN_EMF 0xC9
+#define DPSDXAX_EMF 0xCA
+#define SPDSAOXN_EMF 0xCB
+#define SRCCOPY_EMF 0xCC
+#define SDPONO_EMF 0xCD
+#define SDPNAO_EMF 0xCE
+#define SPNO_EMF 0xCF
+#define PSDNOA_EMF 0xD0
+#define PSDPXOXN_EMF 0xD1
+#define PDSNAX_EMF 0xD2
+#define SPDSOAXN_EMF 0xD3
+#define SSPXPDXAX_EMF 0xD4
+#define DPSANAN_EMF 0xD5
+#define PSDPSAOXX_EMF 0xD6
+#define DPSXAN_EMF 0xD7
+#define PDSPXAX_EMF 0xD8
+#define SDPSAOXN_EMF 0xD9
+#define DPSDANAX_EMF 0xDA
+#define SPXDSXAN_EMF 0xDB
+#define SPDNAO_EMF 0xDC
+#define SDNO_EMF 0xDD
+#define SDPXO_EMF 0xDE
+#define SDPANO_EMF 0xDF
+#define PDSOA_EMF 0xE0
+#define PDSOXN_EMF 0xE1
+#define DSPDXAX_EMF 0xE2
+#define PSDPAOXN_EMF 0xE3
+#define SDPSXAX_EMF 0xE4
+#define PDSPAOXN_EMF 0xE5
+#define SDPSANAX_EMF 0xE6
+#define SPXPDXAN_EMF 0xE7
+#define SSPXDSXAX_EMF 0xE8
+#define DSPDSANAXXN_EMF 0xE9
+#define DPSAO_EMF 0xEA
+#define DPSXNO_EMF 0xEB
+#define SDPAO_EMF 0xEC
+#define SDPXNO_EMF 0xED
+#define SRCPAINT_EMF 0xEE
+#define SDPNOO_EMF 0xEF
+#define PATCOPY_EMF 0xF0
+#define PDSONO_EMF 0xF1
+#define PDSNAO_EMF 0xF2
+#define PSNO_EMF 0xF3
+#define PSDNAO_EMF 0xF4
+#define PDNO_EMF 0xF5
+#define PDSXO_EMF 0xF6
+#define PDSANO_EMF 0xF7
+#define PDSAO_EMF 0xF8
+#define PDSXNO_EMF 0xF9
+#define VDPO_EMF 0xFA
+#define PATPAINT_EMF 0xFB
+#define PSO_EMF 0xFC
+#define PSDNOO_EMF 0xFD
+#define DPSOO_EMF 0xFE
+#define WHITENESS_EMF 0xFF
+
+enum LogicalColorSpace
+{
+ LCS_CALIBRATED_RGB = 0x00000000,
+ LCS_sRGB = 0x73524742,
+ LCS_WINDOWS_COLOR_SPACE = 0x57696E20
+};
+
+enum GamutMappingIntent
+{
+ LCS_GM_ABS_COLORIMETRIC = 0x00000008,
+ LCS_GM_BUSINESS = 0x00000001,
+ LCS_GM_GRAPHICS = 0x00000002,
+ LCS_GM_IMAGES = 0x00000004
+};
+
+struct CIEXYZ
+{
+ sal_uInt32 mnCiexyzX;
+ sal_uInt32 mnCiexyzY;
+ sal_uInt32 mnCiexyzZ;
+
+ void Read( SvStream& rIStm );
+};
+
+struct CIEXYZTriple
+{
+ CIEXYZ maCiexyzRed;
+ CIEXYZ maCiexyzBlue;
+ CIEXYZ maCiexyzGreen;
+
+ void Read( SvStream& rIStm );
+};
+
+class LogColorSpaceBase
+{
+public:
+ virtual ~LogColorSpaceBase() {}
+
+ sal_uInt32 mnSignature;
+ sal_uInt32 mnSize;
+ sal_uInt32 mnVersion;
+ LogicalColorSpace meColorSpaceType;
+ GamutMappingIntent meIntent;
+ CIEXYZTriple maEndpoints;
+ sal_uInt32 mnGammaRed;
+ sal_uInt32 mnGammaGreen;
+ sal_uInt32 mnGammaBlue;
+ OUString maFileName;
+
+ virtual void Read( SvStream& rIStm );
+};
+
+class LogColorSpace : public LogColorSpaceBase
+{
+public:
+ virtual void Read( SvStream& rIStm );
+};
+
+class LogColorSpaceW : public LogColorSpaceBase
+{
+public:
+ virtual void Read( SvStream& rIStm );
+};
+
+template < class PointType >
+struct EmfPolygon
+{
+ std::vector<PointType> maPoints;
+};
+
+enum ICMMode
+{
+ ICM_OFF = 0x01,
+ ICM_ON = 0x02,
+ ICM_QUERY = 0x03,
+ ICM_DONE_OUTSIDEDC = 0x04
+};
+
+struct ColorRef
+{
+ sal_uInt8 mnRed;
+ sal_uInt8 mnGreen;
+ sal_uInt8 mnBlue;
+
+ void Read( SvStream& rIStm );
+};
+
+struct ColorAdjustment
+{
+ sal_uInt16 mnSize;
+ sal_uInt16 mnValues;
+ sal_uInt16 mnIlluminantIndex;
+ sal_uInt16 mnRedGamma;
+ sal_uInt16 mnGreenGamma;
+ sal_uInt16 mnBlueGamma;
+ sal_uInt16 mnReferenceBlack;
+ sal_uInt16 mnReferenceWhite;
+ sal_Int16 mnContrast;
+ sal_Int16 mnBrightness;
+ sal_Int16 mnColorfulness;
+ sal_Int16 mnRedGreenTint;
+
+ void Read( SvStream& rIStm );
+};
+
+enum CharacterSet
+{
+ ANSI_CHARSET_EMF = 0x00000000,
+ DEFAULT_CHARSET_EMF = 0x00000001,
+ SYMBOL_CHARSET_EMF = 0x00000002,
+ MAC_CHARSET_EMF = 0x0000004D,
+ SHIFTJIS_CHARSET_EMF = 0x00000080,
+ HANGUL_CHARSET_EMF = 0x00000081,
+ JOHAB_CHARSET_EMF = 0x00000082,
+ GB2312_CHARSET_EMF = 0x00000086,
+ CHINESEBIG5_CHARSET_EMF = 0x00000088,
+ GREEK_CHARSET_EMF = 0x000000A1,
+ TURKISH_CHARSET_EMF = 0x000000A2,
+ VIETNAMESE_CHARSET_EMF = 0x000000A3,
+ HEBREW_CHARSET_EMF = 0x000000B1,
+ ARABIC_CHARSET_EMF = 0x000000B2,
+ BALTIC_CHARSET_EMF = 0x000000BA,
+ RUSSIAN_CHARSET_EMF = 0x000000CC,
+ THAI_CHARSET_EMF = 0x000000DE,
+ EASTEUROPE_CHARSET_EMF = 0x000000EE,
+ OEM_CHARSET_EMF = 0x000000FF
+};
+
+enum OutPrecision
+{
+ OUT_DEFAULT_PRECIS = 0x00000000,
+ OUT_STRING_PRECIS = 0x00000001,
+ OUT_STROKE_PRECIS = 0x00000003,
+ OUT_TT_PRECIS = 0x00000004,
+ OUT_DEVICE_PRECIS = 0x00000005,
+ OUT_RASTER_PRECIS = 0x00000006,
+ OUT_TT_ONLY_PRECIS = 0x00000007,
+ OUT_OUTLINE_PRECIS = 0x00000008,
+ OUT_SCREEN_OUTLINE_PRECIS = 0x00000009,
+ OUT_PS_ONLY_PRECIS = 0x0000000A
+};
+
+#define CLIP_DEFAULT_PRECIS 0x00000000
+#define CLIP_CHARACTER_PRECIS 0x00000001
+#define CLIP_STROKE_PRECIS 0x00000002
+#define CLIP_LH_ANGLES 0x00000010
+#define CLIP_TT_ALWAYS 0x00000020
+#define CLIP_DFA_DISABLE 0x00000040
+#define CLIP_EMBEDDED 0x00000080
+
+enum LayoutMode
+{
+ LAYOUT_LTR = 0x00000000,
+ LAYOUT_RTL = 0x00000001,
+ LAYOUT_BITMAPORIENTATIONPRESERVED = 0x00000008
+};
+
+enum FamilyFont
+{
+ FF_DONTCARE_EMF = 0x00,
+ FF_ROMAN_EMF = 0x01,
+ FF_SWISS_EMF = 0x02,
+ FF_MODERN_EMF = 0x03,
+ FF_SCRIPT_EMF = 0x04,
+ FF_DECORATIVE_EMF = 0x05
+};
+
+enum PitchFont
+{
+ DEFAULT_PITCH_EMF = 0,
+ FIXED_PITCH_EMF = 1,
+ VARIABLE_PITCH_EMF = 2
+};
+
+struct PitchAndFamily
+{
+ FamilyFont meFamily;
+ PitchFont mePitch;
+
+ void Read( SvStream& rIStm );
+};
+
+enum FontQuality
+{
+ DEFAULT_QUALITY = 0x00,
+ DRAFT_QUALITY = 0x01,
+ PROOF_QUALITY = 0x02,
+ NONANTIALIASED_QUALITY = 0x03,
+ ANTIALIASED_QUALITY = 0x04,
+ CLEARTYPE_QUALITY = 0x05
+};
+
+class LogFont
+{
+public:
+ LogFont();
+ virtual ~LogFont() {};
+
+ sal_Int32 mnHeight;
+ sal_Int32 mnWidth;
+ sal_Int32 mnEscapement;
+ sal_Int32 mnOrientation;
+ sal_Int32 mnWeight;
+ bool mbItalic;
+ bool mbUnderline;
+ bool mbStrikeout;
+ CharacterSet meCharSet;
+ OutPrecision meOutPrecision;
+ sal_uInt8 mnClipPrecision;
+ FontQuality meQuality;
+ PitchAndFamily maPitchAndFamily;
+ OUString maFacename;
+
+ virtual void Read( SvStream& rIStm );
+};
+
+class LogFontEx : public LogFont
+{
+public:
+ LogFontEx();
+ virtual ~LogFontEx() {};
+
+ OUString maFullName;
+ OUString maStyle;
+ OUString maScript;
+
+ virtual void Read( SvStream& rIStm );
+};
+
+struct DesignVector
+{
+ sal_uInt32 mnSignature;
+ sal_uInt32 mnNumAxes;
+ std::vector<sal_uInt32> maValues;
+
+ void Read( SvStream& rIStm );
+};
+
+class LogFontExDv : public LogFontEx
+{
+public:
+ LogFontExDv();
+ virtual ~LogFontExDv() {};
+
+ DesignVector maDesignVector;
+
+ virtual void Read( SvStream& rIStm );
+};
+
+enum BrushStyle
+{
+ BS_SOLID_EMF = 0x0000,
+ BS_NULL_EMF = 0x0001,
+ BS_HATCHED_EMF = 0x0002,
+ BS_PATTERN_EMF = 0x0003,
+ BS_INDEXED_EMF = 0x0004,
+ BS_DIBPATTERN_EMF = 0x0005,
+ BS_DIBPATTERNPT_EMF = 0x0006,
+ BS_PATTERN8X8_EMF = 0x0007,
+ BS_DIBPATTERN8X8_EMF = 0x0008,
+ BS_MONOPATTERN_EMF = 0x0009
+};
+
+enum HatchStyleEMF
+{
+ HS_SOLIDCLR_EMF = 0x0006,
+ HS_DITHEREDCLR_EMF = 0x0007,
+ HS_SOLIDTEXTCLR_EMF = 0x0008,
+ HS_DITHEREDTEXTCLR_EMF = 0x0009,
+ HS_SOLIDBKCLR_EMF = 0x000A,
+ HS_DITHEREDBKCLR_EMF = 0x000B
+};
+
+struct LogBrushEx
+{
+ BrushStyle meBrushStyle;
+ ColorRef maColor;
+ HatchStyleEMF meHatchStyle;
+
+ void Read( SvStream& rIStm);
+};
+
+#define PS_COSMETIC_EMF 0x00000000
+#define PS_ENDCAP_ROUND_EMF 0x00000000
+#define PS_JOIN_ROUND_EMF 0x00000000
+#define PS_SOLID_EMF 0x00000000
+#define PS_DASH_EMF 0x00000001
+#define PS_DOT_EMF 0x00000002
+#define PS_DASHDOT_EMF 0x00000003
+#define PS_DASHDOTDOT_EMF 0x00000004
+#define PS_NULL_EMF 0x00000005
+#define PS_INSIDEFRAME_EMF 0x00000006
+#define PS_USERSTYLE_EMF 0x00000007
+#define PS_ALTERNATE_EMF 0x00000008
+#define PS_ENDCAP_SQUARE_EMF 0x00000100
+#define PS_ENDCAP_FLAT_EMF 0x00000200
+#define PS_JOIN_BEVEL_EMF 0x00001000
+#define PS_JOIN_MITER_EMF 0x00002000
+#define PS_GEOMETRIC_EMF 0x00010000
+
+struct LogPen
+{
+ sal_uInt32 mnPenStyle;
+ sal_uInt32 mnWidth;
+ ColorRef maColorRef;
+
+ void Read( SvStream& rIStm );
+};
+
+struct LogPenEx
+{
+ sal_uInt32 mnPenStyle;
+ sal_uInt32 mnWidth;
+ LogBrushEx maBrush;
+ std::vector< sal_uInt32 > maStyleEntries;
+
+ void Read( SvStream& rIStm );
+};
+
+enum BackgroundMode
+{
+ TRANSPARENT = 0x0001,
+ OPAQUE = 0x0002
+};
+
+#ifndef MM_TEXT
+
+#define MM_TEXT 0x01
+#define MM_LOMETRIC 0x02
+#define MM_HIMETRIC 0x03
+#define MM_LOENGLISH 0x04
+#define MM_HIENGLISH 0x05
+#define MM_TWIPS 0x06
+#define MM_ISOTROPIC 0x07
+#define MM_ANISOTROPIC 0x08
+
+#endif
+
+/// TextAlignmentMode flags (see [MS-WMF] section 2.1.2.3)
+#define TA_NOUPDATE_CP 0x0000
+#define TA_LEFT 0x0000
+#define TA_TOP 0x0000
+#define TA_UPDATECP 0x0001
+#define TA_RIGHT 0x0002
+#define TA_CENTER 0x0006
+#define TA_BOTTOM 0x0008
+#define TA_BASELINE 0x0018
+#define TA_RTLREADING 0x0100
+
+/// VerticalTextAlignmentMode flags (see [MS-WMF] section 2.1.2.4)
+#define VTA_TOP 0x0000
+#define VTA_RIGHT 0x0000
+#define VTA_BOTTOM 0x0002
+#define VTA_CENTER 0x0006
+#define VTA_LEFT 0x0008
+#define VTA_BASELINE 0x0018
+
+enum DIBColors
+{
+ DIB_RGB_COLORS = 0x00,
+ DIB_PAL_COLORS = 0x01,
+ DIB_PAL_INDICES = 0x02
+};
+
+struct LogPaletteEntry
+{
+ sal_uInt8 mnBlue;
+ sal_uInt8 mnGreen;
+ sal_uInt8 mnRed;
+
+ void Read( SvStream& rIStm );
+};
+
+struct LogPalette
+{
+ std::vector< LogPaletteEntry > maPaletteEntries;
+
+ void Read( SvStream& rIStm );
+};
+
+enum PolygonFillMode
+{
+ ALTERNATE = 0x01,
+ WINDING = 0x02
+};
+
+enum BinaryRasterOperations
+{
+ R2_BLACK_EMF = 0x0001,
+ R2_NOTMERGEPEN_EMF = 0x0002,
+ R2_MASKNOTPEN_EMF = 0x0003,
+ R2_NOTCOPYPEN_EMF = 0x0004,
+ R2_MASKPENNOT_EMF = 0x0005,
+ R2_NOT_EMF = 0x0006,
+ R2_XORPEN_EMF = 0x0007,
+ R2_NOTMASKPEN_EMF = 0x0008,
+ R2_MASKPEN_EMF = 0x0009,
+ R2_NOTXORPEN_EMF = 0x000A,
+ R2_NOP_EMF = 0x000B,
+ R2_MERGENOTPEN_EMF = 0x000C,
+ R2_COPYPEN_EMF = 0x000D,
+ R2_MERGEPENNOT_EMF = 0x000E,
+ R2_MERGEPEN_EMF = 0x000F,
+ R2_WHITE_EMF = 0x0010
+};
+
+enum StretchMode
+{
+ STRETCH_ANDSCANS_EMF = 0x01,
+ STRETCH_ORSCANS_EMF = 0x02,
+ STRETCH_DELETESCANS_EMF = 0x03,
+ STRETCH_HALFTONE_EMF = 0x04
+};
+
+enum RegionMode
+{
+ RGN_AND_EMF = 0x01,
+ RGN_OR_EMF = 0x02,
+ RGN_XOR_EMF = 0x03,
+ RGN_DIFF_EMF = 0x04,
+ RGN_COPY_EMF = 0x05
+};
+
+struct RegionDataHeader
+{
+ sal_uInt32 mnSize;
+ sal_uInt32 mnType;
+ sal_uInt32 mnCountRects;
+ sal_uInt32 mnRgnSize;
+ RectL maBounds;
+
+ void Read( SvStream& rIStm );
+};
+
+struct RegionData
+{
+ RegionDataHeader* mpRegionDataHeader;
+ std::vector<RectL> maData;
+
+ void Read( SvStream& rIStm );
+};
+
+enum FloodFill
+{
+ FLOODFILLBORDER = 0x00000000,
+ FLOODFILLSURFACE = 0x00000001
+};
+
+enum GradientFill
+{
+ GRADIENT_FILL_RECT_H = 0x00000000,
+ GRADIENT_FILL_RECT_V = 0x00000001,
+ GRADIENT_FILL_TRIANGLE = 0x00000002
+};
+
+struct TriVertex
+{
+ sal_Int32 mnX;
+ sal_Int32 mnY;
+ sal_uInt16 mnRed;
+ sal_uInt16 mnGreen;
+ sal_uInt16 mnBlue;
+ sal_uInt16 mnAlpha;
+
+ void Read(SvStream& rIStm);
+};
+
+class GradientObject
+{
+public:
+ GradientObject() {};
+ virtual ~GradientObject() {};
+
+ virtual void Read(SvStream&) {};
+};
+
+class GradientRectangle : public GradientObject
+{
+public:
+ sal_uInt32 mnUpper;
+ sal_uInt32 mnLower;
+
+ virtual void Read(SvStream& rIStm) SAL_OVERRIDE;
+};
+
+class GradientTriangle : public GradientObject
+{
+public:
+ sal_uInt32 mnVertex1;
+ sal_uInt32 mnVertex2;
+ sal_uInt32 mnVertex3;
+
+ virtual void Read(SvStream& rIStm) SAL_OVERRIDE;
+};
+
+class VertexObjects
+{
+public:
+ std::vector< GradientObject > maVertexObjects;
+
+ void Read(SvStream& rIStm, sal_uInt32 nNumObjects, bool bGradRectsUsed);
+};
+
+enum GraphicsMode
+{
+ GM_COMPATIBLE_EMF = 0x00000001,
+ GM_ADVANCED_EMF = 0x00000002
+};
+
+struct PixelFormatDescriptor
+{
+ sal_uInt16 mnSize;
+ sal_uInt16 mnVersion;
+ sal_uInt32 mnFlags;
+ sal_uInt8 mnPixelType;
+ sal_uInt8 mnColorBits;
+ sal_uInt8 mnRedBits;
+ sal_uInt8 mnRedShift;
+ sal_uInt8 mnGreenBits;
+ sal_uInt8 mnGreenShift;
+ sal_uInt8 mnBlueBits;
+ sal_uInt8 mnBlueShift;
+ sal_uInt8 mnAlphaBits;
+ sal_uInt8 mnAlphaShift;
+ sal_uInt8 mnAccumBits;
+ sal_uInt8 mnAccumRedBits;
+ sal_uInt8 mnAccumGreenBits;
+ sal_uInt8 mnAccumBlueBits;
+ sal_uInt8 mnDepthBits;
+ sal_uInt8 mnStencilBits;
+ sal_uInt8 mnAuxBuffers;
+ sal_uInt8 mnLayerType;
+ sal_uInt8 mnOverlayPlanes; // from the "reserved" field
+ sal_uInt8 mnUnderlayPlanes; // from the "reserved" field
+ sal_uInt32 mnLayerMask;
+ sal_uInt32 mnVisibleMask;
+ sal_uInt32 mnDamageMask;
+
+ void Read( SvStream& rIStm );
+};
+
+struct BLENDFUNCTION
+{
+ sal_uInt8 mnBlendOperation;
+ sal_uInt8 mnBlendFlags;
+ sal_uInt8 mnSrcConstantAlpha;
+ sal_uInt8 mnAlphaFormat;
+
+ void Read( SvStream& rIStm );
+};
+
+struct ROP4
+{
+ sal_uInt8 mnBackgroundROP3;
+ sal_uInt8 mnForegroundROP3;
+
+ void Read( SvStream& rIStm );
+};
+
+struct XFormEMF {
+ float mfM11;
+ float mfM12;
+ float mfM21;
+ float mfM22;
+ float mfDx;
+ float mfDy;
+
+ void Read( SvStream& rIStm );
+
+ /// from [MS-EMF] section 2.2.28
+ float transformX(float fX, float fY) { return mfM11 * fX + mfM21 * fY + mfDx; }
+ /// from [MS-EMF] section 2.2.28
+ float transformY(float fX, float fY) { return mfM12 * fX + mfM22 * fY + mfDy; }
+};
+
+enum ModifyWorldTransformMode {
+ MWT_IDENTITY_EMF = 0x01,
+ MWT_LEFTMULTIPLY_EMF = 0x02,
+ MWT_RIGHTMULTIPLY_EMF = 0x03,
+ MWT_SET_EMF = 0x04
+};
+
+enum HeaderType { NORMAL, EXT1, EXT2 };
+
+class EmfDeviceContext
+{
+ // TODO: needs to store pointers to objects - bitmaps, brushes palettes, fonts,
+ // pens, regions, drawing modes and mapping modes
+public:
+ EmfDeviceContext() {}
+
+ void SaveDC() { SAL_INFO("vcl.emf", "Saving Device Context"); }
+ void RestoreDC() { SAL_INFO("vcl.emf", "Restoring Device Context"); }
+};
+
+/** See [MS-EMF] section 2.2.27 UniversalFontId object */
+struct UniversalFontId
+{
+ sal_uInt32 mnChecksum;
+ sal_uInt32 mnIndex;
+
+ sal_uLong ComputeFileviewCheckSum(void* /* pvView */, sal_uLong* /* cjView */) { return 0L; }
+
+ void Read( SvStream& rIStm )
+ {
+ rIStm.ReadUInt32(mnChecksum);
+ rIStm.ReadUInt32(mnIndex);
+
+ SAL_INFO("vcl.emf", "\t\tindex: " << mnIndex);
+ }
+};
+
+// Defined in [MS-EMF] section 2.1.11 (ExtTextOutOptions Enumeration)
+// It's really a bitmask field, don't think it's a good idea to use
+// an enum
+
+#define ETO_OPAQUE_EMF 0x00000002
+#define ETO_CLIPPED_EMF 0x00000004
+#define ETO_GLYPH_INDEX_EMF 0x00000010
+#define ETO_RTLREADING_EMF 0x00000080
+#define ETO_NO_RECT_EMF 0x00000100
+#define ETO_SMALL_CHARS_EMF 0x00000200
+#define ETO_NUMERICSLOCAL_EMF 0x00000400
+#define ETO_NUMERICSLATIN_EMF 0x00000800
+#define ETO_IGNORELANGUAGE_EMF 0x00001000
+#define ETO_PDY_EMF 0x00002000
+#define ETO_REVERSE_INDEX_MAP_EMF 0x00010000
+
+struct EmrText
+{
+ PointL maReference;
+ sal_uInt32 mnOptions;
+ RectL maRectangle;
+ OUString maStringBuffer;
+ std::vector<sal_uInt32> maOutputDx;
+
+ void Read( SvStream& rIStm, sal_uInt64 nStartRecordOffset, bool bUnicode=true);
+};
+
+class VCL_DLLPUBLIC EmfAction
+{
+private:
+ sal_uInt32 mnType;
+ EmfDeviceContext* mpDeviceContext;
+
+protected:
+ virtual ~EmfAction();
+
+public:
+ explicit EmfAction();
+ explicit EmfAction( sal_uInt32 nType );
+
+ sal_uInt16 GetType() const { return mnType; }
+
+ void SetDeviceContext( EmfDeviceContext* pDC );
+ EmfDeviceContext* GetDeviceContext() { return mpDeviceContext; }
+
+public:
+ static EmfAction* ReadEmfAction( SvStream& rIStm );
+ virtual void Read( SvStream& );
+};
+
+#endif // INCLUDED_VCL_EMFACT_HXX
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */