summaryrefslogtreecommitdiffstats
path: root/lib/kwmf/kowmfstruct.h
blob: 2837fa71a69529c8b707dc21fbf98a6b7e2a6a5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* This library is distributed under the conditions of the GNU LGPL.
 * WMF Metafile Structures
 * Author: 2002/2003 thierry lorthiois
 */
#ifndef _KOWMFSTRUCT_H_
#define _KOWMFSTRUCT_H_

#include <qglobal.h>
#include <qnamespace.h>

#define APMHEADER_KEY 0x9AC6CDD7
#define ENHMETA_SIGNATURE       0x464D4520

struct WmfMetaHeader
{
  Q_UINT16  fileType;      // Type of metafile (0=memory, 1=disk)
  Q_UINT16  headerSize;    // always 9
  Q_UINT16  version;
  Q_UINT32  fileSize;      // Total size of the metafile in WORDs
  Q_UINT16  numOfObjects;    // Maximum Number of objects in the stack
  Q_UINT32  maxRecordSize;   // The size of largest record in WORDs
  Q_UINT16  numOfParameters; // not used (always 0)
};


struct WmfPlaceableHeader
{
  Q_UINT32  key;        // Magic number (always 9AC6CDD7h)
  Q_UINT16  handle;     // Metafile HANDLE number (always 0)
  Q_INT16   left;       // Left coordinate in metafile units
  Q_INT16   top;
  Q_INT16   right;
  Q_INT16   bottom;
  Q_UINT16  inch;       // Number of metafile units per inch
  Q_UINT32  reserved;
  Q_UINT16  checksum;   // Checksum value for previous 10 WORDs
};


struct WmfEnhMetaHeader
{
  Q_UINT32  recordType;       // Record type (is always 00000001h)
  Q_UINT32  recordSize;       // Record size in bytes.  This may be greater
                              // than the sizeof( ENHMETAHEADER ).
  Q_INT32   boundsLeft;       // Inclusive-inclusive bounds in device units
  Q_INT32   boundsTop;
  Q_INT32   boundsRight;
  Q_INT32   boundsBottom;
  Q_INT32   frameLeft;        // Inclusive-inclusive Picture Frame
  Q_INT32   frameTop;
  Q_INT32   frameRight;
  Q_INT32   frameBottom;
  Q_UINT32  signature;        // Signature.  Must be ENHMETA_SIGNATURE.
  Q_UINT32  version;          // Version number
  Q_UINT32  size;             // Size of the metafile in bytes
  Q_UINT32  numOfRecords;     // Number of records in the metafile
  Q_UINT16  numHandles;       // Number of handles in the handle table
  // Handle index zero is reserved.
  Q_UINT16  reserved;         // always 0
  Q_UINT32  sizeOfDescription;   // Number of chars in the unicode description string
                                 // This is 0 if there is no description string
  Q_UINT32  offsetOfDescription; // Offset to the metafile description record.
                                 // This is 0 if there is no description string
  Q_UINT32  numPaletteEntries;   // Number of color palette entries
  Q_INT32   widthDevicePixels;   // Size of the reference device in pixels
  Q_INT32   heightDevicePixels;
  Q_INT32   widthDeviceMM;       // Size of the reference device in millimeters
  Q_INT32   heightDeviceMM;
};


struct WmfMetaRecord
{
  Q_UINT32  size;         // Total size of the record in WORDs
  Q_UINT16  function;     // Record function number
  Q_UINT16  param[ 1 ];   // Q_UINT16 array of parameters
};


struct WmfEnhMetaRecord
{
  Q_UINT32  function;     // Record function number
  Q_UINT32  size;         // Record size in bytes
  Q_UINT32  param[ 1 ];   // Q_UINT32 array of parameters
};

// Static data
    static const struct OpTab
    {
        Q_UINT32  winRasterOp;
        Qt::RasterOp  qtRasterOp;
    } koWmfOpTab32[] =
    {
        { 0x00CC0020, Qt::CopyROP },
        { 0x00EE0086, Qt::OrROP },
        { 0x008800C6, Qt::AndROP },
        { 0x00660046, Qt::XorROP },
        { 0x00440328, Qt::AndNotROP },
        { 0x00330008, Qt::NotCopyROP },
        { 0x001100A6, Qt::NandROP },
        { 0x00C000CA, Qt::CopyROP },
        { 0x00BB0226, Qt::NotOrROP },
        { 0x00F00021, Qt::CopyROP },
        { 0x00FB0A09, Qt::CopyROP },
        { 0x005A0049, Qt::CopyROP },
        { 0x00550009, Qt::NotROP },
        { 0x00000042, Qt::ClearROP },
        { 0x00FF0062, Qt::SetROP }
    };

    static const Qt::RasterOp koWmfOpTab16[] =
    {
        Qt::CopyROP,
        Qt::ClearROP, Qt::NandROP, Qt::NotAndROP, Qt::NotCopyROP,
        Qt::AndNotROP, Qt::NotROP, Qt::XorROP, Qt::NorROP,
        Qt::AndROP, Qt::NotXorROP, Qt::NopROP, Qt::NotOrROP,
        Qt::CopyROP, Qt::OrNotROP, Qt::OrROP, Qt::SetROP
    };

    static const Qt::BrushStyle koWmfHatchedStyleBrush[] =
    {
        Qt::HorPattern,
        Qt::VerPattern,
        Qt::FDiagPattern,
        Qt::BDiagPattern,
        Qt::CrossPattern,
        Qt::DiagCrossPattern
    };

    static const Qt::BrushStyle koWmfStyleBrush[] =
    { Qt::SolidPattern,
      Qt::NoBrush,
      Qt::FDiagPattern,   /* hatched */
      Qt::Dense4Pattern,  /* should be custom bitmap pattern */
      Qt::HorPattern,     /* should be BS_INDEXED (?) */
      Qt::VerPattern,     /* should be device-independent bitmap */
      Qt::Dense6Pattern,  /* should be device-independent packed-bitmap */
      Qt::Dense2Pattern,  /* should be BS_PATTERN8x8 */
      Qt::Dense3Pattern   /* should be device-independent BS_DIBPATTERN8x8 */
    };

    static const Qt::PenStyle koWmfStylePen[] =
    { Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLine, Qt::DashDotDotLine,
      Qt::NoPen, Qt::SolidLine };

#endif