3458 lines
149 KiB
JavaScript
3458 lines
149 KiB
JavaScript
|
(function webpackUniversalModuleDefinition(root, factory) {
|
||
|
if(typeof exports === 'object' && typeof module === 'object')
|
||
|
module.exports = factory();
|
||
|
else if(typeof define === 'function' && define.amd)
|
||
|
define([], factory);
|
||
|
else if(typeof exports === 'object')
|
||
|
exports["WMFJS"] = factory();
|
||
|
else
|
||
|
root["WMFJS"] = factory();
|
||
|
})(this, () => {
|
||
|
return /******/ (() => { // webpackBootstrap
|
||
|
/******/ "use strict";
|
||
|
/******/ var __webpack_modules__ = ({
|
||
|
|
||
|
/***/ "./src/util/SVG.ts":
|
||
|
/*!*************************!*\
|
||
|
!*** ./src/util/SVG.ts ***!
|
||
|
\*************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "SVG": () => (/* binding */ SVG),
|
||
|
/* harmony export */ "SVGFilters": () => (/* binding */ SVGFilters),
|
||
|
/* harmony export */ "SVGPathBuilder": () => (/* binding */ SVGPathBuilder)
|
||
|
/* harmony export */ });
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2020 Ynse Hoornenborg
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
var SVGFilters = /** @class */ (function () {
|
||
|
function SVGFilters() {
|
||
|
}
|
||
|
SVGFilters.prototype.flood = function (filter, resultId, color, opacity, _settings) {
|
||
|
var floodElement = document.createElementNS("http://www.w3.org/2000/svg", "feFlood");
|
||
|
if (resultId) {
|
||
|
floodElement.setAttribute("id", resultId);
|
||
|
}
|
||
|
floodElement.setAttribute("flood-color", color);
|
||
|
floodElement.setAttribute("flood-opacity", opacity.toString());
|
||
|
filter.appendChild(floodElement);
|
||
|
};
|
||
|
SVGFilters.prototype.composite = function (filter, resultId, in1, in2, k1, k2, k3, k4, _settings) {
|
||
|
var compositeElement = document.createElementNS("http://www.w3.org/2000/svg", "feComposite");
|
||
|
if (resultId) {
|
||
|
compositeElement.setAttribute("id", resultId);
|
||
|
}
|
||
|
compositeElement.setAttribute("in", in1);
|
||
|
compositeElement.setAttribute("in2", in2);
|
||
|
filter.appendChild(compositeElement);
|
||
|
};
|
||
|
return SVGFilters;
|
||
|
}());
|
||
|
|
||
|
var SVGPathBuilder = /** @class */ (function () {
|
||
|
function SVGPathBuilder() {
|
||
|
this._path = "";
|
||
|
}
|
||
|
SVGPathBuilder.prototype.move = function (x, y) {
|
||
|
this._path += " M ".concat(x, " ").concat(y);
|
||
|
};
|
||
|
SVGPathBuilder.prototype.path = function () {
|
||
|
return this._path.substr(1);
|
||
|
};
|
||
|
SVGPathBuilder.prototype.line = function (pts) {
|
||
|
var _this = this;
|
||
|
pts.forEach(function (point) {
|
||
|
_this._path += " L ".concat(point[0], " ").concat(point[1]);
|
||
|
});
|
||
|
};
|
||
|
SVGPathBuilder.prototype.curveC = function (x1, y1, x2, y2, x, y) {
|
||
|
this._path += " C ".concat(x1, " ").concat(y1, ", ").concat(x2, " ").concat(y2, ", ").concat(x, " ").concat(y);
|
||
|
};
|
||
|
SVGPathBuilder.prototype.close = function () {
|
||
|
this._path += " Z";
|
||
|
};
|
||
|
return SVGPathBuilder;
|
||
|
}());
|
||
|
|
||
|
var SVG = /** @class */ (function () {
|
||
|
function SVG(svg) {
|
||
|
this.filters = new SVGFilters();
|
||
|
this._defs = undefined;
|
||
|
this._svg = svg;
|
||
|
}
|
||
|
SVG.prototype.svg = function (parent, x, y, width, height, settings) {
|
||
|
var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
||
|
svgElement.setAttribute("x", x.toString());
|
||
|
svgElement.setAttribute("y", y.toString());
|
||
|
svgElement.setAttribute("width", width.toString());
|
||
|
svgElement.setAttribute("height", height.toString());
|
||
|
this._appendSettings(settings, svgElement);
|
||
|
if (parent != null) {
|
||
|
parent.appendChild(svgElement);
|
||
|
}
|
||
|
else {
|
||
|
this._svg.appendChild(svgElement);
|
||
|
}
|
||
|
return svgElement;
|
||
|
};
|
||
|
SVG.prototype.image = function (parent, x, y, width, height, url, settings) {
|
||
|
var imageElement = document.createElementNS("http://www.w3.org/2000/svg", "image");
|
||
|
imageElement.setAttribute("x", x.toString());
|
||
|
imageElement.setAttribute("y", y.toString());
|
||
|
imageElement.setAttribute("width", width.toString());
|
||
|
imageElement.setAttribute("height", height.toString());
|
||
|
imageElement.setAttributeNS("http://www.w3.org/1999/xlink", "href", url);
|
||
|
this._appendSettings(settings, imageElement);
|
||
|
parent.appendChild(imageElement);
|
||
|
return imageElement;
|
||
|
};
|
||
|
SVG.prototype.rect = function (parent, x, y, width, height, rx, ry, settings) {
|
||
|
var rectElement = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
||
|
rectElement.setAttribute("x", x.toString());
|
||
|
rectElement.setAttribute("y", y.toString());
|
||
|
rectElement.setAttribute("width", width.toString());
|
||
|
rectElement.setAttribute("height", height.toString());
|
||
|
if (rx !== undefined) {
|
||
|
if (rx instanceof Number) {
|
||
|
rectElement.setAttribute("rx", rx.toString());
|
||
|
}
|
||
|
else if (rx instanceof Object) {
|
||
|
this._appendSettings(rx, rectElement);
|
||
|
}
|
||
|
}
|
||
|
if (ry !== undefined) {
|
||
|
rectElement.setAttribute("ry", ry.toString());
|
||
|
}
|
||
|
this._appendSettings(settings, rectElement);
|
||
|
parent.appendChild(rectElement);
|
||
|
return rectElement;
|
||
|
};
|
||
|
SVG.prototype.line = function (parent, x1, y1, x2, y2, settings) {
|
||
|
var lineElement = document.createElementNS("http://www.w3.org/2000/svg", "line");
|
||
|
lineElement.setAttribute("x1", x1.toString());
|
||
|
lineElement.setAttribute("y1", y1.toString());
|
||
|
lineElement.setAttribute("x2", x2.toString());
|
||
|
lineElement.setAttribute("y2", y2.toString());
|
||
|
this._appendSettings(settings, lineElement);
|
||
|
parent.appendChild(lineElement);
|
||
|
return lineElement;
|
||
|
};
|
||
|
SVG.prototype.polygon = function (parent, points, settings) {
|
||
|
var polygonElement = document.createElementNS("http://www.w3.org/2000/svg", "polygon");
|
||
|
polygonElement.setAttribute("points", points.map(function (point) { return point.join(","); }).join(" "));
|
||
|
this._appendSettings(settings, polygonElement);
|
||
|
parent.appendChild(polygonElement);
|
||
|
return polygonElement;
|
||
|
};
|
||
|
SVG.prototype.polyline = function (parent, points, settings) {
|
||
|
var polylineElement = document.createElementNS("http://www.w3.org/2000/svg", "polyline");
|
||
|
polylineElement.setAttribute("points", points.map(function (point) { return point.join(","); }).join(" "));
|
||
|
this._appendSettings(settings, polylineElement);
|
||
|
parent.appendChild(polylineElement);
|
||
|
return polylineElement;
|
||
|
};
|
||
|
SVG.prototype.ellipse = function (parent, cx, cy, rx, ry, settings) {
|
||
|
var ellipseElement = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
|
||
|
ellipseElement.setAttribute("cx", cx.toString());
|
||
|
ellipseElement.setAttribute("cy", cy.toString());
|
||
|
ellipseElement.setAttribute("rx", rx.toString());
|
||
|
ellipseElement.setAttribute("ry", ry.toString());
|
||
|
this._appendSettings(settings, ellipseElement);
|
||
|
parent.appendChild(ellipseElement);
|
||
|
return ellipseElement;
|
||
|
};
|
||
|
SVG.prototype.path = function (parent, builder, settings) {
|
||
|
var pathElement = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
||
|
pathElement.setAttribute("d", builder.path());
|
||
|
this._appendSettings(settings, pathElement);
|
||
|
parent.appendChild(pathElement);
|
||
|
return pathElement;
|
||
|
};
|
||
|
SVG.prototype.text = function (parent, x, y, value, settings) {
|
||
|
var textElement = document.createElementNS("http://www.w3.org/2000/svg", "text");
|
||
|
textElement.setAttribute("x", x.toString());
|
||
|
textElement.setAttribute("y", y.toString());
|
||
|
this._appendSettings(settings, textElement);
|
||
|
var textNode = document.createTextNode(value);
|
||
|
textElement.appendChild(textNode);
|
||
|
parent.appendChild(textElement);
|
||
|
return textElement;
|
||
|
};
|
||
|
SVG.prototype.filter = function (parent, id, x, y, width, height, settings) {
|
||
|
var filterElement = document.createElementNS("http://www.w3.org/2000/svg", "filter");
|
||
|
filterElement.setAttribute("x", x.toString());
|
||
|
filterElement.setAttribute("y", y.toString());
|
||
|
filterElement.setAttribute("width", width.toString());
|
||
|
filterElement.setAttribute("height", height.toString());
|
||
|
this._appendSettings(settings, filterElement);
|
||
|
parent.appendChild(filterElement);
|
||
|
return filterElement;
|
||
|
};
|
||
|
SVG.prototype.pattern = function (parent, resultId, x, y, width, height, settings) {
|
||
|
var patternElement = document.createElementNS("http://www.w3.org/2000/svg", "pattern");
|
||
|
if (resultId) {
|
||
|
patternElement.setAttribute("id", resultId);
|
||
|
}
|
||
|
patternElement.setAttribute("x", x.toString());
|
||
|
patternElement.setAttribute("y", y.toString());
|
||
|
patternElement.setAttribute("width", width.toString());
|
||
|
patternElement.setAttribute("height", height.toString());
|
||
|
this._appendSettings(settings, patternElement);
|
||
|
parent.appendChild(patternElement);
|
||
|
return patternElement;
|
||
|
};
|
||
|
SVG.prototype.defs = function () {
|
||
|
if (this._defs === undefined) {
|
||
|
var defsElement = document.createElementNS("http://www.w3.org/2000/svg", "defs");
|
||
|
this._svg.appendChild(defsElement);
|
||
|
this._defs = defsElement;
|
||
|
}
|
||
|
return this._defs;
|
||
|
};
|
||
|
SVG.prototype.clipPath = function (parent, resultId, units, settings) {
|
||
|
var clipElement = document.createElementNS("http://www.w3.org/2000/svg", "clipPath");
|
||
|
if (resultId) {
|
||
|
clipElement.setAttribute("id", resultId);
|
||
|
}
|
||
|
if (units === undefined) {
|
||
|
units = "userSpaceOnUse";
|
||
|
}
|
||
|
clipElement.setAttribute("clipPathUnits", units);
|
||
|
this._appendSettings(settings, clipElement);
|
||
|
parent.appendChild(clipElement);
|
||
|
return clipElement;
|
||
|
};
|
||
|
SVG.prototype.createPath = function () {
|
||
|
return new SVGPathBuilder();
|
||
|
};
|
||
|
SVG.prototype._appendSettings = function (settings, element) {
|
||
|
if (settings !== undefined) {
|
||
|
Object.keys(settings).forEach(function (key) {
|
||
|
element.setAttribute(key, settings[key]);
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
return SVG;
|
||
|
}());
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/util/index.ts":
|
||
|
/*!***************************!*\
|
||
|
!*** ./src/util/index.ts ***!
|
||
|
\***************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "SVG": () => (/* reexport safe */ _SVG__WEBPACK_IMPORTED_MODULE_0__.SVG)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _SVG__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SVG */ "./src/util/SVG.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2020 Tom Zoehner
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/Bitmap.ts":
|
||
|
/*!*****************************!*\
|
||
|
!*** ./src/wmfjs/Bitmap.ts ***!
|
||
|
\*****************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "Bitmap16": () => (/* binding */ Bitmap16),
|
||
|
/* harmony export */ "BitmapInfo": () => (/* binding */ BitmapInfo),
|
||
|
/* harmony export */ "DIBitmap": () => (/* binding */ DIBitmap),
|
||
|
/* harmony export */ "PatternBitmap16": () => (/* binding */ PatternBitmap16)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
var __extends = (undefined && undefined.__extends) || (function () {
|
||
|
var extendStatics = function (d, b) {
|
||
|
extendStatics = Object.setPrototypeOf ||
|
||
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
||
|
return extendStatics(d, b);
|
||
|
};
|
||
|
return function (d, b) {
|
||
|
if (typeof b !== "function" && b !== null)
|
||
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
||
|
extendStatics(d, b);
|
||
|
function __() { this.constructor = d; }
|
||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
var BitmapCoreHeader = /** @class */ (function () {
|
||
|
function BitmapCoreHeader(reader, skipsize) {
|
||
|
if (skipsize) {
|
||
|
reader.skip(4);
|
||
|
}
|
||
|
this.width = reader.readUint16();
|
||
|
this.height = reader.readUint16();
|
||
|
this.planes = reader.readUint16();
|
||
|
this.bitcount = reader.readUint16();
|
||
|
}
|
||
|
BitmapCoreHeader.prototype.colors = function () {
|
||
|
return this.bitcount <= 8 ? 1 << this.bitcount : 0;
|
||
|
};
|
||
|
return BitmapCoreHeader;
|
||
|
}());
|
||
|
var BitmapInfoHeader = /** @class */ (function () {
|
||
|
function BitmapInfoHeader(reader, skipsize) {
|
||
|
if (skipsize) {
|
||
|
reader.skip(4);
|
||
|
}
|
||
|
this.width = reader.readInt32();
|
||
|
this.height = reader.readInt32();
|
||
|
this.planes = reader.readUint16();
|
||
|
this.bitcount = reader.readUint16();
|
||
|
this.compression = reader.readUint32();
|
||
|
this.sizeimage = reader.readUint32();
|
||
|
this.xpelspermeter = reader.readInt32();
|
||
|
this.ypelspermeter = reader.readInt32();
|
||
|
this.clrused = reader.readUint32();
|
||
|
this.clrimportant = reader.readUint32();
|
||
|
}
|
||
|
BitmapInfoHeader.prototype.colors = function () {
|
||
|
if (this.clrused !== 0) {
|
||
|
return this.clrused < 256 ? this.clrused : 256;
|
||
|
}
|
||
|
else {
|
||
|
return this.bitcount > 8 ? 0 : 1 << this.bitcount;
|
||
|
}
|
||
|
};
|
||
|
return BitmapInfoHeader;
|
||
|
}());
|
||
|
var BitmapInfo = /** @class */ (function () {
|
||
|
function BitmapInfo(reader, usergb) {
|
||
|
this._reader = reader;
|
||
|
this._offset = reader.pos;
|
||
|
this._usergb = usergb;
|
||
|
var hdrsize = reader.readUint32();
|
||
|
this._infosize = hdrsize;
|
||
|
if (hdrsize === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BITMAPCOREHEADER_SIZE) {
|
||
|
this._header = new BitmapCoreHeader(reader, false);
|
||
|
this._infosize += this._header.colors() * (usergb ? 3 : 2);
|
||
|
}
|
||
|
else {
|
||
|
this._header = new BitmapInfoHeader(reader, false);
|
||
|
var masks = this._header.compression === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BitmapCompression.BI_BITFIELDS ? 3 : 0;
|
||
|
if (hdrsize <= _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BITMAPINFOHEADER_SIZE + (masks * 4)) {
|
||
|
this._infosize = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BITMAPINFOHEADER_SIZE + (masks * 4);
|
||
|
}
|
||
|
this._infosize += this._header.colors() * (usergb ? 4 : 2);
|
||
|
}
|
||
|
}
|
||
|
BitmapInfo.prototype.getWidth = function () {
|
||
|
return this._header.width;
|
||
|
};
|
||
|
BitmapInfo.prototype.getHeight = function () {
|
||
|
return Math.abs(this._header.height);
|
||
|
};
|
||
|
BitmapInfo.prototype.infosize = function () {
|
||
|
return this._infosize;
|
||
|
};
|
||
|
BitmapInfo.prototype.header = function () {
|
||
|
return this._header;
|
||
|
};
|
||
|
return BitmapInfo;
|
||
|
}());
|
||
|
|
||
|
var DIBitmap = /** @class */ (function () {
|
||
|
function DIBitmap(reader, size) {
|
||
|
this._reader = reader;
|
||
|
this._offset = reader.pos;
|
||
|
this._size = size;
|
||
|
this._info = new BitmapInfo(reader, true);
|
||
|
}
|
||
|
DIBitmap.prototype.getWidth = function () {
|
||
|
return this._info.getWidth();
|
||
|
};
|
||
|
DIBitmap.prototype.getHeight = function () {
|
||
|
return this._info.getHeight();
|
||
|
};
|
||
|
DIBitmap.prototype.base64ref = function () {
|
||
|
var prevpos = this._reader.pos;
|
||
|
this._reader.seek(this._offset);
|
||
|
var mime = "image/bmp";
|
||
|
var header = this._info.header();
|
||
|
var data;
|
||
|
if (header instanceof BitmapInfoHeader && header.compression != null) {
|
||
|
switch (header.compression) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BitmapCompression.BI_JPEG:
|
||
|
mime = "data:image/jpeg";
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BitmapCompression.BI_PNG:
|
||
|
mime = "data:image/png";
|
||
|
break;
|
||
|
default:
|
||
|
data = this.makeBitmapFileHeader();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
data = this.makeBitmapFileHeader();
|
||
|
}
|
||
|
if (data != null) {
|
||
|
data += this._reader.readBinary(this._size);
|
||
|
}
|
||
|
else {
|
||
|
data = this._reader.readBinary(this._size);
|
||
|
}
|
||
|
var ref = "data:" + mime + ";base64," + btoa(data);
|
||
|
this._reader.seek(prevpos);
|
||
|
return ref;
|
||
|
};
|
||
|
DIBitmap.prototype.makeBitmapFileHeader = function () {
|
||
|
var buf = new ArrayBuffer(14);
|
||
|
var view = new Uint8Array(buf);
|
||
|
view[0] = 0x42;
|
||
|
view[1] = 0x4d;
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._writeUint32Val(view, 2, this._size + 14);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._writeUint32Val(view, 10, this._info.infosize() + 14);
|
||
|
return _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._blobToBinary(view);
|
||
|
};
|
||
|
return DIBitmap;
|
||
|
}());
|
||
|
|
||
|
var Bitmap16 = /** @class */ (function () {
|
||
|
function Bitmap16(reader, size) {
|
||
|
if (reader != null) {
|
||
|
size = size;
|
||
|
this._reader = reader;
|
||
|
this._offset = reader.pos;
|
||
|
this._size = size;
|
||
|
this.type = reader.readInt16();
|
||
|
this.width = reader.readInt16();
|
||
|
this.height = reader.readInt16();
|
||
|
this.widthBytes = reader.readInt16();
|
||
|
this.planes = reader.readUint8();
|
||
|
this.bitsPixel = reader.readUint8();
|
||
|
this.bitsOffset = reader.pos;
|
||
|
this.bitsSize = (((this.width * this.bitsPixel + 15) >> 4) << 1) * this.height;
|
||
|
if (this.bitsSize > size - 10) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Bitmap should have " + this.bitsSize + " bytes, but has " + (size - 10));
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
var copy = size;
|
||
|
this._reader = copy._reader;
|
||
|
this._offset = copy._offset;
|
||
|
this._size = copy._size;
|
||
|
this.type = copy.type;
|
||
|
this.width = copy.width;
|
||
|
this.height = copy.height;
|
||
|
this.widthBytes = copy.widthBytes;
|
||
|
this.planes = copy.planes;
|
||
|
this.bitsPixel = copy.bitsPixel;
|
||
|
this.bitsOffset = copy.bitsOffset;
|
||
|
this.bitsSize = copy.bitsSize;
|
||
|
}
|
||
|
}
|
||
|
Bitmap16.prototype.getWidth = function () {
|
||
|
return this.width;
|
||
|
};
|
||
|
Bitmap16.prototype.getHeight = function () {
|
||
|
return this.height;
|
||
|
};
|
||
|
Bitmap16.prototype.clone = function () {
|
||
|
return new Bitmap16(null, this);
|
||
|
};
|
||
|
return Bitmap16;
|
||
|
}());
|
||
|
|
||
|
var PatternBitmap16 = /** @class */ (function (_super) {
|
||
|
__extends(PatternBitmap16, _super);
|
||
|
function PatternBitmap16(reader, size) {
|
||
|
var _this = _super.call(this, reader, size) || this;
|
||
|
if (reader != null) {
|
||
|
_this.bitsOffset += 22; // skip bits (4 bytes) + reserved (18 bytes)
|
||
|
}
|
||
|
return _this;
|
||
|
}
|
||
|
PatternBitmap16.prototype.clone = function () {
|
||
|
return new PatternBitmap16(null, this);
|
||
|
};
|
||
|
return PatternBitmap16;
|
||
|
}(Bitmap16));
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/Blob.ts":
|
||
|
/*!***************************!*\
|
||
|
!*** ./src/wmfjs/Blob.ts ***!
|
||
|
\***************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "Blob": () => (/* binding */ Blob)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
var Blob = /** @class */ (function () {
|
||
|
function Blob(blob, offset) {
|
||
|
if (blob instanceof Blob) {
|
||
|
this.blob = blob.blob;
|
||
|
this.data = blob.data;
|
||
|
this.pos = offset || blob.pos;
|
||
|
}
|
||
|
else {
|
||
|
this.blob = blob;
|
||
|
this.data = new Uint8Array(blob);
|
||
|
this.pos = offset || 0;
|
||
|
}
|
||
|
}
|
||
|
Blob.prototype.eof = function () {
|
||
|
return this.pos >= this.data.length;
|
||
|
};
|
||
|
Blob.prototype.seek = function (newpos) {
|
||
|
if (newpos < 0 || newpos > this.data.length) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Invalid seek position");
|
||
|
}
|
||
|
this.pos = newpos;
|
||
|
};
|
||
|
Blob.prototype.skip = function (cnt) {
|
||
|
var newPos = this.pos + cnt;
|
||
|
if (newPos > this.data.length) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Unexpected end of file");
|
||
|
}
|
||
|
this.pos = newPos;
|
||
|
};
|
||
|
Blob.prototype.readBinary = function (cnt) {
|
||
|
var end = this.pos + cnt;
|
||
|
if (end > this.data.length) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Unexpected end of file");
|
||
|
}
|
||
|
var ret = "";
|
||
|
while (cnt-- > 0) {
|
||
|
ret += String.fromCharCode(this.data[this.pos++]);
|
||
|
}
|
||
|
return ret;
|
||
|
};
|
||
|
Blob.prototype.readInt8 = function () {
|
||
|
if (this.pos + 1 > this.data.length) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Unexpected end of file");
|
||
|
}
|
||
|
return this.data[this.pos++];
|
||
|
};
|
||
|
Blob.prototype.readUint8 = function () {
|
||
|
return this.readInt8() >>> 0;
|
||
|
};
|
||
|
Blob.prototype.readInt32 = function () {
|
||
|
if (this.pos + 4 > this.data.length) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Unexpected end of file");
|
||
|
}
|
||
|
var val = this.data[this.pos++];
|
||
|
val |= this.data[this.pos++] << 8;
|
||
|
val |= this.data[this.pos++] << 16;
|
||
|
val |= this.data[this.pos++] << 24;
|
||
|
return val;
|
||
|
};
|
||
|
Blob.prototype.readUint32 = function () {
|
||
|
return this.readInt32() >>> 0;
|
||
|
};
|
||
|
Blob.prototype.readUint16 = function () {
|
||
|
if (this.pos + 2 > this.data.length) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Unexpected end of file");
|
||
|
}
|
||
|
var val = this.data[this.pos++];
|
||
|
val |= this.data[this.pos++] << 8;
|
||
|
return val;
|
||
|
};
|
||
|
Blob.prototype.readInt16 = function () {
|
||
|
var val = this.readUint16();
|
||
|
if (val > 32767) {
|
||
|
val -= 65536;
|
||
|
}
|
||
|
return val;
|
||
|
};
|
||
|
Blob.prototype.readString = function (length) {
|
||
|
if (this.pos + length > this.data.length) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Unexpected end of file");
|
||
|
}
|
||
|
var ret = "";
|
||
|
for (var i = 0; i < length; i++) {
|
||
|
ret += String.fromCharCode(this.data[this.pos++] >>> 0);
|
||
|
}
|
||
|
return ret;
|
||
|
};
|
||
|
Blob.prototype.readNullTermString = function (maxSize) {
|
||
|
var ret = "";
|
||
|
if (maxSize > 0) {
|
||
|
maxSize--;
|
||
|
for (var i = 0; i < maxSize; i++) {
|
||
|
if (this.pos + i + 1 > this.data.length) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Unexpected end of file");
|
||
|
}
|
||
|
var byte = this.data[this.pos + i] >>> 0;
|
||
|
if (byte === 0) {
|
||
|
break;
|
||
|
}
|
||
|
ret += String.fromCharCode(byte);
|
||
|
}
|
||
|
}
|
||
|
return ret;
|
||
|
};
|
||
|
return Blob;
|
||
|
}());
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/GDIContext.ts":
|
||
|
/*!*********************************!*\
|
||
|
!*** ./src/wmfjs/GDIContext.ts ***!
|
||
|
\*********************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "GDIContext": () => (/* binding */ GDIContext)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/* harmony import */ var _Primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Primitives */ "./src/wmfjs/Primitives.ts");
|
||
|
/* harmony import */ var _Region__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Region */ "./src/wmfjs/Region.ts");
|
||
|
/* harmony import */ var _Style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Style */ "./src/wmfjs/Style.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
var GDIContextState = /** @class */ (function () {
|
||
|
function GDIContextState(copy, defObjects) {
|
||
|
if (copy != null) {
|
||
|
this._svggroup = copy._svggroup;
|
||
|
this._svgclipChanged = copy._svgclipChanged;
|
||
|
this._svgtextbkfilter = copy._svgtextbkfilter;
|
||
|
this.mapmode = copy.mapmode;
|
||
|
this.stretchmode = copy.stretchmode;
|
||
|
this.textalign = copy.textalign;
|
||
|
this.bkmode = copy.bkmode;
|
||
|
this.textcolor = copy.textcolor.clone();
|
||
|
this.bkcolor = copy.bkcolor.clone();
|
||
|
this.polyfillmode = copy.polyfillmode;
|
||
|
this.wx = copy.wx;
|
||
|
this.wy = copy.wy;
|
||
|
this.ww = copy.ww;
|
||
|
this.wh = copy.wh;
|
||
|
this.vx = copy.vx;
|
||
|
this.vy = copy.vy;
|
||
|
this.vw = copy.vw;
|
||
|
this.vh = copy.vh;
|
||
|
this.x = copy.x;
|
||
|
this.y = copy.y;
|
||
|
this.clip = copy.clip;
|
||
|
this.ownclip = false;
|
||
|
this.selected = {};
|
||
|
for (var type in copy.selected) {
|
||
|
this.selected[type] = copy.selected[type];
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
this._svggroup = null;
|
||
|
this._svgclipChanged = false;
|
||
|
this._svgtextbkfilter = null;
|
||
|
this.mapmode = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.MapMode.MM_ANISOTROPIC;
|
||
|
this.stretchmode = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.StretchMode.COLORONCOLOR;
|
||
|
this.textalign = 0; // TA_LEFT | TA_TOP | TA_NOUPDATECP
|
||
|
this.bkmode = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.MixMode.OPAQUE;
|
||
|
this.textcolor = new _Style__WEBPACK_IMPORTED_MODULE_3__.ColorRef(null, 0, 0, 0);
|
||
|
this.bkcolor = new _Style__WEBPACK_IMPORTED_MODULE_3__.ColorRef(null, 255, 255, 255);
|
||
|
this.polyfillmode = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PolyFillMode.ALTERNATE;
|
||
|
this.wx = 0;
|
||
|
this.wy = 0;
|
||
|
this.ww = 0;
|
||
|
this.wh = 0;
|
||
|
this.vx = 0;
|
||
|
this.vy = 0;
|
||
|
this.vw = 0;
|
||
|
this.vh = 0;
|
||
|
this.x = 0;
|
||
|
this.y = 0;
|
||
|
this.clip = null;
|
||
|
this.ownclip = false;
|
||
|
this.selected = {};
|
||
|
for (var type in defObjects) {
|
||
|
var defObj = defObjects[type];
|
||
|
this.selected[type] = defObj != null ? defObj.clone() : null;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return GDIContextState;
|
||
|
}());
|
||
|
var GDIContext = /** @class */ (function () {
|
||
|
function GDIContext(svg) {
|
||
|
this._svg = svg;
|
||
|
this._svgdefs = null;
|
||
|
this._svgPatterns = {};
|
||
|
this._svgClipPaths = {};
|
||
|
this.defObjects = {
|
||
|
brush: new _Style__WEBPACK_IMPORTED_MODULE_3__.Brush(null, null),
|
||
|
pen: new _Style__WEBPACK_IMPORTED_MODULE_3__.Pen(null, _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_SOLID, new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointS(null, 1, 1), new _Style__WEBPACK_IMPORTED_MODULE_3__.ColorRef(null, 0, 0, 0), 0, 0),
|
||
|
font: new _Style__WEBPACK_IMPORTED_MODULE_3__.Font(null, null),
|
||
|
palette: null,
|
||
|
region: null,
|
||
|
};
|
||
|
this.state = new GDIContextState(null, this.defObjects);
|
||
|
this.statestack = [this.state];
|
||
|
this.objects = {};
|
||
|
}
|
||
|
GDIContext.prototype.setMapMode = function (mode) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setMapMode: mode=" + mode);
|
||
|
this.state.mapmode = mode;
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.setWindowOrg = function (x, y) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setWindowOrg: x=" + x + " y=" + y);
|
||
|
this.state.wx = x;
|
||
|
this.state.wy = y;
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.setWindowExt = function (x, y) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setWindowExt: x=" + x + " y=" + y);
|
||
|
this.state.ww = x;
|
||
|
this.state.wh = y;
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.offsetWindowOrg = function (offX, offY) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] offsetWindowOrg: offX=" + offX + " offY=" + offY);
|
||
|
this.state.wx += offX;
|
||
|
this.state.wy += offY;
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.setViewportOrg = function (x, y) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setViewportOrg: x=" + x + " y=" + y);
|
||
|
this.state.vx = x;
|
||
|
this.state.vy = y;
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.setViewportExt = function (x, y) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setViewportExt: x=" + x + " y=" + y);
|
||
|
this.state.vw = x;
|
||
|
this.state.vh = y;
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.offsetViewportOrg = function (offX, offY) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] offsetViewportOrg: offX=" + offX + " offY=" + offY);
|
||
|
this.state.vx += offX;
|
||
|
this.state.vy += offY;
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.saveDC = function () {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] saveDC");
|
||
|
var prevstate = this.state;
|
||
|
this.state = new GDIContextState(this.state);
|
||
|
this.statestack.push(prevstate);
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.restoreDC = function (saved) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] restoreDC: saved=" + saved);
|
||
|
if (this.statestack.length > 1) {
|
||
|
if (saved === -1) {
|
||
|
this.state = this.statestack.pop();
|
||
|
}
|
||
|
else if (saved < -1) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("restoreDC: relative restore not implemented");
|
||
|
}
|
||
|
else if (saved > 1) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("restoreDC: absolute restore not implemented");
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("No saved contexts");
|
||
|
}
|
||
|
this.state._svggroup = null;
|
||
|
};
|
||
|
GDIContext.prototype.escape = function (func, blob, offset, count) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] escape: func=" + func + " offset=" + offset + " count=" + count);
|
||
|
};
|
||
|
GDIContext.prototype.setStretchBltMode = function (stretchMode) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setStretchBltMode: stretchMode=" + stretchMode);
|
||
|
};
|
||
|
GDIContext.prototype.stretchDib = function (srcX, srcY, srcW, srcH, dstX, dstY, dstW, dstH, rasterOp, colorUsage, dib) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] stretchDib: srcX=" + srcX + " srcY=" + srcY + " srcW=" + srcW + " srcH=" + srcH
|
||
|
+ " dstX=" + dstX + " dstY=" + dstY + " dstW=" + dstW + " dstH=" + dstH
|
||
|
+ " rasterOp=0x" + rasterOp.toString(16));
|
||
|
srcX = this._todevX(srcX);
|
||
|
srcY = this._todevY(srcY);
|
||
|
srcW = this._todevW(srcW);
|
||
|
srcH = this._todevH(srcH);
|
||
|
dstX = this._todevX(dstX);
|
||
|
dstY = this._todevY(dstY);
|
||
|
dstW = this._todevW(dstW);
|
||
|
dstH = this._todevH(dstH);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] stretchDib: TRANSLATED: srcX=" + srcX + " srcY=" + srcY + " srcW=" + srcW + " srcH=" + srcH
|
||
|
+ " dstX=" + dstX + " dstY=" + dstY + " dstW=" + dstW + " dstH=" + dstH
|
||
|
+ " rasterOp=0x" + rasterOp.toString(16) + " colorUsage=0x" + colorUsage.toString(16));
|
||
|
this._pushGroup();
|
||
|
this._svg.image(this.state._svggroup, dstX, dstY, dstW, dstH, dib.base64ref());
|
||
|
};
|
||
|
GDIContext.prototype.dibBits = function (srcX, srcY, dstX, dstY, width, height, rasterOp, dib) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] stretchDibBits: srcX=" + srcX + " srcY=" + srcY
|
||
|
+ " dstX=" + dstX + " dstY=" + dstY + " width=" + width + " height=" + height
|
||
|
+ " rasterOp=0x" + rasterOp.toString(16));
|
||
|
srcX = this._todevX(srcX);
|
||
|
srcY = this._todevY(srcY);
|
||
|
dstX = this._todevX(dstX);
|
||
|
dstY = this._todevY(dstY);
|
||
|
width = this._todevW(width);
|
||
|
height = this._todevH(height);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] dibBits: TRANSLATED:"
|
||
|
+ " srcX=" + srcX + " srcY=" + srcY + +" dstX=" + dstX + " dstY=" + dstY
|
||
|
+ " width=" + width + " height=" + height + " rasterOp=0x" + rasterOp.toString(16));
|
||
|
this._pushGroup();
|
||
|
this._svg.image(this.state._svggroup, dstX, dstY, width, height, dib.base64ref());
|
||
|
};
|
||
|
GDIContext.prototype.stretchDibBits = function (srcX, srcY, srcW, srcH, dstX, dstY, dstW, dstH, rasterOp, dib) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] stretchDibBits: srcX=" + srcX + " srcY=" + srcY + " srcW=" + srcW + " srcH=" + srcH
|
||
|
+ " dstX=" + dstX + " dstY=" + dstY + " dstW=" + dstW + " dstH=" + dstH
|
||
|
+ " rasterOp=0x" + rasterOp.toString(16));
|
||
|
srcX = this._todevX(srcX);
|
||
|
srcY = this._todevY(srcY);
|
||
|
srcW = this._todevW(srcW);
|
||
|
srcH = this._todevH(srcH);
|
||
|
dstX = this._todevX(dstX);
|
||
|
dstY = this._todevY(dstY);
|
||
|
dstW = this._todevW(dstW);
|
||
|
dstH = this._todevH(dstH);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] stretchDibBits: TRANSLATED:"
|
||
|
+ " srcX=" + srcX + " srcY=" + srcY + " srcW=" + srcW + " srcH=" + srcH
|
||
|
+ " dstX=" + dstX + " dstY=" + dstY + " dstW=" + dstW + " dstH=" + dstH
|
||
|
+ " rasterOp=0x" + rasterOp.toString(16));
|
||
|
this._pushGroup();
|
||
|
this._svg.image(this.state._svggroup, dstX, dstY, dstW, dstH, dib.base64ref());
|
||
|
};
|
||
|
GDIContext.prototype.rectangle = function (rect, rw, rh) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] rectangle: rect=" + rect.toString() + " with pen " + this.state.selected.pen.toString()
|
||
|
+ " and brush " + this.state.selected.brush.toString());
|
||
|
var bottom = this._todevY(rect.bottom);
|
||
|
var right = this._todevX(rect.right);
|
||
|
var top = this._todevY(rect.top);
|
||
|
var left = this._todevX(rect.left);
|
||
|
rw = this._todevH(rw);
|
||
|
rh = this._todevH(rh);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] rectangle: TRANSLATED: bottom=" + bottom + " right=" + right + " top=" + top
|
||
|
+ " left=" + left + " rh=" + rh + " rw=" + rw);
|
||
|
this._pushGroup();
|
||
|
var opts = this._applyOpts(null, true, true, false);
|
||
|
this._svg.rect(this.state._svggroup, left, top, right - left, bottom - top, rw / 2, rh / 2, opts);
|
||
|
};
|
||
|
GDIContext.prototype.textOut = function (x, y, text) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] textOut: x=" + x + " y=" + y + " text=" + text
|
||
|
+ " with font " + this.state.selected.font.toString());
|
||
|
x = this._todevX(x);
|
||
|
y = this._todevY(y);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] textOut: TRANSLATED: x=" + x + " y=" + y);
|
||
|
this._pushGroup();
|
||
|
var opts = this._applyOpts(null, false, false, true);
|
||
|
if (this.state.selected.font.escapement !== 0) {
|
||
|
opts.transform = "rotate(" + [(-this.state.selected.font.escapement / 10), x, y] + ")";
|
||
|
opts.style = "dominant-baseline: middle; text-anchor: start;";
|
||
|
}
|
||
|
if (this.state.bkmode === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.MixMode.OPAQUE) {
|
||
|
if (this.state._svgtextbkfilter == null) {
|
||
|
var filterId = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._makeUniqueId("f");
|
||
|
var filter = this._svg.filter(this._getSvgDef(), filterId, 0, 0, 1, 1);
|
||
|
this._svg.filters.flood(filter, null, "#" + this.state.bkcolor.toHex(), 1.0);
|
||
|
this._svg.filters.composite(filter, null, null, "SourceGraphic");
|
||
|
this.state._svgtextbkfilter = filter;
|
||
|
}
|
||
|
opts.filter = "url(#" + this.state._svgtextbkfilter.id + ")";
|
||
|
}
|
||
|
this._svg.text(this.state._svggroup, x, y, text, opts);
|
||
|
};
|
||
|
GDIContext.prototype.extTextOut = function (x, y, text, fwOpts, rect, dx) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] extTextOut: x=" + x + " y=" + y + " text=" + text
|
||
|
+ " with font " + this.state.selected.font.toString());
|
||
|
x = this._todevX(x);
|
||
|
y = this._todevY(y);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] extTextOut: TRANSLATED: x=" + x + " y=" + y);
|
||
|
this._pushGroup();
|
||
|
var opts = this._applyOpts(null, false, false, true);
|
||
|
if (this.state.selected.font.escapement !== 0) {
|
||
|
opts.transform = "rotate(" + [(-this.state.selected.font.escapement / 10), x, y] + ")";
|
||
|
opts.style = "dominant-baseline: middle; text-anchor: start;";
|
||
|
}
|
||
|
if (this.state.bkmode === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.MixMode.OPAQUE) {
|
||
|
if (this.state._svgtextbkfilter == null) {
|
||
|
var filterId = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._makeUniqueId("f");
|
||
|
var filter = this._svg.filter(this._getSvgDef(), filterId, 0, 0, 1, 1);
|
||
|
this._svg.filters.flood(filter, null, "#" + this.state.bkcolor.toHex(), 1.0);
|
||
|
this._svg.filters.composite(filter, null, null, "SourceGraphic");
|
||
|
this.state._svgtextbkfilter = filter;
|
||
|
}
|
||
|
opts.filter = "url(#" + this.state._svgtextbkfilter.id + ")";
|
||
|
}
|
||
|
this._svg.text(this.state._svggroup, x, y, text, opts);
|
||
|
};
|
||
|
GDIContext.prototype.lineTo = function (x, y) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] lineTo: x=" + x + " y=" + y + " with pen " + this.state.selected.pen.toString());
|
||
|
var toX = this._todevX(x);
|
||
|
var toY = this._todevY(y);
|
||
|
var fromX = this._todevX(this.state.x);
|
||
|
var fromY = this._todevY(this.state.y);
|
||
|
// Update position
|
||
|
this.state.x = x;
|
||
|
this.state.y = y;
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] lineTo: TRANSLATED: toX=" + toX + " toY=" + toY + " fromX=" + fromX + " fromY=" + fromY);
|
||
|
this._pushGroup();
|
||
|
var opts = this._applyOpts(null, true, false, false);
|
||
|
this._svg.line(this.state._svggroup, fromX, fromY, toX, toY, opts);
|
||
|
};
|
||
|
GDIContext.prototype.moveTo = function (x, y) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] moveTo: x=" + x + " y=" + y);
|
||
|
this.state.x = x;
|
||
|
this.state.y = y;
|
||
|
};
|
||
|
GDIContext.prototype.polygon = function (points, first) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] polygon: points=" + points + " with pen " + this.state.selected.pen.toString()
|
||
|
+ " and brush " + this.state.selected.brush.toString());
|
||
|
var pts = [];
|
||
|
for (var i = 0; i < points.length; i++) {
|
||
|
var point = points[i];
|
||
|
pts.push([this._todevX(point.x), this._todevY(point.y)]);
|
||
|
}
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] polygon: TRANSLATED: pts=" + pts);
|
||
|
if (first) {
|
||
|
this._pushGroup();
|
||
|
}
|
||
|
var opts = {
|
||
|
"fill-rule": this.state.polyfillmode === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PolyFillMode.ALTERNATE ? "evenodd" : "nonzero",
|
||
|
};
|
||
|
this._applyOpts(opts, true, true, false);
|
||
|
this._svg.polygon(this.state._svggroup, pts, opts);
|
||
|
};
|
||
|
GDIContext.prototype.polyPolygon = function (polygons) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] polyPolygon: polygons.length=" + polygons.length
|
||
|
+ " with pen " + this.state.selected.pen.toString()
|
||
|
+ " and brush " + this.state.selected.brush.toString());
|
||
|
var cnt = polygons.length;
|
||
|
for (var i = 0; i < cnt; i++) {
|
||
|
this.polygon(polygons[i], i === 0);
|
||
|
}
|
||
|
};
|
||
|
GDIContext.prototype.polyline = function (points) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] polyline: points=" + points + " with pen " + this.state.selected.pen.toString());
|
||
|
var pts = [];
|
||
|
for (var i = 0; i < points.length; i++) {
|
||
|
var point = points[i];
|
||
|
pts.push([this._todevX(point.x), this._todevY(point.y)]);
|
||
|
}
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] polyline: TRANSLATED: pts=" + pts);
|
||
|
this._pushGroup();
|
||
|
var opts = this._applyOpts({ fill: "none" }, true, false, false);
|
||
|
this._svg.polyline(this.state._svggroup, pts, opts);
|
||
|
};
|
||
|
GDIContext.prototype.ellipse = function (rect) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] ellipse: rect=" + rect.toString() + " with pen " + this.state.selected.pen.toString()
|
||
|
+ " and brush " + this.state.selected.brush.toString());
|
||
|
var bottom = this._todevY(rect.bottom);
|
||
|
var right = this._todevX(rect.right);
|
||
|
var top = this._todevY(rect.top);
|
||
|
var left = this._todevX(rect.left);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] ellipse: TRANSLATED: bottom=" + bottom + " right=" + right + " top=" + top + " left=" + left);
|
||
|
this._pushGroup();
|
||
|
var width2 = (right - left) / 2;
|
||
|
var height2 = (bottom - top) / 2;
|
||
|
var opts = this._applyOpts(null, true, true, false);
|
||
|
this._svg.ellipse(this.state._svggroup, left + width2, top + height2, width2, height2, opts);
|
||
|
};
|
||
|
GDIContext.prototype.excludeClipRect = function (rect) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] excludeClipRect: rect=" + rect.toString());
|
||
|
this._getClipRgn().subtract(rect);
|
||
|
};
|
||
|
GDIContext.prototype.intersectClipRect = function (rect) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] intersectClipRect: rect=" + rect.toString());
|
||
|
this._getClipRgn().intersect(rect);
|
||
|
};
|
||
|
GDIContext.prototype.offsetClipRgn = function (offX, offY) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] offsetClipRgn: offX=" + offX + " offY=" + offY);
|
||
|
this._getClipRgn().offset(offX, offY);
|
||
|
};
|
||
|
GDIContext.prototype.setTextAlign = function (textAlignmentMode) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setTextAlign: textAlignmentMode=0x" + textAlignmentMode.toString(16));
|
||
|
this.state.textalign = textAlignmentMode;
|
||
|
};
|
||
|
GDIContext.prototype.setBkMode = function (bkMode) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setBkMode: bkMode=0x" + bkMode.toString(16));
|
||
|
this.state.bkmode = bkMode;
|
||
|
};
|
||
|
GDIContext.prototype.setTextColor = function (textColor) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setTextColor: textColor=" + textColor.toString());
|
||
|
this.state.textcolor = textColor;
|
||
|
};
|
||
|
GDIContext.prototype.setBkColor = function (bkColor) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setBkColor: bkColor=" + bkColor.toString());
|
||
|
this.state.bkcolor = bkColor;
|
||
|
this.state._svgtextbkfilter = null;
|
||
|
};
|
||
|
GDIContext.prototype.setPolyFillMode = function (polyFillMode) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setPolyFillMode: polyFillMode=" + polyFillMode);
|
||
|
this.state.polyfillmode = polyFillMode;
|
||
|
};
|
||
|
GDIContext.prototype.createBrush = function (brush) {
|
||
|
var idx = this._storeObject(brush);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createBrush: brush=" + brush.toString() + " with handle " + idx);
|
||
|
};
|
||
|
GDIContext.prototype.createFont = function (font) {
|
||
|
var idx = this._storeObject(font);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createFont: font=" + font.toString() + " with handle " + idx);
|
||
|
};
|
||
|
GDIContext.prototype.createPen = function (pen) {
|
||
|
var idx = this._storeObject(pen);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createPen: pen=" + pen.toString() + " width handle " + idx);
|
||
|
};
|
||
|
GDIContext.prototype.createPalette = function (palette) {
|
||
|
var idx = this._storeObject(palette);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createPalette: palette=" + palette.toString() + " width handle " + idx);
|
||
|
};
|
||
|
GDIContext.prototype.createRegion = function (region) {
|
||
|
var idx = this._storeObject(region);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createRegion: region=" + region.toString() + " width handle " + idx);
|
||
|
};
|
||
|
GDIContext.prototype.createPatternBrush = function (patternBrush) {
|
||
|
var idx = this._storeObject(patternBrush);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createRegion: region=" + patternBrush.toString() + " width handle " + idx);
|
||
|
};
|
||
|
GDIContext.prototype.selectObject = function (objIdx, checkType) {
|
||
|
var obj = this._getObject(objIdx);
|
||
|
if (obj != null && (checkType == null || obj.type === checkType)) {
|
||
|
this._selectObject(obj);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] selectObject: objIdx=" + objIdx
|
||
|
+ (obj ? " selected " + obj.type + ": " + obj.toString() : "[invalid index]"));
|
||
|
}
|
||
|
else {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] selectObject: objIdx=" + objIdx
|
||
|
+ (obj ? " invalid object type: " + obj.type : "[invalid index]"));
|
||
|
}
|
||
|
};
|
||
|
GDIContext.prototype.deleteObject = function (objIdx) {
|
||
|
var ret = this._deleteObject(objIdx);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] deleteObject: objIdx=" + objIdx + (ret ? " deleted object" : "[invalid index]"));
|
||
|
};
|
||
|
GDIContext.prototype._pushGroup = function () {
|
||
|
if (this.state._svggroup == null || this.state._svgclipChanged) {
|
||
|
this.state._svgclipChanged = false;
|
||
|
this.state._svgtextbkfilter = null;
|
||
|
var settings = {
|
||
|
viewBox: [this.state.vx, this.state.vy, this.state.vw, this.state.vh].join(" "),
|
||
|
preserveAspectRatio: "none",
|
||
|
};
|
||
|
if (this.state.clip != null) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] new svg x=" + this.state.vx + " y=" + this.state.vy
|
||
|
+ " width=" + this.state.vw + " height=" + this.state.vh + " with clipping");
|
||
|
settings["clip-path"] = "url(#" + this._getSvgClipPathForRegion(this.state.clip) + ")";
|
||
|
}
|
||
|
else {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] new svg x=" + this.state.vx + " y=" + this.state.vy
|
||
|
+ " width=" + this.state.vw + " height=" + this.state.vh + " without clipping");
|
||
|
}
|
||
|
this.state._svggroup = this._svg.svg(this.state._svggroup, this.state.vx, this.state.vy, this.state.vw, this.state.vh, settings);
|
||
|
}
|
||
|
};
|
||
|
GDIContext.prototype._storeObject = function (obj) {
|
||
|
var i = 0;
|
||
|
while (this.objects[i.toString()] != null && i <= 65535) {
|
||
|
i++;
|
||
|
}
|
||
|
if (i > 65535) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] Too many objects!");
|
||
|
return -1;
|
||
|
}
|
||
|
this.objects[i.toString()] = obj;
|
||
|
return i;
|
||
|
};
|
||
|
GDIContext.prototype._getObject = function (objIdx) {
|
||
|
var obj = this.objects[objIdx.toString()];
|
||
|
if (obj == null) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] No object with handle " + objIdx);
|
||
|
}
|
||
|
return obj;
|
||
|
};
|
||
|
GDIContext.prototype._getSvgDef = function () {
|
||
|
if (this._svgdefs == null) {
|
||
|
this._svgdefs = this._svg.defs();
|
||
|
}
|
||
|
return this._svgdefs;
|
||
|
};
|
||
|
GDIContext.prototype._getSvgClipPathForRegion = function (region) {
|
||
|
for (var existingId in this._svgClipPaths) {
|
||
|
var rgn = this._svgClipPaths[existingId];
|
||
|
if (rgn === region) {
|
||
|
return existingId;
|
||
|
}
|
||
|
}
|
||
|
var id = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._makeUniqueId("c");
|
||
|
var sclip = this._svg.clipPath(this._getSvgDef(), id, "userSpaceOnUse");
|
||
|
switch (region.complexity) {
|
||
|
case 1:
|
||
|
this._svg.rect(sclip, this._todevX(region.bounds.left), this._todevY(region.bounds.top), this._todevW(region.bounds.right - region.bounds.left), this._todevH(region.bounds.bottom - region.bounds.top), { "fill": "black", "stroke-width": 0 });
|
||
|
break;
|
||
|
case 2:
|
||
|
for (var i = 0; i < region.scans.length; i++) {
|
||
|
var scan = region.scans[i];
|
||
|
for (var j = 0; j < scan.scanlines.length; j++) {
|
||
|
var scanline = scan.scanlines[j];
|
||
|
this._svg.rect(sclip, this._todevX(scanline.left), this._todevY(scan.top), this._todevW(scanline.right - scanline.left), this._todevH(scan.bottom - scan.top), { "fill": "black", "stroke-width": 0 });
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
this._svgClipPaths[id] = region;
|
||
|
return id;
|
||
|
};
|
||
|
GDIContext.prototype._getSvgPatternForBrush = function (brush) {
|
||
|
for (var existingId in this._svgPatterns) {
|
||
|
var pat = this._svgPatterns[existingId];
|
||
|
if (pat === brush) {
|
||
|
return existingId;
|
||
|
}
|
||
|
}
|
||
|
var width;
|
||
|
var height;
|
||
|
var img;
|
||
|
switch (brush.style) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_PATTERN:
|
||
|
width = brush.pattern.getWidth();
|
||
|
height = brush.pattern.getHeight();
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_DIBPATTERNPT:
|
||
|
width = brush.dibpatternpt.getWidth();
|
||
|
height = brush.dibpatternpt.getHeight();
|
||
|
img = brush.dibpatternpt.base64ref();
|
||
|
break;
|
||
|
default:
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Invalid brush style");
|
||
|
}
|
||
|
var id = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._makeUniqueId("p");
|
||
|
var spat = this._svg.pattern(this._getSvgDef(), id, 0, 0, width, height, { patternUnits: "userSpaceOnUse" });
|
||
|
this._svg.image(spat, 0, 0, width, height, img);
|
||
|
this._svgPatterns[id] = brush;
|
||
|
return id;
|
||
|
};
|
||
|
GDIContext.prototype._selectObject = function (obj) {
|
||
|
this.state.selected[obj.type] = obj;
|
||
|
if (obj.type === "region") {
|
||
|
this.state._svgclipChanged = true;
|
||
|
}
|
||
|
};
|
||
|
GDIContext.prototype._deleteObject = function (objIdx) {
|
||
|
var obj = this.objects[objIdx.toString()];
|
||
|
if (obj != null) {
|
||
|
for (var i = 0; i < this.statestack.length; i++) {
|
||
|
var state = this.statestack[i];
|
||
|
if (state.selected[obj.type] === obj) {
|
||
|
state.selected[obj.type] = this.defObjects[obj.type].clone();
|
||
|
}
|
||
|
}
|
||
|
delete this.objects[objIdx.toString()];
|
||
|
return true;
|
||
|
}
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] Cannot delete object with invalid handle " + objIdx);
|
||
|
return false;
|
||
|
};
|
||
|
GDIContext.prototype._getClipRgn = function () {
|
||
|
if (this.state.clip != null) {
|
||
|
if (!this.state.ownclip) {
|
||
|
this.state.clip = this.state.clip.clone();
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
if (this.state.selected.region != null) {
|
||
|
this.state.clip = this.state.selected.region.clone();
|
||
|
}
|
||
|
else {
|
||
|
this.state.clip = (0,_Region__WEBPACK_IMPORTED_MODULE_2__.CreateSimpleRegion)(this.state.wx, this.state.wy, this.state.wx + this.state.ww, this.state.wy + this.state.wh);
|
||
|
}
|
||
|
}
|
||
|
this.state.ownclip = true;
|
||
|
return this.state.clip;
|
||
|
};
|
||
|
GDIContext.prototype._todevX = function (val) {
|
||
|
// http://wvware.sourceforge.net/caolan/mapmode.html
|
||
|
// logical -> device
|
||
|
return Math.floor((val - this.state.wx) * (this.state.vw / this.state.ww)) + this.state.vx;
|
||
|
};
|
||
|
GDIContext.prototype._todevY = function (val) {
|
||
|
// http://wvware.sourceforge.net/caolan/mapmode.html
|
||
|
// logical -> device
|
||
|
return Math.floor((val - this.state.wy) * (this.state.vh / this.state.wh)) + this.state.vy;
|
||
|
};
|
||
|
GDIContext.prototype._todevW = function (val) {
|
||
|
// http://wvware.sourceforge.net/caolan/mapmode.html
|
||
|
// logical -> device
|
||
|
return Math.floor(val * (this.state.vw / this.state.ww)) + this.state.vx;
|
||
|
};
|
||
|
GDIContext.prototype._todevH = function (val) {
|
||
|
// http://wvware.sourceforge.net/caolan/mapmode.html
|
||
|
// logical -> device
|
||
|
return Math.floor(val * (this.state.vh / this.state.wh)) + this.state.vy;
|
||
|
};
|
||
|
GDIContext.prototype._tologicalX = function (val) {
|
||
|
// http://wvware.sourceforge.net/caolan/mapmode.html
|
||
|
// logical -> device
|
||
|
return Math.floor((val - this.state.vx) / (this.state.vw / this.state.ww)) + this.state.wx;
|
||
|
};
|
||
|
GDIContext.prototype._tologicalY = function (val) {
|
||
|
// http://wvware.sourceforge.net/caolan/mapmode.html
|
||
|
// logical -> device
|
||
|
return Math.floor((val - this.state.vy) / (this.state.vh / this.state.wh)) + this.state.wy;
|
||
|
};
|
||
|
GDIContext.prototype._tologicalW = function (val) {
|
||
|
// http://wvware.sourceforge.net/caolan/mapmode.html
|
||
|
// logical -> device
|
||
|
return Math.floor(val / (this.state.vw / this.state.ww)) + this.state.wx;
|
||
|
};
|
||
|
GDIContext.prototype._tologicalH = function (val) {
|
||
|
// http://wvware.sourceforge.net/caolan/mapmode.html
|
||
|
// logical -> device
|
||
|
return Math.floor(val / (this.state.vh / this.state.wh)) + this.state.wy;
|
||
|
};
|
||
|
GDIContext.prototype._applyOpts = function (opts, usePen, useBrush, useFont) {
|
||
|
if (opts == null) {
|
||
|
opts = {};
|
||
|
}
|
||
|
if (usePen) {
|
||
|
var pen = this.state.selected.pen;
|
||
|
if (pen.style !== _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_NULL) {
|
||
|
opts.stroke = "#" + pen.color.toHex(), // TODO: pen style
|
||
|
opts["stroke-width"] = this._todevW(pen.width.x); // TODO: is .y ever used?
|
||
|
var dotWidth = void 0;
|
||
|
if ((pen.linecap & _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_ENDCAP_SQUARE) !== 0) {
|
||
|
opts["stroke-linecap"] = "square";
|
||
|
dotWidth = 1;
|
||
|
}
|
||
|
else if ((pen.linecap & _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_ENDCAP_FLAT) !== 0) {
|
||
|
opts["stroke-linecap"] = "butt";
|
||
|
dotWidth = opts["stroke-width"];
|
||
|
}
|
||
|
else {
|
||
|
opts["stroke-linecap"] = "round";
|
||
|
dotWidth = 1;
|
||
|
}
|
||
|
if ((pen.join & _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_JOIN_BEVEL) !== 0) {
|
||
|
opts["stroke-linejoin"] = "bevel";
|
||
|
}
|
||
|
else if ((pen.join & _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_JOIN_MITER) !== 0) {
|
||
|
opts["stroke-linejoin"] = "miter";
|
||
|
}
|
||
|
else {
|
||
|
opts["stroke-linejoin"] = "round";
|
||
|
}
|
||
|
var dashWidth = opts["stroke-width"] * 4;
|
||
|
var dotSpacing = opts["stroke-width"] * 2;
|
||
|
switch (pen.style) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_DASH:
|
||
|
opts["stroke-dasharray"] = [dashWidth, dotSpacing].toString();
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_DOT:
|
||
|
opts["stroke-dasharray"] = [dotWidth, dotSpacing].toString();
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_DASHDOT:
|
||
|
opts["stroke-dasharray"] = [dashWidth, dotSpacing, dotWidth, dotSpacing].toString();
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_DASHDOTDOT:
|
||
|
opts["stroke-dasharray"]
|
||
|
= [dashWidth, dotSpacing, dotWidth, dotSpacing, dotWidth, dotSpacing].toString();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (useBrush) {
|
||
|
var brush = this.state.selected.brush;
|
||
|
switch (brush.style) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_SOLID:
|
||
|
opts.fill = "#" + brush.color.toHex();
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_PATTERN:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_DIBPATTERNPT:
|
||
|
opts.fill = "url(#" + this._getSvgPatternForBrush(brush) + ")";
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_NULL:
|
||
|
opts.fill = "none";
|
||
|
break;
|
||
|
default:
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] unsupported brush style: " + brush.style);
|
||
|
opts.fill = "none";
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (useFont) {
|
||
|
var font = this.state.selected.font;
|
||
|
opts["font-family"] = font.facename;
|
||
|
opts["font-size"] = this._todevH(Math.abs(font.height));
|
||
|
opts.fill = "#" + this.state.textcolor.toHex();
|
||
|
}
|
||
|
return opts;
|
||
|
};
|
||
|
return GDIContext;
|
||
|
}());
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/Helper.ts":
|
||
|
/*!*****************************!*\
|
||
|
!*** ./src/wmfjs/Helper.ts ***!
|
||
|
\*****************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "Helper": () => (/* binding */ Helper),
|
||
|
/* harmony export */ "WMFJSError": () => (/* binding */ WMFJSError),
|
||
|
/* harmony export */ "loggingEnabled": () => (/* binding */ loggingEnabled)
|
||
|
/* harmony export */ });
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
var __extends = (undefined && undefined.__extends) || (function () {
|
||
|
var extendStatics = function (d, b) {
|
||
|
extendStatics = Object.setPrototypeOf ||
|
||
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
||
|
return extendStatics(d, b);
|
||
|
};
|
||
|
return function (d, b) {
|
||
|
if (typeof b !== "function" && b !== null)
|
||
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
||
|
extendStatics(d, b);
|
||
|
function __() { this.constructor = d; }
|
||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
|
};
|
||
|
})();
|
||
|
var WMFJSError = /** @class */ (function (_super) {
|
||
|
__extends(WMFJSError, _super);
|
||
|
function WMFJSError(message) {
|
||
|
var _newTarget = this.constructor;
|
||
|
var _this = _super.call(this, message) || this;
|
||
|
Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain
|
||
|
return _this;
|
||
|
}
|
||
|
return WMFJSError;
|
||
|
}(Error));
|
||
|
|
||
|
var isLoggingEnabled = true;
|
||
|
function loggingEnabled(enabled) {
|
||
|
isLoggingEnabled = enabled;
|
||
|
}
|
||
|
var Helper = /** @class */ (function () {
|
||
|
function Helper() {
|
||
|
}
|
||
|
Helper.log = function (message) {
|
||
|
if (isLoggingEnabled) {
|
||
|
console.log(message);
|
||
|
}
|
||
|
};
|
||
|
Helper._makeUniqueId = function (prefix) {
|
||
|
return "wmfjs_" + prefix + (this._uniqueId++);
|
||
|
};
|
||
|
Helper._writeUint32Val = function (uint8arr, pos, val) {
|
||
|
uint8arr[pos++] = val & 0xff;
|
||
|
uint8arr[pos++] = (val >>> 8) & 0xff;
|
||
|
uint8arr[pos++] = (val >>> 16) & 0xff;
|
||
|
uint8arr[pos++] = (val >>> 24) & 0xff;
|
||
|
};
|
||
|
Helper._blobToBinary = function (blob) {
|
||
|
var ret = "";
|
||
|
var len = blob.length;
|
||
|
for (var i = 0; i < len; i++) {
|
||
|
ret += String.fromCharCode(blob[i]);
|
||
|
}
|
||
|
return ret;
|
||
|
};
|
||
|
Helper.GDI = {
|
||
|
METAHEADER_SIZE: 18,
|
||
|
BITMAPINFOHEADER_SIZE: 40,
|
||
|
BITMAPCOREHEADER_SIZE: 12,
|
||
|
MetafileType: {
|
||
|
MEMORYMETAFILE: 1,
|
||
|
DISKMETAFILE: 2,
|
||
|
},
|
||
|
MetafileVersion: {
|
||
|
METAVERSION100: 0x100,
|
||
|
METAVERSION300: 0x300,
|
||
|
},
|
||
|
RecordType: {
|
||
|
META_EOF: 0x0000,
|
||
|
META_REALIZEPALETTE: 0x0035,
|
||
|
META_SETPALENTRIES: 0x0037,
|
||
|
META_SETBKMODE: 0x0102,
|
||
|
META_SETMAPMODE: 0x0103,
|
||
|
META_SETROP2: 0x0104,
|
||
|
META_SETRELABS: 0x0105,
|
||
|
META_SETPOLYFILLMODE: 0x0106,
|
||
|
META_SETSTRETCHBLTMODE: 0x0107,
|
||
|
META_SETTEXTCHAREXTRA: 0x0108,
|
||
|
META_RESTOREDC: 0x0127,
|
||
|
META_RESIZEPALETTE: 0x0139,
|
||
|
META_DIBCREATEPATTERNBRUSH: 0x0142,
|
||
|
META_SETLAYOUT: 0x0149,
|
||
|
META_SETBKCOLOR: 0x0201,
|
||
|
META_SETTEXTCOLOR: 0x0209,
|
||
|
META_OFFSETVIEWPORTORG: 0x0211,
|
||
|
META_LINETO: 0x0213,
|
||
|
META_MOVETO: 0x0214,
|
||
|
META_OFFSETCLIPRGN: 0x0220,
|
||
|
META_FILLREGION: 0x0228,
|
||
|
META_SETMAPPERFLAGS: 0x0231,
|
||
|
META_SELECTPALETTE: 0x0234,
|
||
|
META_POLYGON: 0x0324,
|
||
|
META_POLYLINE: 0x0325,
|
||
|
META_SETTEXTJUSTIFICATION: 0x020a,
|
||
|
META_SETWINDOWORG: 0x020b,
|
||
|
META_SETWINDOWEXT: 0x020c,
|
||
|
META_SETVIEWPORTORG: 0x020d,
|
||
|
META_SETVIEWPORTEXT: 0x020e,
|
||
|
META_OFFSETWINDOWORG: 0x020f,
|
||
|
META_SCALEWINDOWEXT: 0x0410,
|
||
|
META_SCALEVIEWPORTEXT: 0x0412,
|
||
|
META_EXCLUDECLIPRECT: 0x0415,
|
||
|
META_INTERSECTCLIPRECT: 0x0416,
|
||
|
META_ELLIPSE: 0x0418,
|
||
|
META_FLOODFILL: 0x0419,
|
||
|
META_FRAMEREGION: 0x0429,
|
||
|
META_ANIMATEPALETTE: 0x0436,
|
||
|
META_TEXTOUT: 0x0521,
|
||
|
META_POLYPOLYGON: 0x0538,
|
||
|
META_EXTFLOODFILL: 0x0548,
|
||
|
META_RECTANGLE: 0x041b,
|
||
|
META_SETPIXEL: 0x041f,
|
||
|
META_ROUNDRECT: 0x061c,
|
||
|
META_PATBLT: 0x061d,
|
||
|
META_SAVEDC: 0x001e,
|
||
|
META_PIE: 0x081a,
|
||
|
META_STRETCHBLT: 0x0b23,
|
||
|
META_ESCAPE: 0x0626,
|
||
|
META_INVERTREGION: 0x012a,
|
||
|
META_PAINTREGION: 0x012b,
|
||
|
META_SELECTCLIPREGION: 0x012c,
|
||
|
META_SELECTOBJECT: 0x012d,
|
||
|
META_SETTEXTALIGN: 0x012e,
|
||
|
META_ARC: 0x0817,
|
||
|
META_CHORD: 0x0830,
|
||
|
META_BITBLT: 0x0922,
|
||
|
META_EXTTEXTOUT: 0x0a32,
|
||
|
META_SETDIBTODEV: 0x0d33,
|
||
|
META_DIBBITBLT: 0x0940,
|
||
|
META_DIBSTRETCHBLT: 0x0b41,
|
||
|
META_STRETCHDIB: 0x0f43,
|
||
|
META_DELETEOBJECT: 0x01f0,
|
||
|
META_CREATEPALETTE: 0x00f7,
|
||
|
META_CREATEPATTERNBRUSH: 0x01f9,
|
||
|
META_CREATEPENINDIRECT: 0x02fa,
|
||
|
META_CREATEFONTINDIRECT: 0x02fb,
|
||
|
META_CREATEBRUSHINDIRECT: 0x02fc,
|
||
|
META_CREATEREGION: 0x06ff,
|
||
|
},
|
||
|
MetafileEscapes: {
|
||
|
NEWFRAME: 0x0001,
|
||
|
ABORTDOC: 0x0002,
|
||
|
NEXTBAND: 0x0003,
|
||
|
SETCOLORTABLE: 0x0004,
|
||
|
GETCOLORTABLE: 0x0005,
|
||
|
FLUSHOUT: 0x0006,
|
||
|
DRAFTMODE: 0x0007,
|
||
|
QUERYESCSUPPORT: 0x0008,
|
||
|
SETABORTPROC: 0x0009,
|
||
|
STARTDOC: 0x000a,
|
||
|
ENDDOC: 0x000b,
|
||
|
GETPHYSPAGESIZE: 0x000c,
|
||
|
GETPRINTINGOFFSET: 0x000d,
|
||
|
GETSCALINGFACTOR: 0x000e,
|
||
|
META_ESCAPE_ENHANCED_METAFILE: 0x000f,
|
||
|
SETPENWIDTH: 0x0010,
|
||
|
SETCOPYCOUNT: 0x0011,
|
||
|
SETPAPERSOURCE: 0x0012,
|
||
|
PASSTHROUGH: 0x0013,
|
||
|
GETTECHNOLOGY: 0x0014,
|
||
|
SETLINECAP: 0x0015,
|
||
|
SETLINEJOIN: 0x0016,
|
||
|
SETMITERLIMIT: 0x0017,
|
||
|
BANDINFO: 0x0018,
|
||
|
DRAWPATTERNRECT: 0x0019,
|
||
|
GETVECTORPENSIZE: 0x001a,
|
||
|
GETVECTORBRUSHSIZE: 0x001b,
|
||
|
ENABLEDUPLEX: 0x001c,
|
||
|
GETSETPAPERBINS: 0x001d,
|
||
|
GETSETPRINTORIENT: 0x001e,
|
||
|
ENUMPAPERBINS: 0x001f,
|
||
|
SETDIBSCALING: 0x0020,
|
||
|
EPSPRINTING: 0x0021,
|
||
|
ENUMPAPERMETRICS: 0x0022,
|
||
|
GETSETPAPERMETRICS: 0x0023,
|
||
|
POSTSCRIPT_DATA: 0x0025,
|
||
|
POSTSCRIPT_IGNORE: 0x0026,
|
||
|
GETDEVICEUNITS: 0x002a,
|
||
|
GETEXTENDEDTEXTMETRICS: 0x0100,
|
||
|
GETPAIRKERNTABLE: 0x0102,
|
||
|
EXTTEXTOUT: 0x0200,
|
||
|
GETFACENAME: 0x0201,
|
||
|
DOWNLOADFACE: 0x0202,
|
||
|
METAFILE_DRIVER: 0x0801,
|
||
|
QUERYDIBSUPPORT: 0x0c01,
|
||
|
BEGIN_PATH: 0x1000,
|
||
|
CLIP_TO_PATH: 0x1001,
|
||
|
END_PATH: 0x1002,
|
||
|
OPEN_CHANNEL: 0x100e,
|
||
|
DOWNLOADHEADER: 0x100f,
|
||
|
CLOSE_CHANNEL: 0x1010,
|
||
|
POSTSCRIPT_PASSTHROUGH: 0x1013,
|
||
|
ENCAPSULATED_POSTSCRIPT: 0x1014,
|
||
|
POSTSCRIPT_IDENTIFY: 0x1015,
|
||
|
POSTSCRIPT_INJECTION: 0x1016,
|
||
|
CHECKJPEGFORMAT: 0x1017,
|
||
|
CHECKPNGFORMAT: 0x1018,
|
||
|
GET_PS_FEATURESETTING: 0x1019,
|
||
|
MXDC_ESCAPE: 0x101a,
|
||
|
SPCLPASSTHROUGH2: 0x11d8,
|
||
|
},
|
||
|
MapMode: {
|
||
|
MM_TEXT: 1,
|
||
|
MM_LOMETRIC: 2,
|
||
|
MM_HIMETRIC: 3,
|
||
|
MM_LOENGLISH: 4,
|
||
|
MM_HIENGLISH: 5,
|
||
|
MM_TWIPS: 6,
|
||
|
MM_ISOTROPIC: 7,
|
||
|
MM_ANISOTROPIC: 8,
|
||
|
},
|
||
|
StretchMode: {
|
||
|
BLACKONWHITE: 1,
|
||
|
WHITEONBLACK: 2,
|
||
|
COLORONCOLOR: 3,
|
||
|
HALFTONE: 4,
|
||
|
},
|
||
|
TextAlignmentMode: {
|
||
|
TA_UPDATECP: 1,
|
||
|
TA_RIGHT: 2,
|
||
|
TA_CENTER: 6,
|
||
|
TA_BOTTOM: 8,
|
||
|
TA_BASELINE: 24,
|
||
|
TA_RTLREADING: 256,
|
||
|
},
|
||
|
MixMode: {
|
||
|
TRANSPARENT: 1,
|
||
|
OPAQUE: 2,
|
||
|
},
|
||
|
VerticalTextAlignmentMode: {
|
||
|
VTA_BOTTOM: 2,
|
||
|
VTA_CENTER: 6,
|
||
|
VTA_LEFT: 8,
|
||
|
VTA_BASELINE: 24,
|
||
|
},
|
||
|
BrushStyle: {
|
||
|
BS_SOLID: 0,
|
||
|
BS_NULL: 1,
|
||
|
BS_HATCHED: 2,
|
||
|
BS_PATTERN: 3,
|
||
|
BS_INDEXED: 4,
|
||
|
BS_DIBPATTERN: 5,
|
||
|
BS_DIBPATTERNPT: 6,
|
||
|
BS_PATTERN8X8: 7,
|
||
|
BS_DIBPATTERN8X8: 8,
|
||
|
BS_MONOPATTERN: 9,
|
||
|
},
|
||
|
PenStyle: {
|
||
|
PS_SOLID: 0,
|
||
|
PS_DASH: 1,
|
||
|
PS_DOT: 2,
|
||
|
PS_DASHDOT: 3,
|
||
|
PS_DASHDOTDOT: 4,
|
||
|
PS_NULL: 5,
|
||
|
PS_INSIDEFRAME: 6,
|
||
|
PS_USERSTYLE: 7,
|
||
|
PS_ALTERNATE: 8,
|
||
|
PS_ENDCAP_SQUARE: 256,
|
||
|
PS_ENDCAP_FLAT: 512,
|
||
|
PS_JOIN_BEVEL: 4096,
|
||
|
PS_JOIN_MITER: 8192,
|
||
|
},
|
||
|
PolyFillMode: {
|
||
|
ALTERNATE: 1,
|
||
|
WINDING: 2,
|
||
|
},
|
||
|
ColorUsage: {
|
||
|
DIB_RGB_COLORS: 0,
|
||
|
DIB_PAL_COLORS: 1,
|
||
|
DIB_PAL_INDICES: 2,
|
||
|
},
|
||
|
PaletteEntryFlag: {
|
||
|
PC_RESERVED: 1,
|
||
|
PC_EXPLICIT: 2,
|
||
|
PC_NOCOLLAPSE: 4,
|
||
|
},
|
||
|
BitmapCompression: {
|
||
|
BI_RGB: 0,
|
||
|
BI_RLE8: 1,
|
||
|
BI_RLE4: 2,
|
||
|
BI_BITFIELDS: 3,
|
||
|
BI_JPEG: 4,
|
||
|
BI_PNG: 5,
|
||
|
},
|
||
|
};
|
||
|
Helper._uniqueId = 0;
|
||
|
return Helper;
|
||
|
}());
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/Primitives.ts":
|
||
|
/*!*********************************!*\
|
||
|
!*** ./src/wmfjs/Primitives.ts ***!
|
||
|
\*********************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "Obj": () => (/* binding */ Obj),
|
||
|
/* harmony export */ "PointS": () => (/* binding */ PointS),
|
||
|
/* harmony export */ "Rect": () => (/* binding */ Rect)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
var PointS = /** @class */ (function () {
|
||
|
function PointS(reader, x, y) {
|
||
|
if (reader != null) {
|
||
|
this.x = reader.readInt16();
|
||
|
this.y = reader.readInt16();
|
||
|
}
|
||
|
else {
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
}
|
||
|
}
|
||
|
PointS.prototype.clone = function () {
|
||
|
return new PointS(null, this.x, this.y);
|
||
|
};
|
||
|
PointS.prototype.toString = function () {
|
||
|
return "{x: " + this.x + ", y: " + this.y + "}";
|
||
|
};
|
||
|
return PointS;
|
||
|
}());
|
||
|
|
||
|
var Rect = /** @class */ (function () {
|
||
|
function Rect(reader, left, top, right, bottom) {
|
||
|
if (reader != null) {
|
||
|
this.bottom = reader.readInt16();
|
||
|
this.right = reader.readInt16();
|
||
|
this.top = reader.readInt16();
|
||
|
this.left = reader.readInt16();
|
||
|
}
|
||
|
else {
|
||
|
this.bottom = bottom;
|
||
|
this.right = right;
|
||
|
this.top = top;
|
||
|
this.left = left;
|
||
|
}
|
||
|
}
|
||
|
Rect.prototype.clone = function () {
|
||
|
return new Rect(null, this.left, this.top, this.right, this.bottom);
|
||
|
};
|
||
|
Rect.prototype.toString = function () {
|
||
|
return "{left: " + this.left + ", top: " + this.top + ", right: " + this.right
|
||
|
+ ", bottom: " + this.bottom + "}";
|
||
|
};
|
||
|
Rect.prototype.empty = function () {
|
||
|
return this.left >= this.right || this.top >= this.bottom;
|
||
|
};
|
||
|
Rect.prototype.intersect = function (rect) {
|
||
|
if (this.empty() || rect.empty()) {
|
||
|
return null;
|
||
|
}
|
||
|
if (this.left >= rect.right || this.top >= rect.bottom ||
|
||
|
this.right <= rect.left || this.bottom <= rect.top) {
|
||
|
return null;
|
||
|
}
|
||
|
return new Rect(null, Math.max(this.left, rect.left), Math.max(this.top, rect.top), Math.min(this.right, rect.right), Math.min(this.bottom, rect.bottom));
|
||
|
};
|
||
|
return Rect;
|
||
|
}());
|
||
|
|
||
|
var Obj = /** @class */ (function () {
|
||
|
function Obj(type) {
|
||
|
this.type = type;
|
||
|
}
|
||
|
Obj.prototype.clone = function () {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("clone not implemented");
|
||
|
};
|
||
|
Obj.prototype.toString = function () {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("toString not implemented");
|
||
|
};
|
||
|
return Obj;
|
||
|
}());
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/Region.ts":
|
||
|
/*!*****************************!*\
|
||
|
!*** ./src/wmfjs/Region.ts ***!
|
||
|
\*****************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "CreateSimpleRegion": () => (/* binding */ CreateSimpleRegion),
|
||
|
/* harmony export */ "Region": () => (/* binding */ Region),
|
||
|
/* harmony export */ "Scan": () => (/* binding */ Scan)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/* harmony import */ var _Primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Primitives */ "./src/wmfjs/Primitives.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
var __extends = (undefined && undefined.__extends) || (function () {
|
||
|
var extendStatics = function (d, b) {
|
||
|
extendStatics = Object.setPrototypeOf ||
|
||
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
||
|
return extendStatics(d, b);
|
||
|
};
|
||
|
return function (d, b) {
|
||
|
if (typeof b !== "function" && b !== null)
|
||
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
||
|
extendStatics(d, b);
|
||
|
function __() { this.constructor = d; }
|
||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
|
||
|
var Region = /** @class */ (function (_super) {
|
||
|
__extends(Region, _super);
|
||
|
function Region(reader, copy) {
|
||
|
var _this = _super.call(this, "region") || this;
|
||
|
if (reader != null) {
|
||
|
reader.skip(2);
|
||
|
if (reader.readInt16() !== 6) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.WMFJSError("Invalid region identifier");
|
||
|
}
|
||
|
reader.skip(2);
|
||
|
var rgnSize = reader.readInt16();
|
||
|
var scanCnt = reader.readInt16();
|
||
|
reader.skip(2);
|
||
|
// note, Rect in reverse, can't use Rect(reader) directly
|
||
|
var left = reader.readInt16();
|
||
|
var top_1 = reader.readInt16();
|
||
|
var right = reader.readInt16();
|
||
|
var bottom = reader.readInt16();
|
||
|
_this.bounds = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.Rect(null, left, top_1, right, bottom);
|
||
|
_this.scans = [];
|
||
|
for (var i = 0; i < scanCnt; i++) {
|
||
|
_this.scans.push(new Scan(reader));
|
||
|
}
|
||
|
_this._updateComplexity();
|
||
|
}
|
||
|
else if (copy != null) {
|
||
|
_this.bounds = copy.bounds != null ? copy.bounds.clone() : null;
|
||
|
if (copy.scans != null) {
|
||
|
_this.scans = [];
|
||
|
for (var i = 0; i < copy.scans.length; i++) {
|
||
|
_this.scans.push(copy.scans[i].clone());
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
_this.scans = null;
|
||
|
}
|
||
|
_this.complexity = copy.complexity;
|
||
|
}
|
||
|
else {
|
||
|
_this.bounds = null;
|
||
|
_this.scans = null;
|
||
|
_this.complexity = 0;
|
||
|
}
|
||
|
return _this;
|
||
|
}
|
||
|
Region.prototype.clone = function () {
|
||
|
return new Region(null, this);
|
||
|
};
|
||
|
Region.prototype.toString = function () {
|
||
|
var _complexity = ["null", "simple", "complex"];
|
||
|
return "{complexity: " + _complexity[this.complexity]
|
||
|
+ " bounds: " + (this.bounds != null ? this.bounds.toString() : "[none]")
|
||
|
+ " #scans: " + (this.scans != null ? this.scans.length : "[none]") + "}";
|
||
|
};
|
||
|
Region.prototype._updateComplexity = function () {
|
||
|
if (this.bounds == null) {
|
||
|
this.complexity = 0;
|
||
|
this.scans = null;
|
||
|
}
|
||
|
else if (this.bounds.empty()) {
|
||
|
this.complexity = 0;
|
||
|
this.scans = null;
|
||
|
this.bounds = null;
|
||
|
}
|
||
|
else if (this.scans == null) {
|
||
|
this.complexity = 1;
|
||
|
}
|
||
|
else {
|
||
|
this.complexity = 2;
|
||
|
if (this.scans.length === 1) {
|
||
|
var scan = this.scans[0];
|
||
|
if (scan.top === this.bounds.top && scan.bottom === this.bounds.bottom && scan.scanlines.length === 1) {
|
||
|
var scanline = scan.scanlines[0];
|
||
|
if (scanline.left === this.bounds.left && scanline.right === this.bounds.right) {
|
||
|
this.scans = null;
|
||
|
this.complexity = 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
Region.prototype.subtract = function (rect) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region " + this.toString() + " subtract " + rect.toString());
|
||
|
if (this.bounds != null) {
|
||
|
var isect = this.bounds.intersect(rect);
|
||
|
if (isect != null) { // Only need to do anything if there is any chance of an overlap
|
||
|
if (this.scans == null) {
|
||
|
// We currently have a simple region and there is some kind of an overlap.
|
||
|
// We need to create scanlines now. Simplest method is to fake one scan line
|
||
|
// that equals the simple region and re-use the same logic as for complex regions
|
||
|
this.scans = [];
|
||
|
this.scans.push(new Scan(null, null, this.bounds.top, this.bounds.bottom, [{ left: this.bounds.left, right: this.bounds.right }]));
|
||
|
this.complexity = 2;
|
||
|
}
|
||
|
// We (now) have a complex region. First we skip any scans that are entirely above rect.top
|
||
|
// The first scan that falls partially below rect.top needs to be split into two scans.
|
||
|
var si = 0;
|
||
|
while (si < this.scans.length) {
|
||
|
var scan = this.scans[si];
|
||
|
if (scan.bottom >= rect.top) {
|
||
|
// We need to clone this scan into two so that we can subtract from the second one
|
||
|
var cloned = scan.clone();
|
||
|
scan.bottom = rect.top - 1;
|
||
|
cloned.top = rect.top;
|
||
|
if (scan.top >= scan.bottom) {
|
||
|
this.scans[si] = cloned;
|
||
|
}
|
||
|
else {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region split top scan " + si + " for substraction");
|
||
|
this.scans.splice(++si, 0, cloned);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
si++;
|
||
|
}
|
||
|
// Now find the first one that falls at least partially below rect.bottom, which needs to be
|
||
|
// split if it is only partially below rect.bottom
|
||
|
var first = si;
|
||
|
while (si < this.scans.length) {
|
||
|
var scan = this.scans[si];
|
||
|
if (scan.top > rect.bottom) {
|
||
|
break;
|
||
|
}
|
||
|
if (scan.bottom > rect.bottom) {
|
||
|
// We need to clone this scan into two so that we can subtract from the first one
|
||
|
var cloned = scan.clone();
|
||
|
scan.bottom = rect.bottom;
|
||
|
cloned.top = rect.bottom + 1;
|
||
|
if (scan.top >= scan.bottom) {
|
||
|
this.scans[si] = cloned;
|
||
|
}
|
||
|
else {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region split bottom scan " + si + " for substraction");
|
||
|
this.scans.splice(++si, 0, cloned);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
si++;
|
||
|
}
|
||
|
// Now perform a subtraction on each scan in between rect.top and rect.bottom. Because we
|
||
|
// cloned scans that partially overlapped rect.top and rect.bottom, we don't have to
|
||
|
// account for this anymore.
|
||
|
if (first < this.scans.length) {
|
||
|
var last = si;
|
||
|
si = first;
|
||
|
while (si < last) {
|
||
|
var scan = this.scans[si];
|
||
|
if (!scan.subtract(rect.left, rect.right)) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region remove now empty scan " + si + " due to subtraction");
|
||
|
this.scans.splice(si, 1);
|
||
|
last--;
|
||
|
continue;
|
||
|
}
|
||
|
si++;
|
||
|
}
|
||
|
}
|
||
|
// Update bounds
|
||
|
if (this.scans != null) {
|
||
|
var left = void 0;
|
||
|
var top_2;
|
||
|
var right = void 0;
|
||
|
var bottom = void 0;
|
||
|
var len = this.scans.length;
|
||
|
for (var i = 0; i < len; i++) {
|
||
|
var scan = this.scans[i];
|
||
|
if (i === 0) {
|
||
|
top_2 = scan.top;
|
||
|
}
|
||
|
if (i === len - 1) {
|
||
|
bottom = scan.bottom;
|
||
|
}
|
||
|
var slen = scan.scanlines.length;
|
||
|
if (slen > 0) {
|
||
|
var scanline = scan.scanlines[0];
|
||
|
if (left == null || scanline.left < left) {
|
||
|
left = scanline.left;
|
||
|
}
|
||
|
scanline = scan.scanlines[slen - 1];
|
||
|
if (right == null || scanline.right > right) {
|
||
|
right = scanline.right;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (left != null && top_2 != null && right != null && bottom != null) {
|
||
|
this.bounds = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.Rect(null, left, top_2, right, bottom);
|
||
|
this._updateComplexity();
|
||
|
}
|
||
|
else {
|
||
|
// This has to be a null region now
|
||
|
this.bounds = null;
|
||
|
this.scans = null;
|
||
|
this.complexity = 0;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
this._updateComplexity();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region subtraction -> " + this.toString());
|
||
|
};
|
||
|
Region.prototype.intersect = function (rect) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region " + this.toString() + " intersect with " + rect.toString());
|
||
|
if (this.bounds != null) {
|
||
|
this.bounds = this.bounds.intersect(rect);
|
||
|
if (this.bounds != null) {
|
||
|
if (this.scans != null) {
|
||
|
var si = 0;
|
||
|
// Remove any scans that are entirely above the new bounds.top
|
||
|
while (si < this.scans.length) {
|
||
|
var scan = this.scans[si];
|
||
|
if (scan.bottom < this.bounds.top) {
|
||
|
si++;
|
||
|
}
|
||
|
else {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (si > 0) {
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region remove " + si + " scans from top");
|
||
|
this.scans.splice(0, si);
|
||
|
// Adjust the first scan's top to match the new bounds.top
|
||
|
if (this.scans.length > 0) {
|
||
|
this.scans[0].top = this.bounds.top;
|
||
|
}
|
||
|
}
|
||
|
// Get rid of anything that falls outside the new bounds.left/bounds.right
|
||
|
si = 0;
|
||
|
while (si < this.scans.length) {
|
||
|
var scan = this.scans[si];
|
||
|
if (scan.top > this.bounds.bottom) {
|
||
|
// Remove this and all remaining scans that fall entirely below the new bounds.bottom
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region remove " + (this.scans.length - si) + " scans from bottom");
|
||
|
this.scans.splice(si, this.scans.length - si);
|
||
|
break;
|
||
|
}
|
||
|
if (!scan.intersect(this.bounds.left, this.bounds.right)) {
|
||
|
// Remove now empty scan
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region remove now empty scan " + si + " due to intersection");
|
||
|
this.scans.splice(si, 1);
|
||
|
continue;
|
||
|
}
|
||
|
si++;
|
||
|
}
|
||
|
// If there are any scans left, adjust the last one's bottom to the new bounds.bottom
|
||
|
if (this.scans.length > 0) {
|
||
|
this.scans[this.scans.length - 1].bottom = this.bounds.bottom;
|
||
|
}
|
||
|
this._updateComplexity();
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
this.scans = null;
|
||
|
this.complexity = 0;
|
||
|
}
|
||
|
}
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[wmf] Region intersection -> " + this.toString());
|
||
|
};
|
||
|
Region.prototype.offset = function (offX, offY) {
|
||
|
if (this.bounds != null) {
|
||
|
this.bounds.left += offX;
|
||
|
this.bounds.top += offY;
|
||
|
this.bounds.right += offX;
|
||
|
this.bounds.bottom += offY;
|
||
|
}
|
||
|
if (this.scans != null) {
|
||
|
var slen = this.scans.length;
|
||
|
for (var si = 0; si < slen; si++) {
|
||
|
var scan = this.scans[si];
|
||
|
scan.top += offY;
|
||
|
scan.bottom += offY;
|
||
|
var len = scan.scanlines.length;
|
||
|
for (var i = 0; i < len; i++) {
|
||
|
var scanline = scan.scanlines[i];
|
||
|
scanline.left += offX;
|
||
|
scanline.right += offX;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
return Region;
|
||
|
}(_Primitives__WEBPACK_IMPORTED_MODULE_1__.Obj));
|
||
|
|
||
|
function CreateSimpleRegion(left, top, right, bottom) {
|
||
|
var rgn = new Region(null, null);
|
||
|
rgn.bounds = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.Rect(null, left, top, right, bottom);
|
||
|
rgn._updateComplexity();
|
||
|
return rgn;
|
||
|
}
|
||
|
var Scan = /** @class */ (function () {
|
||
|
function Scan(reader, copy, top, bottom, scanlines) {
|
||
|
if (reader != null) {
|
||
|
var cnt = reader.readUint16();
|
||
|
this.top = reader.readUint16();
|
||
|
this.bottom = reader.readUint16();
|
||
|
this.scanlines = [];
|
||
|
for (var i = 0; i < cnt; i++) {
|
||
|
var left = reader.readUint16();
|
||
|
var right = reader.readUint16();
|
||
|
this.scanlines.push({ left: left, right: right });
|
||
|
}
|
||
|
reader.skip(2);
|
||
|
}
|
||
|
else if (copy != null) {
|
||
|
this.top = copy.top;
|
||
|
this.bottom = copy.bottom;
|
||
|
this.scanlines = [];
|
||
|
for (var i = 0; i < copy.scanlines.length; i++) {
|
||
|
var scanline = copy.scanlines[i];
|
||
|
this.scanlines.push({ left: scanline.left, right: scanline.right });
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
this.top = top;
|
||
|
this.bottom = bottom;
|
||
|
this.scanlines = scanlines;
|
||
|
}
|
||
|
}
|
||
|
Scan.prototype.clone = function () {
|
||
|
return new Scan(null, this);
|
||
|
};
|
||
|
Scan.prototype.subtract = function (left, right) {
|
||
|
var i;
|
||
|
// Keep everything on the left side
|
||
|
i = 0;
|
||
|
while (i < this.scanlines.length) {
|
||
|
var scanline = this.scanlines[i];
|
||
|
if (scanline.left <= left) {
|
||
|
if (scanline.right >= left) {
|
||
|
scanline.right = left - 1;
|
||
|
if (scanline.left >= scanline.right) {
|
||
|
this.scanlines.splice(i, 1);
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
i++;
|
||
|
}
|
||
|
else {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
// Find the first one that may exceed to the right side
|
||
|
var first = i;
|
||
|
var cnt = 0;
|
||
|
while (i < this.scanlines.length) {
|
||
|
var scanline = this.scanlines[i];
|
||
|
if (scanline.right > right) {
|
||
|
scanline.left = right;
|
||
|
cnt = i - first;
|
||
|
if (scanline.left >= scanline.right) {
|
||
|
cnt++;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
i++;
|
||
|
}
|
||
|
// Delete everything we're subtracting
|
||
|
if (cnt > 0 && first < this.scanlines.length) {
|
||
|
this.scanlines.splice(first, cnt);
|
||
|
}
|
||
|
return this.scanlines.length > 0;
|
||
|
};
|
||
|
Scan.prototype.intersect = function (left, right) {
|
||
|
// Get rid of anything that falls entirely outside to the left
|
||
|
for (var i = 0; i < this.scanlines.length; i++) {
|
||
|
var scanline = this.scanlines[i];
|
||
|
if (scanline.left >= left || scanline.right >= left) {
|
||
|
if (i > 0) {
|
||
|
this.scanlines.splice(0, i);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (this.scanlines.length > 0) {
|
||
|
// Adjust the first to match the left, if needed
|
||
|
var scanline = this.scanlines[0];
|
||
|
if (scanline.left < left) {
|
||
|
scanline.left = left;
|
||
|
}
|
||
|
// Get rid of anything that falls entirely outside to the right
|
||
|
for (var i = 0; i < this.scanlines.length; i++) {
|
||
|
scanline = this.scanlines[i];
|
||
|
if (scanline.left > right) {
|
||
|
this.scanlines.splice(i, this.scanlines.length - i);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (this.scanlines.length > 0) {
|
||
|
// Adjust the last to match the right, if needed
|
||
|
scanline = this.scanlines[this.scanlines.length - 1];
|
||
|
if (scanline.right > right) {
|
||
|
scanline.right = right;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return this.scanlines.length > 0;
|
||
|
};
|
||
|
Scan.prototype.toString = function () {
|
||
|
return "{ #scanlines: " + this.scanlines.length + "}";
|
||
|
};
|
||
|
return Scan;
|
||
|
}());
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/Renderer.ts":
|
||
|
/*!*******************************!*\
|
||
|
!*** ./src/wmfjs/Renderer.ts ***!
|
||
|
\*******************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "Renderer": () => (/* binding */ Renderer)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ "./src/util/index.ts");
|
||
|
/* harmony import */ var _Blob__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Blob */ "./src/wmfjs/Blob.ts");
|
||
|
/* harmony import */ var _GDIContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./GDIContext */ "./src/wmfjs/GDIContext.ts");
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/* harmony import */ var _WMFRecords__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./WMFRecords */ "./src/wmfjs/WMFRecords.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
var Renderer = /** @class */ (function () {
|
||
|
function Renderer(blob) {
|
||
|
this.parse(blob);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.log("WMFJS.Renderer instantiated");
|
||
|
}
|
||
|
Renderer.prototype.render = function (info) {
|
||
|
var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
||
|
this._render(new _util__WEBPACK_IMPORTED_MODULE_0__.SVG(svgElement), info.mapMode, info.xExt, info.yExt);
|
||
|
svgElement.setAttribute("viewBox", [0, 0, info.xExt, info.yExt].join(" "));
|
||
|
svgElement.setAttribute("preserveAspectRatio", "none"); // TODO: MM_ISOTROPIC vs MM_ANISOTROPIC
|
||
|
svgElement.setAttribute("width", info.width);
|
||
|
svgElement.setAttribute("height", info.height);
|
||
|
return svgElement;
|
||
|
};
|
||
|
Renderer.prototype.parse = function (blob) {
|
||
|
this._img = null;
|
||
|
var reader = new _Blob__WEBPACK_IMPORTED_MODULE_1__.Blob(blob);
|
||
|
var type;
|
||
|
var size;
|
||
|
var placable;
|
||
|
var headerstart;
|
||
|
var key = reader.readUint32();
|
||
|
if (key === 0x9ac6cdd7) {
|
||
|
placable = new WMFPlacable(reader);
|
||
|
headerstart = reader.pos;
|
||
|
type = reader.readUint16();
|
||
|
size = reader.readUint16();
|
||
|
}
|
||
|
else {
|
||
|
headerstart = 0;
|
||
|
type = key & 0xffff;
|
||
|
size = (key >>> 16) & 0xffff;
|
||
|
}
|
||
|
switch (type) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.GDI.MetafileType.MEMORYMETAFILE:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.GDI.MetafileType.DISKMETAFILE:
|
||
|
if (size === _Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.GDI.METAHEADER_SIZE / 2) {
|
||
|
var version = reader.readUint16();
|
||
|
switch (version) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.GDI.MetafileVersion.METAVERSION100:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.GDI.MetafileVersion.METAVERSION300:
|
||
|
this._img = new WMF(reader, placable, version, headerstart + (size * 2));
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
if (this._img == null) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_3__.WMFJSError("Format not recognized");
|
||
|
}
|
||
|
};
|
||
|
Renderer.prototype._render = function (svg, mapMode, xExt, yExt) {
|
||
|
// See https://www-user.tu-chemnitz.de/~ygu/petzold/ch18b.htm
|
||
|
var gdi = new _GDIContext__WEBPACK_IMPORTED_MODULE_2__.GDIContext(svg);
|
||
|
gdi.setViewportExt(xExt, yExt);
|
||
|
gdi.setMapMode(mapMode);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.log("[WMF] BEGIN RENDERING --->");
|
||
|
this._img.render(gdi);
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.log("[WMF] <--- DONE RENDERING");
|
||
|
};
|
||
|
return Renderer;
|
||
|
}());
|
||
|
|
||
|
var WMFRect16 = /** @class */ (function () {
|
||
|
function WMFRect16(reader) {
|
||
|
this.left = reader.readInt16();
|
||
|
this.top = reader.readInt16();
|
||
|
this.right = reader.readInt16();
|
||
|
this.bottom = reader.readInt16();
|
||
|
}
|
||
|
WMFRect16.prototype.toString = function () {
|
||
|
return "{left: " + this.left + ", top: " + this.top + ", right: " + this.right
|
||
|
+ ", bottom: " + this.bottom + "}";
|
||
|
};
|
||
|
return WMFRect16;
|
||
|
}());
|
||
|
var WMFPlacable = /** @class */ (function () {
|
||
|
function WMFPlacable(reader) {
|
||
|
reader.skip(2);
|
||
|
this.boundingBox = new WMFRect16(reader);
|
||
|
this.unitsPerInch = reader.readInt16();
|
||
|
reader.skip(4);
|
||
|
reader.skip(2); // TODO: checksum
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_3__.Helper.log("Got bounding box " + this.boundingBox + " and " + this.unitsPerInch + " units/inch");
|
||
|
}
|
||
|
return WMFPlacable;
|
||
|
}());
|
||
|
var WMF = /** @class */ (function () {
|
||
|
function WMF(reader, placable, version, hdrsize) {
|
||
|
this._version = version;
|
||
|
this._hdrsize = hdrsize;
|
||
|
this._placable = placable;
|
||
|
this._records = new _WMFRecords__WEBPACK_IMPORTED_MODULE_4__.WMFRecords(reader, this._hdrsize);
|
||
|
}
|
||
|
WMF.prototype.render = function (gdi) {
|
||
|
this._records.play(gdi);
|
||
|
};
|
||
|
return WMF;
|
||
|
}());
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/Style.ts":
|
||
|
/*!****************************!*\
|
||
|
!*** ./src/wmfjs/Style.ts ***!
|
||
|
\****************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "Brush": () => (/* binding */ Brush),
|
||
|
/* harmony export */ "ColorRef": () => (/* binding */ ColorRef),
|
||
|
/* harmony export */ "Font": () => (/* binding */ Font),
|
||
|
/* harmony export */ "Palette": () => (/* binding */ Palette),
|
||
|
/* harmony export */ "PaletteEntry": () => (/* binding */ PaletteEntry),
|
||
|
/* harmony export */ "Pen": () => (/* binding */ Pen)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _Bitmap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Bitmap */ "./src/wmfjs/Bitmap.ts");
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/* harmony import */ var _Primitives__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Primitives */ "./src/wmfjs/Primitives.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
var __extends = (undefined && undefined.__extends) || (function () {
|
||
|
var extendStatics = function (d, b) {
|
||
|
extendStatics = Object.setPrototypeOf ||
|
||
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
||
|
return extendStatics(d, b);
|
||
|
};
|
||
|
return function (d, b) {
|
||
|
if (typeof b !== "function" && b !== null)
|
||
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
||
|
extendStatics(d, b);
|
||
|
function __() { this.constructor = d; }
|
||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
|
||
|
|
||
|
var ColorRef = /** @class */ (function () {
|
||
|
function ColorRef(reader, r, g, b) {
|
||
|
if (reader != null) {
|
||
|
this.r = reader.readUint8();
|
||
|
this.g = reader.readUint8();
|
||
|
this.b = reader.readUint8();
|
||
|
reader.skip(1);
|
||
|
}
|
||
|
else {
|
||
|
this.r = r;
|
||
|
this.g = g;
|
||
|
this.b = b;
|
||
|
}
|
||
|
}
|
||
|
ColorRef.prototype.clone = function () {
|
||
|
return new ColorRef(null, this.r, this.g, this.b);
|
||
|
};
|
||
|
ColorRef.prototype.toHex = function () {
|
||
|
var rgb = (this.r << 16) | (this.g << 8) | this.b;
|
||
|
return (0x1000000 + rgb).toString(16).slice(1);
|
||
|
};
|
||
|
ColorRef.prototype.toString = function () {
|
||
|
return "{r: " + this.r + ", g: " + this.g + ", b: " + this.b + "}";
|
||
|
};
|
||
|
return ColorRef;
|
||
|
}());
|
||
|
|
||
|
var Font = /** @class */ (function (_super) {
|
||
|
__extends(Font, _super);
|
||
|
function Font(reader, copy) {
|
||
|
var _this = _super.call(this, "font") || this;
|
||
|
if (reader != null) {
|
||
|
_this.height = reader.readInt16();
|
||
|
_this.width = reader.readInt16();
|
||
|
_this.escapement = reader.readInt16();
|
||
|
_this.orientation = reader.readInt16();
|
||
|
_this.weight = reader.readInt16();
|
||
|
_this.italic = reader.readUint8();
|
||
|
_this.underline = reader.readUint8();
|
||
|
_this.strikeout = reader.readUint8();
|
||
|
_this.charset = reader.readUint8();
|
||
|
_this.outprecision = reader.readUint8();
|
||
|
_this.clipprecision = reader.readUint8();
|
||
|
_this.quality = reader.readUint8();
|
||
|
var pitchAndFamily = reader.readUint8();
|
||
|
_this.pitch = pitchAndFamily & 0xf; // TODO: double check
|
||
|
_this.family = (pitchAndFamily >> 6) & 0x3; // TODO: double check
|
||
|
var dataLength = copy;
|
||
|
var start = reader.pos;
|
||
|
_this.facename = reader.readNullTermString(Math.min(dataLength - (reader.pos - start), 32));
|
||
|
}
|
||
|
else if (copy != null) {
|
||
|
copy = copy;
|
||
|
_this.height = copy.height;
|
||
|
_this.width = copy.width;
|
||
|
_this.escapement = copy.escapement;
|
||
|
_this.orientation = copy.orientation;
|
||
|
_this.weight = copy.weight;
|
||
|
_this.italic = copy.italic;
|
||
|
_this.underline = copy.underline;
|
||
|
_this.strikeout = copy.strikeout;
|
||
|
_this.charset = copy.charset;
|
||
|
_this.outprecision = copy.outprecision;
|
||
|
_this.clipprecision = copy.clipprecision;
|
||
|
_this.quality = copy.quality;
|
||
|
_this.pitch = copy.pitch;
|
||
|
_this.family = copy.family;
|
||
|
_this.facename = copy.facename;
|
||
|
}
|
||
|
else {
|
||
|
// TODO: Values for a default font?
|
||
|
_this.height = -80;
|
||
|
_this.width = 0;
|
||
|
_this.escapement = 0;
|
||
|
_this.orientation = 0;
|
||
|
_this.weight = 400;
|
||
|
_this.italic = 0;
|
||
|
_this.underline = 0;
|
||
|
_this.strikeout = 0;
|
||
|
_this.charset = 0;
|
||
|
_this.outprecision = 0;
|
||
|
_this.clipprecision = 0;
|
||
|
_this.quality = 0;
|
||
|
_this.pitch = 0;
|
||
|
_this.family = 0;
|
||
|
_this.facename = "Helvetica";
|
||
|
}
|
||
|
return _this;
|
||
|
}
|
||
|
Font.prototype.clone = function () {
|
||
|
return new Font(null, this);
|
||
|
};
|
||
|
Font.prototype.toString = function () {
|
||
|
return JSON.stringify(this);
|
||
|
};
|
||
|
return Font;
|
||
|
}(_Primitives__WEBPACK_IMPORTED_MODULE_2__.Obj));
|
||
|
|
||
|
var Brush = /** @class */ (function (_super) {
|
||
|
__extends(Brush, _super);
|
||
|
function Brush(reader, copy, forceDibPattern) {
|
||
|
var _this = _super.call(this, "brush") || this;
|
||
|
if (reader != null) {
|
||
|
var dataLength = copy;
|
||
|
var start = reader.pos;
|
||
|
if (forceDibPattern === true || forceDibPattern === false) {
|
||
|
_this.style = reader.readUint16();
|
||
|
if (forceDibPattern && _this.style !== _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_PATTERN) {
|
||
|
_this.style = _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_DIBPATTERNPT;
|
||
|
}
|
||
|
switch (_this.style) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_SOLID:
|
||
|
_this.color = new ColorRef(reader);
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_PATTERN:
|
||
|
reader.skip(forceDibPattern ? 2 : 6);
|
||
|
_this.pattern = new _Bitmap__WEBPACK_IMPORTED_MODULE_0__.Bitmap16(reader, dataLength - (reader.pos - start));
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_DIBPATTERNPT:
|
||
|
_this.colorusage = forceDibPattern ? reader.readUint16() : reader.readUint32();
|
||
|
if (!forceDibPattern) {
|
||
|
reader.skip(2);
|
||
|
}
|
||
|
_this.dibpatternpt = new _Bitmap__WEBPACK_IMPORTED_MODULE_0__.DIBitmap(reader, dataLength - (reader.pos - start));
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_HATCHED:
|
||
|
_this.color = new ColorRef(reader);
|
||
|
_this.hatchstyle = reader.readUint16();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else if (forceDibPattern instanceof _Bitmap__WEBPACK_IMPORTED_MODULE_0__.PatternBitmap16) {
|
||
|
_this.style = _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_PATTERN;
|
||
|
_this.pattern = forceDibPattern;
|
||
|
}
|
||
|
}
|
||
|
else if (copy != null) {
|
||
|
copy = copy;
|
||
|
_this.style = copy.style;
|
||
|
switch (_this.style) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_SOLID:
|
||
|
_this.color = copy.color.clone();
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_PATTERN:
|
||
|
_this.pattern = copy.pattern.clone();
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_DIBPATTERNPT:
|
||
|
_this.colorusage = copy.colorusage;
|
||
|
_this.dibpatternpt = copy.dibpatternpt;
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_HATCHED:
|
||
|
_this.color = copy.color.clone();
|
||
|
_this.hatchstyle = copy.hatchstyle;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return _this;
|
||
|
}
|
||
|
Brush.prototype.clone = function () {
|
||
|
return new Brush(null, this);
|
||
|
};
|
||
|
Brush.prototype.toString = function () {
|
||
|
var ret = "{style: " + this.style;
|
||
|
switch (this.style) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_SOLID:
|
||
|
ret += ", color: " + this.color.toString();
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_DIBPATTERNPT:
|
||
|
ret += ", colorusage: " + this.colorusage;
|
||
|
break;
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_HATCHED:
|
||
|
ret += ", color: " + this.color.toString() + ", hatchstyle: " + this.hatchstyle;
|
||
|
break;
|
||
|
}
|
||
|
return ret + "}";
|
||
|
};
|
||
|
return Brush;
|
||
|
}(_Primitives__WEBPACK_IMPORTED_MODULE_2__.Obj));
|
||
|
|
||
|
var Pen = /** @class */ (function (_super) {
|
||
|
__extends(Pen, _super);
|
||
|
function Pen(reader, style, width, color, linecap, join) {
|
||
|
var _this = _super.call(this, "pen") || this;
|
||
|
if (reader != null) {
|
||
|
style = reader.readUint16();
|
||
|
_this.style = style & 0xFF;
|
||
|
_this.width = new _Primitives__WEBPACK_IMPORTED_MODULE_2__.PointS(reader);
|
||
|
_this.color = new ColorRef(reader);
|
||
|
_this.linecap = (style & (_Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.PenStyle.PS_ENDCAP_SQUARE | _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.PenStyle.PS_ENDCAP_FLAT));
|
||
|
_this.join = (style & (_Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.PenStyle.PS_JOIN_BEVEL | _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.PenStyle.PS_JOIN_MITER));
|
||
|
}
|
||
|
else {
|
||
|
_this.style = style;
|
||
|
_this.width = width;
|
||
|
_this.color = color;
|
||
|
_this.linecap = linecap;
|
||
|
_this.join = join;
|
||
|
}
|
||
|
return _this;
|
||
|
}
|
||
|
Pen.prototype.clone = function () {
|
||
|
return new Pen(null, this.style, this.width.clone(), this.color.clone(), this.linecap, this.join);
|
||
|
};
|
||
|
Pen.prototype.toString = function () {
|
||
|
return "{style: " + this.style + ", width: " + this.width.toString() + ", color: " + this.color.toString()
|
||
|
+ ", linecap: " + this.linecap + ", join: " + this.join + "}";
|
||
|
};
|
||
|
return Pen;
|
||
|
}(_Primitives__WEBPACK_IMPORTED_MODULE_2__.Obj));
|
||
|
|
||
|
var PaletteEntry = /** @class */ (function () {
|
||
|
function PaletteEntry(reader, copy) {
|
||
|
if (reader != null) {
|
||
|
this.flag = reader.readUint8();
|
||
|
this.b = reader.readUint8();
|
||
|
this.g = reader.readUint8();
|
||
|
this.r = reader.readUint8();
|
||
|
}
|
||
|
else {
|
||
|
this.flag = copy.flag;
|
||
|
this.b = copy.b;
|
||
|
this.g = copy.g;
|
||
|
this.r = copy.r;
|
||
|
}
|
||
|
}
|
||
|
PaletteEntry.prototype.clone = function () {
|
||
|
return new PaletteEntry(null, this);
|
||
|
};
|
||
|
return PaletteEntry;
|
||
|
}());
|
||
|
|
||
|
var Palette = /** @class */ (function (_super) {
|
||
|
__extends(Palette, _super);
|
||
|
function Palette(reader, copy) {
|
||
|
var _this = _super.call(this, "palette") || this;
|
||
|
if (reader != null) {
|
||
|
_this.start = reader.readUint16();
|
||
|
var cnt = reader.readUint16();
|
||
|
_this.entries = [];
|
||
|
while (cnt > 0) {
|
||
|
_this.entries.push(new PaletteEntry(reader));
|
||
|
cnt--;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
_this.start = copy.start;
|
||
|
_this.entries = [];
|
||
|
var len = copy.entries.length;
|
||
|
for (var i = 0; i < len; i++) {
|
||
|
_this.entries.push(copy.entries[i]);
|
||
|
}
|
||
|
}
|
||
|
return _this;
|
||
|
}
|
||
|
Palette.prototype.clone = function () {
|
||
|
return new Palette(null, this);
|
||
|
};
|
||
|
Palette.prototype.toString = function () {
|
||
|
return "{ #entries: " + this.entries.length + "}"; // TODO
|
||
|
};
|
||
|
return Palette;
|
||
|
}(_Primitives__WEBPACK_IMPORTED_MODULE_2__.Obj));
|
||
|
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
|
||
|
/***/ "./src/wmfjs/WMFRecords.ts":
|
||
|
/*!*********************************!*\
|
||
|
!*** ./src/wmfjs/WMFRecords.ts ***!
|
||
|
\*********************************/
|
||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||
|
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "WMFRecords": () => (/* binding */ WMFRecords)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _Bitmap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Bitmap */ "./src/wmfjs/Bitmap.ts");
|
||
|
/* harmony import */ var _Blob__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Blob */ "./src/wmfjs/Blob.ts");
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/* harmony import */ var _Primitives__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Primitives */ "./src/wmfjs/Primitives.ts");
|
||
|
/* harmony import */ var _Region__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Region */ "./src/wmfjs/Region.ts");
|
||
|
/* harmony import */ var _Style__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Style */ "./src/wmfjs/Style.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
var WMFRecords = /** @class */ (function () {
|
||
|
function WMFRecords(reader, first) {
|
||
|
this._records = [];
|
||
|
var all = false;
|
||
|
var curpos = first;
|
||
|
var _loop_1 = function () {
|
||
|
reader.seek(curpos);
|
||
|
var size = reader.readUint32();
|
||
|
if (size < 3) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_2__.WMFJSError("Invalid record size");
|
||
|
}
|
||
|
var type = reader.readUint16();
|
||
|
switch (type) {
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_EOF:
|
||
|
all = true;
|
||
|
return "break-main_loop";
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETMAPMODE: {
|
||
|
var mapMode_1 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setMapMode(mapMode_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETWINDOWORG: {
|
||
|
var y_1 = reader.readInt16();
|
||
|
var x_1 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setWindowOrg(x_1, y_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETWINDOWEXT: {
|
||
|
var y_2 = reader.readInt16();
|
||
|
var x_2 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setWindowExt(x_2, y_2);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_OFFSETWINDOWORG: {
|
||
|
var offY_1 = reader.readInt16();
|
||
|
var offX_1 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.offsetWindowOrg(offX_1, offY_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETVIEWPORTORG: {
|
||
|
var y_3 = reader.readInt16();
|
||
|
var x_3 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setViewportOrg(x_3, y_3);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETVIEWPORTEXT: {
|
||
|
var y_4 = reader.readInt16();
|
||
|
var x_4 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setViewportExt(x_4, y_4);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_OFFSETVIEWPORTORG: {
|
||
|
var offY_2 = reader.readInt16();
|
||
|
var offX_2 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.offsetViewportOrg(offX_2, offY_2);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SAVEDC: {
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.saveDC();
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_RESTOREDC: {
|
||
|
var saved_1 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.restoreDC(saved_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETSTRETCHBLTMODE: {
|
||
|
var stretchMode_1 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setStretchBltMode(stretchMode_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_DIBBITBLT: {
|
||
|
var haveSrcDib = ((type >> 8) + 3 !== size);
|
||
|
var rasterOp_1 = reader.readUint16() | (reader.readUint16() << 16);
|
||
|
var srcY_1 = reader.readInt16();
|
||
|
var srcX_1 = reader.readInt16();
|
||
|
if (!haveSrcDib) {
|
||
|
// ignore reserved field
|
||
|
reader.skip(2);
|
||
|
}
|
||
|
var height_1 = reader.readInt16();
|
||
|
var width_1 = reader.readInt16();
|
||
|
var destY_1 = reader.readInt16();
|
||
|
var destX_1 = reader.readInt16();
|
||
|
if (haveSrcDib) {
|
||
|
var datalength = size * 2 - (reader.pos - curpos);
|
||
|
var dib_1 = new _Bitmap__WEBPACK_IMPORTED_MODULE_0__.DIBitmap(reader, datalength);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.dibBits(srcX_1, srcY_1, destX_1, destY_1, width_1, height_1, rasterOp_1, dib_1);
|
||
|
});
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_DIBSTRETCHBLT: {
|
||
|
var haveSrcDib = ((type >> 8) + 3 !== size);
|
||
|
var rasterOp_2 = reader.readUint16() | (reader.readUint16() << 16);
|
||
|
var srcH_1 = reader.readInt16();
|
||
|
var srcW_1 = reader.readInt16();
|
||
|
var srcY_2 = reader.readInt16();
|
||
|
var srcX_2 = reader.readInt16();
|
||
|
var destH_1 = reader.readInt16();
|
||
|
var destW_1 = reader.readInt16();
|
||
|
var destY_2 = reader.readInt16();
|
||
|
var destX_2 = reader.readInt16();
|
||
|
var datalength = size * 2 - (reader.pos - curpos);
|
||
|
var dib_2 = new _Bitmap__WEBPACK_IMPORTED_MODULE_0__.DIBitmap(reader, datalength);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.stretchDibBits(srcX_2, srcY_2, srcW_1, srcH_1, destX_2, destY_2, destW_1, destH_1, rasterOp_2, dib_2);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_STRETCHDIB: {
|
||
|
var rasterOp_3 = reader.readUint16() | (reader.readUint16() << 16);
|
||
|
var colorUsage_1 = reader.readInt16();
|
||
|
var srcH_2 = reader.readInt16();
|
||
|
var srcW_2 = reader.readInt16();
|
||
|
var srcY_3 = reader.readInt16();
|
||
|
var srcX_3 = reader.readInt16();
|
||
|
var destH_2 = reader.readInt16();
|
||
|
var destW_2 = reader.readInt16();
|
||
|
var destY_3 = reader.readInt16();
|
||
|
var destX_3 = reader.readInt16();
|
||
|
var datalength = size * 2 - (reader.pos - curpos);
|
||
|
var dib_3 = new _Bitmap__WEBPACK_IMPORTED_MODULE_0__.DIBitmap(reader, datalength);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.stretchDib(srcX_3, srcY_3, srcW_2, srcH_2, destX_3, destY_3, destW_2, destH_2, rasterOp_3, colorUsage_1, dib_3);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_ESCAPE: {
|
||
|
var func_1 = reader.readUint16();
|
||
|
var count_1 = reader.readUint16();
|
||
|
var offset_1 = reader.pos;
|
||
|
var blob_1 = new _Blob__WEBPACK_IMPORTED_MODULE_1__.Blob(reader, offset_1);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.escape(func_1, blob_1, offset_1, count_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETTEXTALIGN: {
|
||
|
var textAlign_1 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setTextAlign(textAlign_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETBKMODE: {
|
||
|
var bkMode_1 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setBkMode(bkMode_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETTEXTCOLOR: {
|
||
|
var textColor_1 = new _Style__WEBPACK_IMPORTED_MODULE_5__.ColorRef(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setTextColor(textColor_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETBKCOLOR: {
|
||
|
var bkColor_1 = new _Style__WEBPACK_IMPORTED_MODULE_5__.ColorRef(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setBkColor(bkColor_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_CREATEBRUSHINDIRECT: {
|
||
|
var datalength = size * 2 - (reader.pos - curpos);
|
||
|
var brush_1 = new _Style__WEBPACK_IMPORTED_MODULE_5__.Brush(reader, datalength, false);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.createBrush(brush_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_DIBCREATEPATTERNBRUSH: {
|
||
|
var datalength = size * 2 - (reader.pos - curpos);
|
||
|
var brush_2 = new _Style__WEBPACK_IMPORTED_MODULE_5__.Brush(reader, datalength, true);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.createBrush(brush_2);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_CREATEPENINDIRECT: {
|
||
|
var pen_1 = new _Style__WEBPACK_IMPORTED_MODULE_5__.Pen(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.createPen(pen_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_CREATEFONTINDIRECT: {
|
||
|
var datalength = size * 2 - (reader.pos - curpos);
|
||
|
var font_1 = new _Style__WEBPACK_IMPORTED_MODULE_5__.Font(reader, datalength);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.createFont(font_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SELECTOBJECT: {
|
||
|
var idx_1 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.selectObject(idx_1, null);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SELECTPALETTE: {
|
||
|
var idx_2 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.selectObject(idx_2, "palette");
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SELECTCLIPREGION: {
|
||
|
var idx_3 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.selectObject(idx_3, "region");
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_DELETEOBJECT: {
|
||
|
var idx_4 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.deleteObject(idx_4);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_RECTANGLE: {
|
||
|
var rect_1 = new _Primitives__WEBPACK_IMPORTED_MODULE_3__.Rect(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.rectangle(rect_1, 0, 0);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_ROUNDRECT: {
|
||
|
var rh_1 = reader.readInt16();
|
||
|
var rw_1 = reader.readInt16();
|
||
|
var rect_2 = new _Primitives__WEBPACK_IMPORTED_MODULE_3__.Rect(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.rectangle(rect_2, rw_1, rh_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_LINETO: {
|
||
|
var y_5 = reader.readInt16();
|
||
|
var x_5 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.lineTo(x_5, y_5);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_MOVETO: {
|
||
|
var y_6 = reader.readInt16();
|
||
|
var x_6 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.moveTo(x_6, y_6);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_TEXTOUT: {
|
||
|
var len = reader.readInt16();
|
||
|
if (len > 0) {
|
||
|
var text_1 = reader.readString(len);
|
||
|
reader.skip(len % 2);
|
||
|
var y_7 = reader.readInt16();
|
||
|
var x_7 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.textOut(x_7, y_7, text_1);
|
||
|
});
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_EXTTEXTOUT: {
|
||
|
var y_8 = reader.readInt16();
|
||
|
var x_8 = reader.readInt16();
|
||
|
var len = reader.readInt16();
|
||
|
var fwOpts_1 = reader.readUint16();
|
||
|
var hasRect = null;
|
||
|
var hasDx = null;
|
||
|
if (size * 2 === 14 + len + len % 2) {
|
||
|
hasRect = false;
|
||
|
hasDx = false;
|
||
|
}
|
||
|
if (size * 2 === 14 + 8 + len + len % 2) {
|
||
|
hasRect = true;
|
||
|
hasDx = false;
|
||
|
}
|
||
|
if (size * 2 === 14 + len + len % 2 + len * 2) {
|
||
|
hasRect = false;
|
||
|
hasDx = true;
|
||
|
}
|
||
|
if (size * 2 === 14 + 8 + len + len % 2 + len * 2) {
|
||
|
hasRect = true;
|
||
|
hasDx = true;
|
||
|
}
|
||
|
var rect_3 = hasRect ? new _Primitives__WEBPACK_IMPORTED_MODULE_3__.Rect(reader) : null;
|
||
|
if (len > 0) {
|
||
|
var text_2 = reader.readString(len);
|
||
|
reader.skip(len % 2);
|
||
|
var dx_1 = [];
|
||
|
if (hasDx) {
|
||
|
for (var i = 0; i < text_2.length; i++) {
|
||
|
dx_1.push(reader.readInt16());
|
||
|
}
|
||
|
}
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.extTextOut(x_8, y_8, text_2, fwOpts_1, rect_3, dx_1);
|
||
|
});
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_EXCLUDECLIPRECT: {
|
||
|
var rect_4 = new _Primitives__WEBPACK_IMPORTED_MODULE_3__.Rect(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.excludeClipRect(rect_4);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_INTERSECTCLIPRECT: {
|
||
|
var rect_5 = new _Primitives__WEBPACK_IMPORTED_MODULE_3__.Rect(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.intersectClipRect(rect_5);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_POLYGON: {
|
||
|
var cnt = reader.readInt16();
|
||
|
var points_1 = [];
|
||
|
while (cnt > 0) {
|
||
|
points_1.push(new _Primitives__WEBPACK_IMPORTED_MODULE_3__.PointS(reader));
|
||
|
cnt--;
|
||
|
}
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.polygon(points_1, true);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETPOLYFILLMODE: {
|
||
|
var polyfillmode_1 = reader.readUint16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.setPolyFillMode(polyfillmode_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_POLYPOLYGON: {
|
||
|
var cnt = reader.readUint16();
|
||
|
var polygonsPtCnts = [];
|
||
|
for (var i = 0; i < cnt; i++) {
|
||
|
polygonsPtCnts.push(reader.readUint16());
|
||
|
}
|
||
|
var polygons_1 = [];
|
||
|
for (var i = 0; i < cnt; i++) {
|
||
|
var ptCnt = polygonsPtCnts[i];
|
||
|
var p = [];
|
||
|
for (var ip = 0; ip < ptCnt; ip++) {
|
||
|
p.push(new _Primitives__WEBPACK_IMPORTED_MODULE_3__.PointS(reader));
|
||
|
}
|
||
|
polygons_1.push(p);
|
||
|
}
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.polyPolygon(polygons_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_POLYLINE: {
|
||
|
var cnt = reader.readInt16();
|
||
|
var points_2 = [];
|
||
|
while (cnt > 0) {
|
||
|
points_2.push(new _Primitives__WEBPACK_IMPORTED_MODULE_3__.PointS(reader));
|
||
|
cnt--;
|
||
|
}
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.polyline(points_2);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_ELLIPSE: {
|
||
|
var rect_6 = new _Primitives__WEBPACK_IMPORTED_MODULE_3__.Rect(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.ellipse(rect_6);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_CREATEPALETTE: {
|
||
|
var palette_1 = new _Style__WEBPACK_IMPORTED_MODULE_5__.Palette(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.createPalette(palette_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_CREATEREGION: {
|
||
|
var region_1 = new _Region__WEBPACK_IMPORTED_MODULE_4__.Region(reader);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.createRegion(region_1);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_CREATEPATTERNBRUSH: {
|
||
|
var datalength = size * 2 - (reader.pos - curpos);
|
||
|
var patternBitmap = new _Bitmap__WEBPACK_IMPORTED_MODULE_0__.PatternBitmap16(reader, datalength);
|
||
|
var brush_3 = new _Style__WEBPACK_IMPORTED_MODULE_5__.Brush(reader, datalength, patternBitmap);
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.createPatternBrush(brush_3);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_OFFSETCLIPRGN: {
|
||
|
var offY_3 = reader.readInt16();
|
||
|
var offX_3 = reader.readInt16();
|
||
|
this_1._records.push(function (gdi) {
|
||
|
gdi.offsetClipRgn(offX_3, offY_3);
|
||
|
});
|
||
|
break;
|
||
|
}
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_REALIZEPALETTE:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETPALENTRIES:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETROP2:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETRELABS:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETTEXTCHAREXTRA:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_RESIZEPALETTE:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETLAYOUT:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_FILLREGION:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETMAPPERFLAGS:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETTEXTJUSTIFICATION:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SCALEWINDOWEXT:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SCALEVIEWPORTEXT:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_FLOODFILL:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_FRAMEREGION:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_ANIMATEPALETTE:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_EXTFLOODFILL:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETPIXEL:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_PATBLT:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_PIE:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_STRETCHBLT:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_INVERTREGION:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_PAINTREGION:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_ARC:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_CHORD:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_BITBLT:
|
||
|
case _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType.META_SETDIBTODEV:
|
||
|
default: {
|
||
|
var recordName = "UNKNOWN";
|
||
|
for (var name_1 in _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType) {
|
||
|
var recordTypes = _Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.GDI.RecordType;
|
||
|
if (recordTypes[name_1] === type) {
|
||
|
recordName = name_1;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
_Helper__WEBPACK_IMPORTED_MODULE_2__.Helper.log("[WMF] " + recordName + " record (0x" + type.toString(16) + ") at offset 0x"
|
||
|
+ curpos.toString(16) + " with " + (size * 2) + " bytes");
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
curpos += size * 2;
|
||
|
};
|
||
|
var this_1 = this;
|
||
|
main_loop: while (!all) {
|
||
|
var state_1 = _loop_1();
|
||
|
switch (state_1) {
|
||
|
case "break-main_loop": break main_loop;
|
||
|
}
|
||
|
}
|
||
|
if (!all) {
|
||
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_2__.WMFJSError("Could not read all records");
|
||
|
}
|
||
|
}
|
||
|
WMFRecords.prototype.play = function (gdi) {
|
||
|
var len = this._records.length;
|
||
|
for (var i = 0; i < len; i++) {
|
||
|
this._records[i](gdi);
|
||
|
}
|
||
|
};
|
||
|
return WMFRecords;
|
||
|
}());
|
||
|
|
||
|
|
||
|
|
||
|
/***/ })
|
||
|
|
||
|
/******/ });
|
||
|
/************************************************************************/
|
||
|
/******/ // The module cache
|
||
|
/******/ var __webpack_module_cache__ = {};
|
||
|
/******/
|
||
|
/******/ // The require function
|
||
|
/******/ function __webpack_require__(moduleId) {
|
||
|
/******/ // Check if module is in cache
|
||
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||
|
/******/ if (cachedModule !== undefined) {
|
||
|
/******/ return cachedModule.exports;
|
||
|
/******/ }
|
||
|
/******/ // Create a new module (and put it into the cache)
|
||
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||
|
/******/ // no module.id needed
|
||
|
/******/ // no module.loaded needed
|
||
|
/******/ exports: {}
|
||
|
/******/ };
|
||
|
/******/
|
||
|
/******/ // Execute the module function
|
||
|
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||
|
/******/
|
||
|
/******/ // Return the exports of the module
|
||
|
/******/ return module.exports;
|
||
|
/******/ }
|
||
|
/******/
|
||
|
/************************************************************************/
|
||
|
/******/ /* webpack/runtime/define property getters */
|
||
|
/******/ (() => {
|
||
|
/******/ // define getter functions for harmony exports
|
||
|
/******/ __webpack_require__.d = (exports, definition) => {
|
||
|
/******/ for(var key in definition) {
|
||
|
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||
|
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||
|
/******/ }
|
||
|
/******/ }
|
||
|
/******/ };
|
||
|
/******/ })();
|
||
|
/******/
|
||
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||
|
/******/ (() => {
|
||
|
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||
|
/******/ })();
|
||
|
/******/
|
||
|
/******/ /* webpack/runtime/make namespace object */
|
||
|
/******/ (() => {
|
||
|
/******/ // define __esModule on exports
|
||
|
/******/ __webpack_require__.r = (exports) => {
|
||
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||
|
/******/ }
|
||
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||
|
/******/ };
|
||
|
/******/ })();
|
||
|
/******/
|
||
|
/************************************************************************/
|
||
|
var __webpack_exports__ = {};
|
||
|
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||
|
(() => {
|
||
|
/*!****************************!*\
|
||
|
!*** ./src/wmfjs/index.ts ***!
|
||
|
\****************************/
|
||
|
__webpack_require__.r(__webpack_exports__);
|
||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||
|
/* harmony export */ "Error": () => (/* reexport safe */ _Helper__WEBPACK_IMPORTED_MODULE_1__.WMFJSError),
|
||
|
/* harmony export */ "Renderer": () => (/* reexport safe */ _Renderer__WEBPACK_IMPORTED_MODULE_0__.Renderer),
|
||
|
/* harmony export */ "loggingEnabled": () => (/* reexport safe */ _Helper__WEBPACK_IMPORTED_MODULE_1__.loggingEnabled)
|
||
|
/* harmony export */ });
|
||
|
/* harmony import */ var _Renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Renderer */ "./src/wmfjs/Renderer.ts");
|
||
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Helper */ "./src/wmfjs/Helper.ts");
|
||
|
/*
|
||
|
|
||
|
The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2015 Thomas Bluemel
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in all
|
||
|
copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
SOFTWARE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
})();
|
||
|
|
||
|
/******/ return __webpack_exports__;
|
||
|
/******/ })()
|
||
|
;
|
||
|
});
|
||
|
//# sourceMappingURL=WMFJS.bundle.js.map
|