a few more wmf records ...
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/wmf_render@1568840 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfBitmap16.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfBitmap16.java
index 758e67a..68540ee 100644
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfBitmap16.java
+++ b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfBitmap16.java
@@ -8,6 +8,7 @@
import org.apache.poi.util.LittleEndianInputStream;
public class WmfBitmap16 {
+ final boolean isPartial;
int type;
int width;
int height;
@@ -15,6 +16,14 @@
int planes;
int bitsPixel;
+ public WmfBitmap16() {
+ this(false);
+ }
+
+ public WmfBitmap16(boolean isPartial) {
+ this.isPartial = isPartial;
+ }
+
public int init(LittleEndianInputStream leis) throws IOException {
// A 16-bit signed integer that defines the bitmap type.
type = leis.readShort();
@@ -35,9 +44,19 @@
// An 8-bit unsigned integer that defines the number of adjacent color bits on
// each plane.
bitsPixel = leis.readUByte();
+
+ int size = 2*LittleEndianConsts.BYTE_SIZE+4*LittleEndianConsts.SHORT_SIZE;
+ if (isPartial) {
+ // Bits (4 bytes): This field MUST be ignored.
+ long skipSize = leis.skip(LittleEndianConsts.INT_SIZE);
+ assert(skipSize == LittleEndianConsts.INT_SIZE);
+ // Reserved (18 bytes): This field MUST be ignored.
+ skipSize = leis.skip(18);
+ assert(skipSize == 18);
+ size += 18+LittleEndianConsts.INT_SIZE;
+ }
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
- int size = 2*LittleEndianConsts.BYTE_SIZE+4*LittleEndianConsts.SHORT_SIZE;
int size2 = 0;
byte buf[] = new byte[widthBytes];
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfDibCreatePatternBrush.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfDibCreatePatternBrush.java
deleted file mode 100644
index 716a22e..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfDibCreatePatternBrush.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_DIBCREATEPATTERNBRUSH record creates a Brush Object with a
- * pattern specified by a DeviceIndependentBitmap (DIB) Object
- */
-public class WmfDibCreatePatternBrush implements WmfRecord {
-
- /**
- * A 16-bit unsigned integer that defines the brush style. The legal values for this
- * field are defined as follows: if the value is not BS_PATTERN, BS_DIBPATTERNPT MUST be
- * assumed.
- */
- public static enum BrushStyle {
- /**
- * A brush that paints a single, constant color, either solid or dithered.
- */
- BS_SOLID(0x0000),
- /**
- * A brush that does nothing. Using a BS_NULL brush in a graphics operation
- * MUST have the same effect as using no brush at all.
- */
- BS_NULL(0x0001),
- /**
- * A brush that paints a predefined simple pattern, or "hatch", onto a solid background.
- */
- BS_HATCHED(0x0002),
- /**
- * A brush that paints a pattern defined by a bitmap, which MAY be a Bitmap16
- * Object or a DeviceIndependentBitmap (DIB) Object.
- */
- BS_PATTERN(0x0003),
- /**
- * Not supported
- */
- BS_INDEXED(0x0004),
- /**
- * A pattern brush specified by a DIB.
- */
- BS_DIBPATTERN(0x0005),
- /**
- * A pattern brush specified by a DIB.
- */
- BS_DIBPATTERNPT(0x0006),
- /**
- * Not supported
- */
- BS_PATTERN8X8(0x0007),
- /**
- * Not supported
- */
- BS_DIBPATTERN8X8(0x0008),
- /**
- * Not supported
- */
- BS_MONOPATTERN(0x0009);
-
- int flag;
- BrushStyle(int flag) {
- this.flag = flag;
- }
-
- static BrushStyle valueOf(int flag) {
- for (BrushStyle bs : values()) {
- if (bs.flag == flag) return bs;
- }
- return null;
- }
- }
-
- BrushStyle style;
-
- /**
- * A 16-bit unsigned integer that defines whether the Colors field of a DIB
- * Object contains explicit RGB values, or indexes into a palette.
- *
- * If the Style field specifies BS_PATTERN, a ColorUsage value of DIB_RGB_COLORS MUST be
- * used regardless of the contents of this field.
- *
- * If the Style field specified anything but BS_PATTERN, this field MUST be one of the values:
- * DIB_RGB_COLORS = 0x0000,
- * DIB_PAL_COLORS = 0x0001,
- * DIB_PAL_INDICES = 0x0002
- */
- int colorUsage;
-
- WmfBitmapDib patternDib;
- WmfBitmap16 pattern16;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.dibCreatePatternBrush;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- style = BrushStyle.valueOf(leis.readUShort());
- colorUsage = leis.readUShort();
- int size = 2*LittleEndianConsts.SHORT_SIZE;
- switch (style) {
- case BS_SOLID:
- case BS_NULL:
- case BS_DIBPATTERN:
- case BS_DIBPATTERNPT:
- case BS_HATCHED:
- patternDib = new WmfBitmapDib();
- size += patternDib.init(leis);
- break;
- case BS_PATTERN:
- pattern16 = new WmfBitmap16();
- size += pattern16.init(leis);
- break;
- case BS_INDEXED:
- case BS_DIBPATTERN8X8:
- case BS_MONOPATTERN:
- case BS_PATTERN8X8:
- throw new RuntimeException("pattern not supported");
- }
- return size;
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfDraw.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfDraw.java
index 27dfc9b..3ed8e50 100644
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfDraw.java
+++ b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfDraw.java
@@ -7,6 +7,33 @@
public class WmfDraw {
/**
+ * The META_MOVETO record sets the output position in the playback device context to a specified
+ * point.
+ */
+ public static class WmfMoveTo implements WmfRecord {
+
+ /**
+ * A 16-bit signed integer that defines the y-coordinate, in logical units.
+ */
+ int y;
+
+ /**
+ * A 16-bit signed integer that defines the x-coordinate, in logical units.
+ */
+ int x;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.moveTo;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ y = leis.readShort();
+ x = leis.readShort();
+ return 2*LittleEndianConsts.SHORT_SIZE;
+ }
+ }
+
+ /**
* The META_LINETO record draws a line from the drawing position that is defined in the playback
* device context up to, but not including, the specified point.
*/
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfFill.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfFill.java
index 44d504a..8497c77 100644
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfFill.java
+++ b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfFill.java
@@ -244,11 +244,10 @@
}
}
+ /**
+ */
public static class WmfStretchBlt implements WmfRecord {
/**
- */
-
- /**
* A 32-bit unsigned integer that defines how the source pixels, the current brush
* in the playback device context, and the destination pixels are to be combined to form the new
* image. This code MUST be one of the values in the Ternary Raster Operation Enumeration
@@ -337,6 +336,105 @@
}
}
+ /**
+ * The META_STRETCHDIB record specifies the transfer of color data from a
+ * block of pixels in deviceindependent format according to a raster operation,
+ * with possible expansion or contraction.
+ * The source of the color data is a DIB, and the destination of the transfer is
+ * the current output region in the playback device context.
+ */
+ public static class WmfStretchDib implements WmfRecord {
+ /**
+ * A 32-bit unsigned integer that defines how the source pixels, the current brush in
+ * the playback device context, and the destination pixels are to be combined to
+ * form the new image.
+ */
+ WmfTernaryRasterOp rasterOperation;
+
+ /**
+ * A 16-bit unsigned integer that defines whether the Colors field of the
+ * DIB contains explicit RGB values or indexes into a palette.
+ * This value MUST be in the ColorUsage Enumeration:
+ * DIB_RGB_COLORS = 0x0000,
+ * DIB_PAL_COLORS = 0x0001,
+ * DIB_PAL_INDICES = 0x0002
+ */
+ int colorUsage;
+ /**
+ * A 16-bit signed integer that defines the height, in logical units, of the
+ * source rectangle.
+ */
+ int srcHeight;
+ /**
+ * A 16-bit signed integer that defines the width, in logical units, of the
+ * source rectangle.
+ */
+ int srcWidth;
+ /**
+ * A 16-bit signed integer that defines the y-coordinate, in logical units, of the
+ * source rectangle.
+ */
+ int ySrc;
+ /**
+ * A 16-bit signed integer that defines the x-coordinate, in logical units, of the
+ * source rectangle.
+ */
+ int xSrc;
+ /**
+ * A 16-bit signed integer that defines the height, in logical units, of the
+ * destination rectangle.
+ */
+ int destHeight;
+ /**
+ * A 16-bit signed integer that defines the width, in logical units, of the
+ * destination rectangle.
+ */
+ int destWidth;
+ /**
+ * A 16-bit signed integer that defines the y-coordinate, in logical units, of the
+ * upper-left corner of the destination rectangle.
+ */
+ int yDst;
+ /**
+ * A 16-bit signed integer that defines the x-coordinate, in logical units, of the
+ * upper-left corner of the destination rectangle.
+ */
+ int xDst;
+ /**
+ * A variable-sized DeviceIndependentBitmap Object (section 2.2.2.9) that is the
+ * source of the color data.
+ */
+ WmfBitmapDib dib;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.stretchDib;
+ }
+
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ int rasterOpIndex = leis.readUShort();
+ int rasterOpCode = leis.readUShort();
+
+ rasterOperation = WmfTernaryRasterOp.fromOpIndex(rasterOpIndex);
+ assert(rasterOpCode == rasterOperation.opCode);
+
+ colorUsage = leis.readUShort();
+ srcHeight = leis.readShort();
+ srcWidth = leis.readShort();
+ ySrc = leis.readShort();
+ xSrc = leis.readShort();
+ destHeight = leis.readShort();
+ destWidth = leis.readShort();
+ yDst = leis.readShort();
+ xDst = leis.readShort();
+
+ int size = 11*LittleEndianConsts.SHORT_SIZE;
+ dib = new WmfBitmapDib();
+ size += dib.init(leis);
+ return size;
+ }
+ }
+
public static class WmfBitBlt implements WmfRecord {
/**
@@ -587,4 +685,93 @@
return size;
}
}
+
+ public static class WmfDibStretchBlt implements WmfRecord {
+ /**
+ * A 32-bit unsigned integer that defines how the source pixels, the current brush
+ * in the playback device context, and the destination pixels are to be combined to form the
+ * new image. This code MUST be one of the values in the Ternary Raster Operation Enumeration.
+ */
+ WmfTernaryRasterOp rasterOperation;
+ /**
+ * A 16-bit signed integer that defines the height, in logical units, of the source rectangle.
+ */
+ int srcHeight;
+ /**
+ * A 16-bit signed integer that defines the width, in logical units, of the source rectangle.
+ */
+ int srcWidth;
+ /**
+ * A 16-bit signed integer that defines the y-coordinate, in logical units, of the
+ * upper-left corner of the source rectangle.
+ */
+ int ySrc;
+ /**
+ * A 16-bit signed integer that defines the x-coordinate, in logical units, of the
+ * upper-left corner of the source rectangle.
+ */
+ int xSrc;
+ /**
+ * A 16-bit signed integer that defines the height, in logical units, of the
+ * destination rectangle.
+ */
+ int destHeight;
+ /**
+ * A 16-bit signed integer that defines the width, in logical units, of the
+ * destination rectangle.
+ */
+ int destWidth;
+ /**
+ * A 16-bit signed integer that defines the y-coordinate, in logical units,
+ * of the upper-left corner of the destination rectangle.
+ */
+ int yDest;
+ /**
+ * A 16-bit signed integer that defines the x-coordinate, in logical units,
+ * of the upper-left corner of the destination rectangle.
+ */
+ int xDest;
+ /**
+ * A variable-sized DeviceIndependentBitmap Object that defines image content.
+ * This object MUST be specified, even if the raster operation does not require a source.
+ */
+ WmfBitmapDib target;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.dibStretchBlt;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ boolean hasBitmap = (recordSize > ((recordFunction >> 8) + 3));
+
+ int size = 0;
+ int rasterOpIndex = leis.readUShort();
+ int rasterOpCode = leis.readUShort();
+
+ rasterOperation = WmfTernaryRasterOp.fromOpIndex(rasterOpIndex);
+ assert(rasterOpCode == rasterOperation.opCode);
+
+ srcHeight = leis.readShort();
+ srcWidth = leis.readShort();
+ ySrc = leis.readShort();
+ xSrc = leis.readShort();
+ size = 6*LittleEndianConsts.SHORT_SIZE;
+ if (!hasBitmap) {
+ @SuppressWarnings("unused")
+ int reserved = leis.readShort();
+ size += LittleEndianConsts.SHORT_SIZE;
+ }
+ destHeight = leis.readShort();
+ destWidth = leis.readShort();
+ yDest = leis.readShort();
+ xDest = leis.readShort();
+ size += 4*LittleEndianConsts.SHORT_SIZE;
+ if (hasBitmap) {
+ target = new WmfBitmapDib();
+ size += target.init(leis);
+ }
+
+ return size;
+ }
+ }
}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfMisc.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfMisc.java
new file mode 100644
index 0000000..ec9f091
--- /dev/null
+++ b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfMisc.java
@@ -0,0 +1,481 @@
+package org.apache.poi.hwmf.record;
+
+import java.io.IOException;
+
+import org.apache.poi.util.LittleEndianConsts;
+import org.apache.poi.util.LittleEndianInputStream;
+
+public class WmfMisc {
+ /**
+ * The META_SAVEDC record saves the playback device context for later retrieval.
+ */
+ public static class WmfSaveDc implements WmfRecord {
+ public WmfRecordType getRecordType() { return WmfRecordType.saveDc; }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ return 0;
+ }
+ }
+
+ /**
+ * The META_SETRELABS record is reserved and not supported.
+ */
+ public static class WmfSetRelabs implements WmfRecord {
+ public WmfRecordType getRecordType() { return WmfRecordType.setRelabs; }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ return 0;
+ }
+ }
+
+ /**
+ * The META_RESTOREDC record restores the playback device context from a previously saved device
+ * context.
+ */
+ public static class WmfRestoreDc implements WmfRecord {
+
+ /**
+ * nSavedDC (2 bytes): A 16-bit signed integer that defines the saved state to be restored. If this
+ * member is positive, nSavedDC represents a specific instance of the state to be restored. If
+ * this member is negative, nSavedDC represents an instance relative to the current state.
+ */
+ int nSavedDC;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.restoreDc;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ nSavedDC = leis.readShort();
+ return LittleEndianConsts.SHORT_SIZE;
+ }
+ }
+
+ /**
+ * The META_SETBKCOLOR record sets the background color in the playback device context to a
+ * specified color, or to the nearest physical color if the device cannot represent the specified color.
+ */
+ public static class WmfSetBkColor implements WmfRecord {
+
+ WmfColorRef colorRef;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.setBkColor;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ WmfColorRef colorRef = new WmfColorRef();
+ return colorRef.init(leis);
+ }
+ }
+
+ /**
+ * The META_SETBKMODE record defines the background raster operation mix mode in the playback
+ * device context. The background mix mode is the mode for combining pens, text, hatched brushes,
+ * and interiors of filled objects with background colors on the output surface.
+ */
+ public static class WmfSetBkMode implements WmfRecord {
+
+ /**
+ * A 16-bit unsigned integer that defines background mix mode.
+ * This MUST be either TRANSPARENT = 0x0001 or OPAQUE = 0x0002
+ */
+ int bkMode;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.setBkMode;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ bkMode = leis.readUShort();
+ return LittleEndianConsts.SHORT_SIZE;
+ }
+ }
+
+ /**
+ * The META_SETLAYOUT record defines the layout orientation in the playback device context.
+ * The layout orientation determines the direction in which text and graphics are drawn
+ */
+ public static class WmfSetLayout implements WmfRecord {
+
+ /**
+ * A 16-bit unsigned integer that defines the layout of text and graphics.
+ * LAYOUT_LTR = 0x0000
+ * LAYOUT_RTL = 0x0001
+ * LAYOUT_BITMAPORIENTATIONPRESERVED = 0x0008
+ */
+ int layout;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.setLayout;
+ }
+
+ @SuppressWarnings("unused")
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ layout = leis.readUShort();
+ // A 16-bit field that MUST be ignored.
+ int reserved = leis.readShort();
+ return 2*LittleEndianConsts.SHORT_SIZE;
+ }
+ }
+
+ /**
+ * The META_SETMAPMODE record defines the mapping mode in the playback device context.
+ * The mapping mode defines the unit of measure used to transform page-space units into
+ * device-space units, and also defines the orientation of the device's x and y axes.
+ */
+ public static class WmfSetMapMode implements WmfRecord {
+
+ /**
+ * A 16-bit unsigned integer that defines the mapping mode.
+ *
+ * The MapMode defines how logical units are mapped to physical units;
+ * that is, assuming that the origins in both the logical and physical coordinate systems
+ * are at the same point on the drawing surface, what is the physical coordinate (x',y')
+ * that corresponds to logical coordinate (x,y).
+ *
+ * For example, suppose the mapping mode is MM_TEXT. Given the following definition of that
+ * mapping mode, and an origin (0,0) at the top left corner of the drawing surface, logical
+ * coordinate (4,5) would map to physical coordinate (4,5) in pixels.
+ *
+ * Now suppose the mapping mode is MM_LOENGLISH, with the same origin as the previous
+ * example. Given the following definition of that mapping mode, logical coordinate (4,-5)
+ * would map to physical coordinate (0.04,0.05) in inches.
+ *
+ * This MUST be one of the following:
+ *
+ * MM_TEXT (= 0x0001):
+ * Each logical unit is mapped to one device pixel.
+ * Positive x is to the right; positive y is down.
+ *
+ * MM_LOMETRIC (= 0x0002):
+ * Each logical unit is mapped to 0.1 millimeter.
+ * Positive x is to the right; positive y is up.
+ *
+ * MM_HIMETRIC (= 0x0003):
+ * Each logical unit is mapped to 0.01 millimeter.
+ * Positive x is to the right; positive y is up.
+ *
+ * MM_LOENGLISH (= 0x0004):
+ * Each logical unit is mapped to 0.01 inch.
+ * Positive x is to the right; positive y is up.
+ *
+ * MM_HIENGLISH (= 0x0005):
+ * Each logical unit is mapped to 0.001 inch.
+ * Positive x is to the right; positive y is up.
+ *
+ * MM_TWIPS (= 0x0006):
+ * Each logical unit is mapped to one twentieth (1/20) of a point.
+ * In printing, a point is 1/72 of an inch; therefore, 1/20 of a point is 1/1440 of an inch.
+ * This unit is also known as a "twip".
+ * Positive x is to the right; positive y is up.
+ *
+ * MM_ISOTROPIC (= 0x0007):
+ * Logical units are mapped to arbitrary device units with equally scaled axes;
+ * that is, one unit along the x-axis is equal to one unit along the y-axis.
+ * The META_SETWINDOWEXT and META_SETVIEWPORTEXT records specify the units and the
+ * orientation of the axes.
+ * The processing application SHOULD make adjustments as necessary to ensure the x and y
+ * units remain the same size. For example, when the window extent is set, the viewport
+ * SHOULD be adjusted to keep the units isotropic.
+ *
+ * MM_ANISOTROPIC (= 0x0008):
+ * Logical units are mapped to arbitrary units with arbitrarily scaled axes.
+ */
+ int mapMode;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.setMapMode;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ mapMode = leis.readUShort();
+ return LittleEndianConsts.SHORT_SIZE;
+ }
+ }
+
+ /**
+ * The META_SETMAPPERFLAGS record defines the algorithm that the font mapper uses when it maps
+ * logical fonts to physical fonts.
+ */
+ public static class WmfSetMapperFlags implements WmfRecord {
+
+ /**
+ * A 32-bit unsigned integer that defines whether the font mapper should attempt to
+ * match a font's aspect ratio to the current device's aspect ratio. If bit 0 is
+ * set, the mapper selects only matching fonts.
+ */
+ long mapperValues;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.setMapperFlags;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ mapperValues = leis.readUInt();
+ return LittleEndianConsts.INT_SIZE;
+ }
+ }
+
+ /**
+ * The META_SETROP2 record defines the foreground raster operation mix mode in the playback device
+ * context. The foreground mix mode is the mode for combining pens and interiors of filled objects with
+ * foreground colors on the output surface.
+ */
+ public static class WmfSetRop2 implements WmfRecord {
+
+ /**
+ * A 16-bit unsigned integer that defines the foreground binary raster
+ * operation mixing mode. This MUST be one of the values:
+ * R2_BLACK = 0x0001,
+ * R2_NOTMERGEPEN = 0x0002,
+ * R2_MASKNOTPEN = 0x0003,
+ * R2_NOTCOPYPEN = 0x0004,
+ * R2_MASKPENNOT = 0x0005,
+ * R2_NOT = 0x0006,
+ * R2_XORPEN = 0x0007,
+ * R2_NOTMASKPEN = 0x0008,
+ * R2_MASKPEN = 0x0009,
+ * R2_NOTXORPEN = 0x000A,
+ * R2_NOP = 0x000B,
+ * R2_MERGENOTPEN = 0x000C,
+ * R2_COPYPEN = 0x000D,
+ * R2_MERGEPENNOT = 0x000E,
+ * R2_MERGEPEN = 0x000F,
+ * R2_WHITE = 0x0010
+ */
+ int drawMode;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.setRop2;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ drawMode = leis.readUShort();
+ return LittleEndianConsts.SHORT_SIZE;
+ }
+ }
+
+ /**
+ * The META_SETSTRETCHBLTMODE record defines the bitmap stretching mode in the playback device
+ * context.
+ */
+ public static class WmfSetStretchBltMode implements WmfRecord {
+
+ /**
+ * A 16-bit unsigned integer that defines bitmap stretching mode.
+ * This MUST be one of the values:
+ * BLACKONWHITE = 0x0001,
+ * WHITEONBLACK = 0x0002,
+ * COLORONCOLOR = 0x0003,
+ * HALFTONE = 0x0004
+ */
+ int setStretchBltMode;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.setStretchBltMode;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ setStretchBltMode = leis.readUShort();
+ return LittleEndianConsts.SHORT_SIZE;
+ }
+ }
+
+ /**
+ * The META_DIBCREATEPATTERNBRUSH record creates a Brush Object with a
+ * pattern specified by a DeviceIndependentBitmap (DIB) Object
+ */
+ public static class WmfDibCreatePatternBrush implements WmfRecord {
+
+ /**
+ * A 16-bit unsigned integer that defines the brush style. The legal values for this
+ * field are defined as follows: if the value is not BS_PATTERN, BS_DIBPATTERNPT MUST be
+ * assumed.
+ */
+ public static enum BrushStyle {
+ /**
+ * A brush that paints a single, constant color, either solid or dithered.
+ */
+ BS_SOLID(0x0000),
+ /**
+ * A brush that does nothing. Using a BS_NULL brush in a graphics operation
+ * MUST have the same effect as using no brush at all.
+ */
+ BS_NULL(0x0001),
+ /**
+ * A brush that paints a predefined simple pattern, or "hatch", onto a solid background.
+ */
+ BS_HATCHED(0x0002),
+ /**
+ * A brush that paints a pattern defined by a bitmap, which MAY be a Bitmap16
+ * Object or a DeviceIndependentBitmap (DIB) Object.
+ */
+ BS_PATTERN(0x0003),
+ /**
+ * Not supported
+ */
+ BS_INDEXED(0x0004),
+ /**
+ * A pattern brush specified by a DIB.
+ */
+ BS_DIBPATTERN(0x0005),
+ /**
+ * A pattern brush specified by a DIB.
+ */
+ BS_DIBPATTERNPT(0x0006),
+ /**
+ * Not supported
+ */
+ BS_PATTERN8X8(0x0007),
+ /**
+ * Not supported
+ */
+ BS_DIBPATTERN8X8(0x0008),
+ /**
+ * Not supported
+ */
+ BS_MONOPATTERN(0x0009);
+
+ int flag;
+ BrushStyle(int flag) {
+ this.flag = flag;
+ }
+
+ static BrushStyle valueOf(int flag) {
+ for (BrushStyle bs : values()) {
+ if (bs.flag == flag) return bs;
+ }
+ return null;
+ }
+ }
+
+ BrushStyle style;
+
+ /**
+ * A 16-bit unsigned integer that defines whether the Colors field of a DIB
+ * Object contains explicit RGB values, or indexes into a palette.
+ *
+ * If the Style field specifies BS_PATTERN, a ColorUsage value of DIB_RGB_COLORS MUST be
+ * used regardless of the contents of this field.
+ *
+ * If the Style field specified anything but BS_PATTERN, this field MUST be one of the values:
+ * DIB_RGB_COLORS = 0x0000,
+ * DIB_PAL_COLORS = 0x0001,
+ * DIB_PAL_INDICES = 0x0002
+ */
+ int colorUsage;
+
+ WmfBitmapDib patternDib;
+ WmfBitmap16 pattern16;
+
+ public WmfRecordType getRecordType() {
+ return WmfRecordType.dibCreatePatternBrush;
+ }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ style = BrushStyle.valueOf(leis.readUShort());
+ colorUsage = leis.readUShort();
+ int size = 2*LittleEndianConsts.SHORT_SIZE;
+ switch (style) {
+ case BS_SOLID:
+ case BS_NULL:
+ case BS_DIBPATTERN:
+ case BS_DIBPATTERNPT:
+ case BS_HATCHED:
+ patternDib = new WmfBitmapDib();
+ size += patternDib.init(leis);
+ break;
+ case BS_PATTERN:
+ pattern16 = new WmfBitmap16();
+ size += pattern16.init(leis);
+ break;
+ case BS_INDEXED:
+ case BS_DIBPATTERN8X8:
+ case BS_MONOPATTERN:
+ case BS_PATTERN8X8:
+ throw new RuntimeException("pattern not supported");
+ }
+ return size;
+ }
+ }
+
+ /**
+ * The META_DELETEOBJECT record deletes an object, including Bitmap16, Brush,
+ * DeviceIndependentBitmap, Font, Palette, Pen, and Region. After the object is deleted,
+ * its index in the WMF Object Table is no longer valid but is available to be reused.
+ */
+ public static class WmfDeleteObject implements WmfRecord {
+ /**
+ * A 16-bit unsigned integer used to index into the WMF Object Table to
+ get the object to be deleted.
+ */
+ int objectIndex;
+
+ public WmfRecordType getRecordType() { return WmfRecordType.deleteObject; }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ objectIndex = leis.readUShort();
+ return LittleEndianConsts.SHORT_SIZE;
+ }
+ }
+
+ public static class WmfCreatePatternBrush implements WmfRecord {
+
+ WmfBitmap16 pattern;
+
+ public WmfRecordType getRecordType() { return WmfRecordType.createPatternBrush; }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ pattern = new WmfBitmap16(true);
+ return pattern.init(leis);
+ }
+ }
+
+ public static class WmfCreatePenIndirect implements WmfRecord {
+
+ /**
+ * A 16-bit unsigned integer that specifies the pen style.
+ * The value MUST be defined from the PenStyle Enumeration table.
+ *
+ * PS_COSMETIC = 0x0000,
+ * PS_ENDCAP_ROUND = 0x0000,
+ * PS_JOIN_ROUND = 0x0000,
+ * PS_SOLID = 0x0000,
+ * PS_DASH = 0x0001,
+ * PS_DOT = 0x0002,
+ * PS_DASHDOT = 0x0003,
+ * PS_DASHDOTDOT = 0x0004,
+ * PS_NULL = 0x0005,
+ * PS_INSIDEFRAME = 0x0006,
+ * PS_USERSTYLE = 0x0007,
+ * PS_ALTERNATE = 0x0008,
+ * PS_ENDCAP_SQUARE = 0x0100,
+ * PS_ENDCAP_FLAT = 0x0200,
+ * PS_JOIN_BEVEL = 0x1000,
+ * PS_JOIN_MITER = 0x2000
+ */
+ int penStyle;
+ /**
+ * A 32-bit PointS Object that specifies a point for the object dimensions.
+ * The xcoordinate is the pen width. The y-coordinate is ignored.
+ */
+ int xWidth, yWidth;
+ /**
+ * A 32-bit ColorRef Object that specifies the pen color value.
+ */
+ WmfColorRef colorRef;
+
+ public WmfRecordType getRecordType() { return WmfRecordType.createPatternBrush; }
+
+ public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
+ penStyle = leis.readUShort();
+ xWidth = leis.readShort();
+ yWidth = leis.readShort();
+ colorRef = new WmfColorRef();
+ int size = 3*LittleEndianConsts.SHORT_SIZE;
+ size += colorRef.init(leis);
+ return size;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfMoveTo.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfMoveTo.java
deleted file mode 100644
index 2fc3531..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfMoveTo.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_MOVETO record sets the output position in the playback device context to a specified
- * point.
- */
-public class WmfMoveTo implements WmfRecord {
-
- /**
- * A 16-bit signed integer that defines the y-coordinate, in logical units.
- */
- int y;
-
- /**
- * A 16-bit signed integer that defines the x-coordinate, in logical units.
- */
- int x;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.moveTo;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- y = leis.readShort();
- x = leis.readShort();
- return 2*LittleEndianConsts.SHORT_SIZE;
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfNoArg.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfNoArg.java
deleted file mode 100644
index 0046bf0..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfNoArg.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianInputStream;
-
-public class WmfNoArg {
- protected static abstract class WmfNoArgParent implements WmfRecord {
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- return 0;
- }
- }
-
- /**
- * The META_SAVEDC record saves the playback device context for later retrieval.
- */
- public static class WmfSaveDc extends WmfNoArgParent {
- public WmfRecordType getRecordType() { return WmfRecordType.saveDc; }
- }
-
- /**
- * The META_SETRELABS record is reserved and not supported.
- */
- public static class WmfSetRelabs extends WmfNoArgParent {
- public WmfRecordType getRecordType() { return WmfRecordType.setRelabs; }
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfRecordType.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfRecordType.java
index d97b362..b3c91ab 100644
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfRecordType.java
+++ b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfRecordType.java
@@ -4,25 +4,25 @@
eof(0x0000, null),
realizePalette(0x0035, WmfPalette.WmfRealizePalette.class),
setPalEntries(0x0037, WmfPalette.WmfSetPaletteEntries.class),
- setBkMode(0x0102, WmfSetBkMode.class),
- setMapMode(0x0103, WmfSetMapMode.class),
- setRop2(0x0104, WmfSetRop2.class),
- setRelabs(0x0105, WmfNoArg.WmfSetRelabs.class),
+ setBkMode(0x0102, WmfMisc.WmfSetBkMode.class),
+ setMapMode(0x0103, WmfMisc.WmfSetMapMode.class),
+ setRop2(0x0104, WmfMisc.WmfSetRop2.class),
+ setRelabs(0x0105, WmfMisc.WmfSetRelabs.class),
setPolyFillMode(0x0106, WmfFill.WmfSetPolyfillMode.class),
- setStretchBltMode(0x0107, WmfSetStretchBltMode.class),
+ setStretchBltMode(0x0107, WmfMisc.WmfSetStretchBltMode.class),
setTextCharExtra(0x0108, WmfText.WmfSetTextCharExtra.class),
- restoreDc(0x0127, WmfRestoreDc.class),
+ restoreDc(0x0127, WmfMisc.WmfRestoreDc.class),
resizePalette(0x0139, WmfPalette.WmfResizePalette.class),
- dibCreatePatternBrush(0x0142, WmfDibCreatePatternBrush.class),
- setLayout(0x0149, WmfSetLayout.class),
- setBkColor(0x0201, WmfSetBkColor.class),
+ dibCreatePatternBrush(0x0142, WmfMisc.WmfDibCreatePatternBrush.class),
+ setLayout(0x0149, WmfMisc.WmfSetLayout.class),
+ setBkColor(0x0201, WmfMisc.WmfSetBkColor.class),
setTextColor(0x0209, WmfText.WmfSetTextColor.class),
offsetViewportOrg(0x0211, WmfWindowing.WmfOffsetViewportOrg.class),
lineTo(0x0213, WmfDraw.WmfLineTo.class),
- moveTo(0x0214, WmfMoveTo.class),
+ moveTo(0x0214, WmfDraw.WmfMoveTo.class),
offsetClipRgn(0x0220, WmfWindowing.WmfOffsetClipRgn.class),
fillRegion(0x0228, WmfFill.WmfFillRegion.class),
- setMapperFlags(0x0231, WmfSetMapperFlags.class),
+ setMapperFlags(0x0231, WmfMisc.WmfSetMapperFlags.class),
selectPalette(0x0234, WmfPalette.WmfSelectPalette.class),
polygon(0x0324, WmfDraw.WmfPolygon.class),
polyline(0x0325, WmfDraw.WmfPolyline.class),
@@ -47,7 +47,7 @@
setPixel(0x041f, WmfDraw.WmfSetPixel.class),
roundRect(0x061c, WmfDraw.WmfRoundRect.class),
patBlt(0x061d, WmfFill.WmfPatBlt.class),
- saveDc(0x001e, WmfNoArg.WmfSaveDc.class),
+ saveDc(0x001e, WmfMisc.WmfSaveDc.class),
pie(0x081a, WmfDraw.WmfPie.class),
stretchBlt(0x0b23, WmfFill.WmfStretchBlt.class),
escape(0x0626, WmfEscape.class),
@@ -62,12 +62,12 @@
extTextOut(0x0a32, WmfText.WmfExtTextOut.class),
setDibToDev(0x0d33, WmfFill.WmfSetDibToDev.class),
dibBitBlt(0x0940, WmfFill.WmfDibBitBlt.class),
- dibStretchBlt(0x0b41, null),
- stretchDib(0x0f43, null),
- deleteObject(0x01f0, null),
+ dibStretchBlt(0x0b41, WmfFill.WmfDibStretchBlt.class),
+ stretchDib(0x0f43, WmfFill.WmfStretchDib.class),
+ deleteObject(0x01f0, WmfMisc.WmfDeleteObject.class),
createPalette(0x00f7, WmfPalette.WmfCreatePalette.class),
- createPatternBrush(0x01f9, null),
- createPenIndirect(0x02fa, null),
+ createPatternBrush(0x01f9, WmfMisc.WmfCreatePatternBrush.class),
+ createPenIndirect(0x02fa, WmfMisc.WmfCreatePenIndirect.class),
createFontIndirect(0x02fb, null),
createBrushIndirect(0x02fc, null),
createRegion(0x06ff, null);
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfRestoreDc.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfRestoreDc.java
deleted file mode 100644
index 8642fbd..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfRestoreDc.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_RESTOREDC record restores the playback device context from a previously saved device
- * context.
- */
-public class WmfRestoreDc implements WmfRecord {
-
- /**
- * nSavedDC (2 bytes): A 16-bit signed integer that defines the saved state to be restored. If this
- * member is positive, nSavedDC represents a specific instance of the state to be restored. If
- * this member is negative, nSavedDC represents an instance relative to the current state.
- */
- int nSavedDC;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.restoreDc;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- nSavedDC = leis.readShort();
- return LittleEndianConsts.SHORT_SIZE;
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetBkColor.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetBkColor.java
deleted file mode 100644
index d0175c3..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetBkColor.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_SETBKCOLOR record sets the background color in the playback device context to a
- * specified color, or to the nearest physical color if the device cannot represent the specified color.
- */
-public class WmfSetBkColor implements WmfRecord {
-
- WmfColorRef colorRef;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.setBkColor;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- WmfColorRef colorRef = new WmfColorRef();
- return colorRef.init(leis);
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetBkMode.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetBkMode.java
deleted file mode 100644
index 407cda4..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetBkMode.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_SETBKMODE record defines the background raster operation mix mode in the playback
- * device context. The background mix mode is the mode for combining pens, text, hatched brushes,
- * and interiors of filled objects with background colors on the output surface.
- */
-public class WmfSetBkMode implements WmfRecord {
-
- /**
- * A 16-bit unsigned integer that defines background mix mode.
- * This MUST be either TRANSPARENT = 0x0001 or OPAQUE = 0x0002
- */
- int bkMode;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.setBkMode;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- bkMode = leis.readUShort();
- return LittleEndianConsts.SHORT_SIZE;
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetLayout.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetLayout.java
deleted file mode 100644
index c1411ed..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetLayout.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_SETLAYOUT record defines the layout orientation in the playback device context.
- * The layout orientation determines the direction in which text and graphics are drawn
- */
-public class WmfSetLayout implements WmfRecord {
-
- /**
- * A 16-bit unsigned integer that defines the layout of text and graphics.
- * LAYOUT_LTR = 0x0000
- * LAYOUT_RTL = 0x0001
- * LAYOUT_BITMAPORIENTATIONPRESERVED = 0x0008
- */
- int layout;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.setLayout;
- }
-
- @SuppressWarnings("unused")
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- layout = leis.readUShort();
- // A 16-bit field that MUST be ignored.
- int reserved = leis.readShort();
- return 2*LittleEndianConsts.SHORT_SIZE;
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetMapMode.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetMapMode.java
deleted file mode 100644
index e717750..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetMapMode.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_SETMAPMODE record defines the mapping mode in the playback device context.
- * The mapping mode defines the unit of measure used to transform page-space units into
- * device-space units, and also defines the orientation of the device's x and y axes.
- */
-public class WmfSetMapMode implements WmfRecord {
-
- /**
- * A 16-bit unsigned integer that defines the mapping mode.
- *
- * The MapMode defines how logical units are mapped to physical units;
- * that is, assuming that the origins in both the logical and physical coordinate systems
- * are at the same point on the drawing surface, what is the physical coordinate (x',y')
- * that corresponds to logical coordinate (x,y).
- *
- * For example, suppose the mapping mode is MM_TEXT. Given the following definition of that
- * mapping mode, and an origin (0,0) at the top left corner of the drawing surface, logical
- * coordinate (4,5) would map to physical coordinate (4,5) in pixels.
- *
- * Now suppose the mapping mode is MM_LOENGLISH, with the same origin as the previous
- * example. Given the following definition of that mapping mode, logical coordinate (4,-5)
- * would map to physical coordinate (0.04,0.05) in inches.
- *
- * This MUST be one of the following:
- *
- * MM_TEXT (= 0x0001):
- * Each logical unit is mapped to one device pixel.
- * Positive x is to the right; positive y is down.
- *
- * MM_LOMETRIC (= 0x0002):
- * Each logical unit is mapped to 0.1 millimeter.
- * Positive x is to the right; positive y is up.
- *
- * MM_HIMETRIC (= 0x0003):
- * Each logical unit is mapped to 0.01 millimeter.
- * Positive x is to the right; positive y is up.
- *
- * MM_LOENGLISH (= 0x0004):
- * Each logical unit is mapped to 0.01 inch.
- * Positive x is to the right; positive y is up.
- *
- * MM_HIENGLISH (= 0x0005):
- * Each logical unit is mapped to 0.001 inch.
- * Positive x is to the right; positive y is up.
- *
- * MM_TWIPS (= 0x0006):
- * Each logical unit is mapped to one twentieth (1/20) of a point.
- * In printing, a point is 1/72 of an inch; therefore, 1/20 of a point is 1/1440 of an inch.
- * This unit is also known as a "twip".
- * Positive x is to the right; positive y is up.
- *
- * MM_ISOTROPIC (= 0x0007):
- * Logical units are mapped to arbitrary device units with equally scaled axes;
- * that is, one unit along the x-axis is equal to one unit along the y-axis.
- * The META_SETWINDOWEXT and META_SETVIEWPORTEXT records specify the units and the
- * orientation of the axes.
- * The processing application SHOULD make adjustments as necessary to ensure the x and y
- * units remain the same size. For example, when the window extent is set, the viewport
- * SHOULD be adjusted to keep the units isotropic.
- *
- * MM_ANISOTROPIC (= 0x0008):
- * Logical units are mapped to arbitrary units with arbitrarily scaled axes.
- */
- int mapMode;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.setMapMode;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- mapMode = leis.readUShort();
- return LittleEndianConsts.SHORT_SIZE;
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetMapperFlags.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetMapperFlags.java
deleted file mode 100644
index 49ea24e..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetMapperFlags.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_SETMAPPERFLAGS record defines the algorithm that the font mapper uses when it maps
- * logical fonts to physical fonts.
- */
-public class WmfSetMapperFlags implements WmfRecord {
-
- /**
- * A 32-bit unsigned integer that defines whether the font mapper should attempt to
- * match a font's aspect ratio to the current device's aspect ratio. If bit 0 is
- * set, the mapper selects only matching fonts.
- */
- long mapperValues;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.setMapperFlags;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- mapperValues = leis.readUInt();
- return LittleEndianConsts.INT_SIZE;
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetRop2.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetRop2.java
deleted file mode 100644
index 3ba9e5f..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetRop2.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_SETROP2 record defines the foreground raster operation mix mode in the playback device
- * context. The foreground mix mode is the mode for combining pens and interiors of filled objects with
- * foreground colors on the output surface.
- */
-public class WmfSetRop2 implements WmfRecord {
-
- /**
- * A 16-bit unsigned integer that defines the foreground binary raster
- * operation mixing mode. This MUST be one of the values:
- * R2_BLACK = 0x0001,
- * R2_NOTMERGEPEN = 0x0002,
- * R2_MASKNOTPEN = 0x0003,
- * R2_NOTCOPYPEN = 0x0004,
- * R2_MASKPENNOT = 0x0005,
- * R2_NOT = 0x0006,
- * R2_XORPEN = 0x0007,
- * R2_NOTMASKPEN = 0x0008,
- * R2_MASKPEN = 0x0009,
- * R2_NOTXORPEN = 0x000A,
- * R2_NOP = 0x000B,
- * R2_MERGENOTPEN = 0x000C,
- * R2_COPYPEN = 0x000D,
- * R2_MERGEPENNOT = 0x000E,
- * R2_MERGEPEN = 0x000F,
- * R2_WHITE = 0x0010
- */
- int drawMode;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.setRop2;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- drawMode = leis.readUShort();
- return LittleEndianConsts.SHORT_SIZE;
- }
-}
diff --git a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetStretchBltMode.java b/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetStretchBltMode.java
deleted file mode 100644
index ce127b5..0000000
--- a/src/scratchpad/src/org/apache/poi/hwmf/record/WmfSetStretchBltMode.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.apache.poi.hwmf.record;
-
-import java.io.IOException;
-
-import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.LittleEndianInputStream;
-
-/**
- * The META_SETSTRETCHBLTMODE record defines the bitmap stretching mode in the playback device
- * context.
- */
-public class WmfSetStretchBltMode implements WmfRecord {
-
- /**
- * A 16-bit unsigned integer that defines bitmap stretching mode.
- * This MUST be one of the values:
- * BLACKONWHITE = 0x0001,
- * WHITEONBLACK = 0x0002,
- * COLORONCOLOR = 0x0003,
- * HALFTONE = 0x0004
- */
- int setStretchBltMode;
-
- public WmfRecordType getRecordType() {
- return WmfRecordType.setStretchBltMode;
- }
-
- public int init(LittleEndianInputStream leis, long recordSize, int recordFunction) throws IOException {
- setStretchBltMode = leis.readUShort();
- return LittleEndianConsts.SHORT_SIZE;
- }
-}