3504 lines
151 KiB
JavaScript
3504 lines
151 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["EMFJS"] = factory();
|
|
else
|
|
root["EMFJS"] = factory();
|
|
})(this, () => {
|
|
return /******/ (() => { // webpackBootstrap
|
|
/******/ "use strict";
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ "./src/emfjs/Bitmap.ts":
|
|
/*!*****************************!*\
|
|
!*** ./src/emfjs/Bitmap.ts ***!
|
|
\*****************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ "BitmapInfo": () => (/* binding */ BitmapInfo),
|
|
/* harmony export */ "DIBitmap": () => (/* binding */ DIBitmap)
|
|
/* harmony export */ });
|
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Helper */ "./src/emfjs/Helper.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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 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._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, bitmapInfo) {
|
|
this._reader = reader;
|
|
this._offset = reader.pos;
|
|
this._location = bitmapInfo;
|
|
this._info = new BitmapInfo(reader, true);
|
|
}
|
|
DIBitmap.prototype.getWidth = function () {
|
|
return this._info.getWidth();
|
|
};
|
|
DIBitmap.prototype.getHeight = function () {
|
|
return this._info.getHeight();
|
|
};
|
|
DIBitmap.prototype.totalSize = function () {
|
|
return this._location.header.size + this._location.data.size;
|
|
};
|
|
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.totalSize() + 14);
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._writeUint32Val(view, 10, this._info.infosize() + 14);
|
|
return _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._blobToBinary(view);
|
|
};
|
|
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();
|
|
}
|
|
this._reader.seek(this._location.header.offset);
|
|
if (data != null) {
|
|
data += this._reader.readBinary(this._location.header.size);
|
|
}
|
|
else {
|
|
data = this._reader.readBinary(this._location.header.size);
|
|
}
|
|
this._reader.seek(this._location.data.offset);
|
|
data += this._reader.readBinary(this._location.data.size);
|
|
var ref = "data:" + mime + ";base64," + btoa(data);
|
|
this._reader.seek(prevpos);
|
|
return ref;
|
|
};
|
|
return DIBitmap;
|
|
}());
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/emfjs/Blob.ts":
|
|
/*!***************************!*\
|
|
!*** ./src/emfjs/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/emfjs/Helper.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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__.EMFJSError("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__.EMFJSError("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__.EMFJSError("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__.EMFJSError("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__.EMFJSError("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__.EMFJSError("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__.EMFJSError("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__.EMFJSError("Unexpected end of file");
|
|
}
|
|
var byte = this.data[this.pos + i] >>> 0;
|
|
if (byte === 0) {
|
|
break;
|
|
}
|
|
ret += String.fromCharCode(byte);
|
|
}
|
|
}
|
|
return ret;
|
|
};
|
|
Blob.prototype.readFixedSizeUnicodeString = function (fixedSizeChars) {
|
|
var ret = "";
|
|
for (var i = 0; i < fixedSizeChars; i++) {
|
|
var charCode = this.readUint16();
|
|
if (charCode === 0) {
|
|
if (++i < fixedSizeChars) {
|
|
this.skip((fixedSizeChars - i) * 2);
|
|
}
|
|
break;
|
|
}
|
|
ret += String.fromCharCode(charCode);
|
|
}
|
|
return ret;
|
|
};
|
|
return Blob;
|
|
}());
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/emfjs/EMFRecords.ts":
|
|
/*!*********************************!*\
|
|
!*** ./src/emfjs/EMFRecords.ts ***!
|
|
\*********************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ "EMFRecords": () => (/* binding */ EMFRecords)
|
|
/* harmony export */ });
|
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Helper */ "./src/emfjs/Helper.ts");
|
|
/* harmony import */ var _Primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Primitives */ "./src/emfjs/Primitives.ts");
|
|
/* harmony import */ var _Region__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Region */ "./src/emfjs/Region.ts");
|
|
/* harmony import */ var _Style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Style */ "./src/emfjs/Style.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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 EmfHeader = /** @class */ (function () {
|
|
function EmfHeader(reader, headerSize) {
|
|
var recordStart = reader.pos - 8;
|
|
this.size = headerSize;
|
|
this.bounds = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
this.frame = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
if (reader.readUint32() !== _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.FormatSignature.ENHMETA_SIGNATURE) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Invalid header signature");
|
|
}
|
|
reader.skip(4); // version
|
|
reader.skip(4); // bytes (size of metafile)
|
|
reader.skip(4); // number of records
|
|
reader.skip(2); // number of handles
|
|
reader.skip(2); // reserved
|
|
var descriptionLen = reader.readUint32();
|
|
var descriptionOff = reader.readUint32();
|
|
this.nPalEntries = reader.readUint32();
|
|
this.refDevCx = reader.readUint32();
|
|
this.refDevCy = reader.readUint32();
|
|
this.refDevCxMm = reader.readUint32();
|
|
this.refDevCyMm = reader.readUint32();
|
|
var hdrSize = headerSize;
|
|
if (descriptionLen > 0) {
|
|
if (descriptionOff < 88) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Invalid header description offset");
|
|
}
|
|
hdrSize = descriptionOff + (descriptionLen * 2);
|
|
if (hdrSize > headerSize) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Invalid header description length");
|
|
}
|
|
var prevPos = reader.pos;
|
|
reader.seek(recordStart + descriptionOff);
|
|
this.description = reader.readFixedSizeUnicodeString(descriptionLen);
|
|
reader.seek(prevPos);
|
|
}
|
|
else {
|
|
this.description = "";
|
|
}
|
|
if (hdrSize >= 100) {
|
|
// We have a EmfMetafileHeaderExtension1 record
|
|
var pixelFormatSize = reader.readUint32();
|
|
var pixelFormatOff = reader.readUint32();
|
|
var haveOpenGl = reader.readUint32();
|
|
if (haveOpenGl !== 0) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("OpenGL records are not yet supported");
|
|
}
|
|
if (pixelFormatOff !== 0) {
|
|
if (pixelFormatOff < 100 || pixelFormatOff < hdrSize) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Invalid pixel format offset");
|
|
}
|
|
hdrSize = pixelFormatOff + pixelFormatSize;
|
|
if (hdrSize > headerSize) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Invalid pixel format size");
|
|
}
|
|
// TODO: read pixel format blob
|
|
}
|
|
if (hdrSize >= 108) {
|
|
// We have a EmfMetafileHeaderExtension2 record
|
|
this.displayDevCxUm = reader.readUint32(); // in micrometers
|
|
this.displayDevCyUm = reader.readUint32(); // in micrometers
|
|
}
|
|
}
|
|
}
|
|
EmfHeader.prototype.toString = function () {
|
|
return "{bounds: " + this.bounds.toString() + ", frame: " + this.frame.toString()
|
|
+ ", description: " + this.description + "}";
|
|
};
|
|
return EmfHeader;
|
|
}());
|
|
var EMFRecords = /** @class */ (function () {
|
|
function EMFRecords(reader, first) {
|
|
this._records = [];
|
|
this._header = new EmfHeader(reader, first);
|
|
var all = false;
|
|
var curpos = first;
|
|
var _loop_1 = function () {
|
|
reader.seek(curpos);
|
|
var type = reader.readUint32();
|
|
var size = reader.readUint32();
|
|
if (size < 8) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Invalid record size");
|
|
}
|
|
switch (type) {
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EOF:
|
|
all = true;
|
|
return "break-main_loop";
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETMAPMODE: {
|
|
var mapMode_1 = reader.readInt32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setMapMode(mapMode_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETWINDOWORGEX: {
|
|
var x_1 = reader.readInt32();
|
|
var y_1 = reader.readInt32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setWindowOrgEx(x_1, y_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETWINDOWEXTEX: {
|
|
var x_2 = reader.readUint32();
|
|
var y_2 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setWindowExtEx(x_2, y_2);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETVIEWPORTORGEX: {
|
|
var x_3 = reader.readInt32();
|
|
var y_3 = reader.readInt32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setViewportOrgEx(x_3, y_3);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETVIEWPORTEXTEX: {
|
|
var x_4 = reader.readUint32();
|
|
var y_4 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setViewportExtEx(x_4, y_4);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SAVEDC: {
|
|
this_1._records.push(function (gdi) {
|
|
gdi.saveDC();
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_RESTOREDC: {
|
|
var saved_1 = reader.readInt32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.restoreDC(saved_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETBKMODE: {
|
|
var bkMode_1 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setBkMode(bkMode_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETBKCOLOR: {
|
|
var bkColor_1 = new _Style__WEBPACK_IMPORTED_MODULE_3__.ColorRef(reader);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setBkColor(bkColor_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CREATEBRUSHINDIRECT: {
|
|
var index_1 = reader.readUint32();
|
|
var brush_1 = new _Style__WEBPACK_IMPORTED_MODULE_3__.Brush(reader);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.createBrush(index_1, brush_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CREATEPEN: {
|
|
var index_2 = reader.readUint32();
|
|
var pen_1 = new _Style__WEBPACK_IMPORTED_MODULE_3__.Pen(reader, null);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.createPen(index_2, pen_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EXTCREATEPEN: {
|
|
var index_3 = reader.readUint32();
|
|
var offBmi = reader.readUint32();
|
|
var cbBmi = reader.readUint32();
|
|
var offBits = reader.readUint32();
|
|
var cbBits = reader.readUint32();
|
|
var pen_2 = new _Style__WEBPACK_IMPORTED_MODULE_3__.Pen(reader, {
|
|
header: {
|
|
off: offBmi,
|
|
size: cbBmi,
|
|
},
|
|
data: {
|
|
off: offBits,
|
|
size: cbBits,
|
|
},
|
|
});
|
|
this_1._records.push(function (gdi) {
|
|
gdi.createPen(index_3, pen_2);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SELECTOBJECT: {
|
|
var idx_1 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.selectObject(idx_1, null);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_DELETEOBJECT: {
|
|
var idx_2 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.deleteObject(idx_2);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_RECTANGLE: {
|
|
var rect_1 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.rectangle(rect_1, 0, 0);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_ROUNDRECT: {
|
|
var rect_2 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
var corner_1 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.SizeL(reader);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.rectangle(rect_2, corner_1.cx, corner_1.cy);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_LINETO: {
|
|
var x_5 = reader.readInt32();
|
|
var y_5 = reader.readInt32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.lineTo(x_5, y_5);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_MOVETOEX: {
|
|
var x_6 = reader.readInt32();
|
|
var y_6 = reader.readInt32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.moveToEx(x_6, y_6);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYGON:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYGON16: {
|
|
var isSmall = (type === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYGON16);
|
|
var bounds_1 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
var cnt = reader.readUint32();
|
|
var points_1 = [];
|
|
while (cnt > 0) {
|
|
points_1.push(isSmall ? new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointS(reader) : new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointL(reader));
|
|
cnt--;
|
|
}
|
|
this_1._records.push(function (gdi) {
|
|
gdi.polygon(points_1, bounds_1, true);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYPOLYGON:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYPOLYGON16: {
|
|
var isSmall = (type === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYPOLYGON16);
|
|
var bounds_2 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
var polyCnt = reader.readUint32();
|
|
reader.skip(4); // count
|
|
var polygonsPtCnts = [];
|
|
for (var i = 0; i < polyCnt; i++) {
|
|
polygonsPtCnts.push(reader.readUint32());
|
|
}
|
|
var polygons_1 = [];
|
|
for (var i = 0; i < polyCnt; i++) {
|
|
var ptCnt = polygonsPtCnts[i];
|
|
var p = [];
|
|
for (var ip = 0; ip < ptCnt; ip++) {
|
|
p.push(isSmall ? new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointS(reader) : new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointL(reader));
|
|
}
|
|
polygons_1.push(p);
|
|
}
|
|
this_1._records.push(function (gdi) {
|
|
gdi.polyPolygon(polygons_1, bounds_2);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETPOLYFILLMODE: {
|
|
var polyfillmode_1 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setPolyFillMode(polyfillmode_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYLINE16:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYLINETO16: {
|
|
var isLineTo_1 = (type === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYLINETO16);
|
|
var bounds_3 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
var cnt = reader.readUint32();
|
|
var points_2 = [];
|
|
while (cnt > 0) {
|
|
points_2.push(new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointS(reader));
|
|
cnt--;
|
|
}
|
|
this_1._records.push(function (gdi) {
|
|
gdi.polyline(isLineTo_1, points_2, bounds_3);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYBEZIER:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYBEZIERTO: {
|
|
var isPolyBezierTo_1 = (type === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYBEZIERTO);
|
|
var bounds_4 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
var cnt = reader.readUint32();
|
|
var points_3 = [];
|
|
while (cnt > 0) {
|
|
points_3.push(new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointL(reader));
|
|
cnt--;
|
|
}
|
|
this_1._records.push(function (gdi) {
|
|
gdi.polybezier(isPolyBezierTo_1, points_3, bounds_4);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYBEZIER16: {
|
|
var bounds_5 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
var start = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointL(reader);
|
|
var cnt = reader.readUint32();
|
|
var points_4 = [start];
|
|
while (cnt > 0) {
|
|
points_4.push(new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointS(reader));
|
|
cnt--;
|
|
}
|
|
this_1._records.push(function (gdi) {
|
|
gdi.polybezier(false, points_4, bounds_5);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYBEZIERTO16: {
|
|
var bounds_6 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
var cnt = reader.readUint32();
|
|
var points_5 = [];
|
|
while (cnt > 0) {
|
|
points_5.push(new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointS(reader));
|
|
cnt--;
|
|
}
|
|
this_1._records.push(function (gdi) {
|
|
gdi.polybezier(true, points_5, bounds_6);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETTEXTALIGN: {
|
|
var textAlign_1 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setTextAlign(textAlign_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETSTRETCHBLTMODE: {
|
|
var stretchMode_1 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setStretchBltMode(stretchMode_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETBRUSHORGEX: {
|
|
var origin_1 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointL(reader);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setBrushOrgEx(origin_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_BEGINPATH: {
|
|
this_1._records.push(function (gdi) {
|
|
gdi.beginPath();
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_ENDPATH: {
|
|
this_1._records.push(function (gdi) {
|
|
gdi.endPath();
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_ABORTPATH: {
|
|
this_1._records.push(function (gdi) {
|
|
gdi.abortPath();
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CLOSEFIGURE: {
|
|
this_1._records.push(function (gdi) {
|
|
gdi.closeFigure();
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_FILLPATH: {
|
|
var bounds_7 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.fillPath(bounds_7);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_STROKEPATH: {
|
|
var bounds_8 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.strokePath(bounds_8);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SELECTCLIPPATH: {
|
|
var rgnMode_1 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.selectClipPath(rgnMode_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EXTSELECTCLIPRGN: {
|
|
reader.skip(4);
|
|
var rgnMode_2 = reader.readUint32();
|
|
var region_1 = rgnMode_2 !== _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RegionMode.RGN_COPY ? new _Region__WEBPACK_IMPORTED_MODULE_2__.Region(reader) : null;
|
|
this_1._records.push(function (gdi) {
|
|
gdi.selectClipRgn(rgnMode_2, region_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_OFFSETCLIPRGN: {
|
|
var offset_1 = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.PointL(reader);
|
|
this_1._records.push(function (gdi) {
|
|
gdi.offsetClipRgn(offset_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETMITERLIMIT: {
|
|
var miterLimit_1 = reader.readUint32();
|
|
this_1._records.push(function (gdi) {
|
|
gdi.setMiterLimit(miterLimit_1);
|
|
});
|
|
break;
|
|
}
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYLINE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYLINETO:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYPOLYLINE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETPIXELV:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETMAPPERFLAGS:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETROP2:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETCOLORADJUSTMENT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETTEXTCOLOR:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETMETARGN:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EXCLUDECLIPRECT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_INTERSECTCLIPRECT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SCALEVIEWPORTEXTEX:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SCALEWINDOWEXTEX:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETWORLDTRANSFORM:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_MODIFYWORLDTRANSFORM:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_ANGLEARC:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_ELLIPSE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_ARC:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CHORD:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_PIE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SELECTPALETTE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CREATEPALETTE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETPALETTEENTRIES:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_RESIZEPALETTE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_REALIZEPALETTE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EXTFLOODFILL:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_ARCTO:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYDRAW:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETARCDIRECTION:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_STROKEANDFILLPATH:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_FLATTENPATH:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_WIDENPATH:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_COMMENT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_FILLRGN:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_FRAMERGN:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_INVERTRGN:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_PAINTRGN:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_BITBLT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_STRETCHBLT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_MASKBLT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_PLGBLT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETDIBITSTODEVICE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_STRETCHDIBITS:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EXTCREATEFONTINDIRECTW:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EXTTEXTOUTA:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EXTTEXTOUTW:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYPOLYLINE16:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYDRAW16:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CREATEMONOBRUSH:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CREATEDIBPATTERNBRUSHPT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYTEXTOUTA:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_POLYTEXTOUTW:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETICMMODE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CREATECOLORSPACE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETCOLORSPACE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_DELETECOLORSPACE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_GLSRECORD:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_GLSBOUNDEDRECORD:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_PIXELFORMAT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_DRAWESCAPE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_EXTESCAPE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SMALLTEXTOUT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_FORCEUFIMAPPING:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_NAMEDESCAPE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_COLORCORRECTPALETTE:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETICMPROFILEA:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETICMPROFILEW:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_ALPHABLEND:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETLAYOUT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_TRANSPARENTBLT:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_GRADIENTFILL:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETLINKEDUFIS:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_SETTEXTJUSTIFICATION:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_COLORMATCHTOTARGETW:
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType.EMR_CREATECOLORSPACEW:
|
|
default: {
|
|
var recordName = "UNKNOWN";
|
|
for (var name_1 in _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType) {
|
|
var recordTypes = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RecordType;
|
|
if (recordTypes[name_1] === type) {
|
|
recordName = name_1;
|
|
break;
|
|
}
|
|
}
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[EMF] " + recordName + " record (0x" + type.toString(16) + ") at offset 0x"
|
|
+ curpos.toString(16) + " with " + size + " bytes");
|
|
break;
|
|
}
|
|
}
|
|
curpos += size;
|
|
};
|
|
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_0__.EMFJSError("Could not read all records");
|
|
}
|
|
}
|
|
EMFRecords.prototype.play = function (gdi) {
|
|
var len = this._records.length;
|
|
for (var i = 0; i < len; i++) {
|
|
this._records[i](gdi);
|
|
}
|
|
};
|
|
return EMFRecords;
|
|
}());
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/emfjs/GDIContext.ts":
|
|
/*!*********************************!*\
|
|
!*** ./src/emfjs/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/emfjs/Helper.ts");
|
|
/* harmony import */ var _Primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Primitives */ "./src/emfjs/Primitives.ts");
|
|
/* harmony import */ var _Region__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Region */ "./src/emfjs/Region.ts");
|
|
/* harmony import */ var _Style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Style */ "./src/emfjs/Style.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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 Path = /** @class */ (function (_super) {
|
|
__extends(Path, _super);
|
|
function Path(svgPath, copy) {
|
|
var _this = _super.call(this, "path") || this;
|
|
if (svgPath != null) {
|
|
_this.svgPath = svgPath;
|
|
}
|
|
else {
|
|
_this.svgPath = copy.svgPath;
|
|
}
|
|
return _this;
|
|
}
|
|
Path.prototype.clone = function () {
|
|
return new Path(null, this);
|
|
};
|
|
Path.prototype.toString = function () {
|
|
return "{[path]}";
|
|
};
|
|
return Path;
|
|
}(_Primitives__WEBPACK_IMPORTED_MODULE_1__.Obj));
|
|
function createStockObjects() {
|
|
// Create global stock objects
|
|
var createSolidBrush = function (r, g, b) {
|
|
return new _Style__WEBPACK_IMPORTED_MODULE_3__.Brush(null, {
|
|
style: _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_SOLID,
|
|
color: new _Style__WEBPACK_IMPORTED_MODULE_3__.ColorRef(null, r, g, b),
|
|
});
|
|
};
|
|
var createSolidPen = function (r, g, b) {
|
|
return new _Style__WEBPACK_IMPORTED_MODULE_3__.Pen(null, _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_SOLID, 1, new _Style__WEBPACK_IMPORTED_MODULE_3__.ColorRef(null, r, g, b), null);
|
|
};
|
|
var stockObjs = {
|
|
WHITE_BRUSH: createSolidBrush(255, 255, 255),
|
|
LTGRAY_BRUSH: createSolidBrush(212, 208, 200),
|
|
GRAY_BRUSH: createSolidBrush(128, 128, 128),
|
|
DKGRAY_BRUSH: createSolidBrush(64, 64, 64),
|
|
BLACK_BRUSH: createSolidBrush(0, 0, 0),
|
|
NULL_BRUSH: new _Style__WEBPACK_IMPORTED_MODULE_3__.Brush(null, {
|
|
style: _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_NULL,
|
|
}),
|
|
WHITE_PEN: createSolidPen(255, 255, 255),
|
|
BLACK_PEN: createSolidPen(0, 0, 0),
|
|
NULL_PEN: new _Style__WEBPACK_IMPORTED_MODULE_3__.Pen(null, _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_NULL, 0, null, null),
|
|
OEM_FIXED_FONT: null,
|
|
ANSI_FIXED_FONT: null,
|
|
ANSI_VAR_FONT: null,
|
|
SYSTEM_FONT: null,
|
|
DEVICE_DEFAULT_FONT: null,
|
|
DEFAULT_PALETTE: null,
|
|
SYSTEM_FIXED_FONT: null,
|
|
DEFAULT_GUI_FONT: null, // TODO
|
|
};
|
|
var objs = {};
|
|
for (var t in stockObjs) {
|
|
var stockObjects = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.StockObject;
|
|
var idx = stockObjects[t] - 0x80000000;
|
|
objs[idx.toString()] = stockObjs[t];
|
|
}
|
|
return objs;
|
|
}
|
|
var _StockObjects = createStockObjects();
|
|
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.miterlimit = copy.miterlimit;
|
|
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.nextbrx = copy.nextbrx;
|
|
this.nextbry = copy.nextbry;
|
|
this.brx = copy.brx;
|
|
this.bry = copy.bry;
|
|
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.PolygonFillMode.ALTERNATE;
|
|
this.miterlimit = 10;
|
|
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.nextbrx = 0;
|
|
this.nextbry = 0;
|
|
this.brx = 0;
|
|
this.bry = 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._svgPath = null;
|
|
this.defObjects = {
|
|
brush: new _Style__WEBPACK_IMPORTED_MODULE_3__.Brush(null, {
|
|
style: _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.BrushStyle.BS_SOLID,
|
|
color: new _Style__WEBPACK_IMPORTED_MODULE_3__.ColorRef(null, 0, 0, 0),
|
|
}),
|
|
pen: new _Style__WEBPACK_IMPORTED_MODULE_3__.Pen(null, _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PenStyle.PS_SOLID, 1, new _Style__WEBPACK_IMPORTED_MODULE_3__.ColorRef(null, 0, 0, 0), null),
|
|
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.setWindowOrgEx = function (x, y) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setWindowOrgEx: x=" + x + " y=" + y);
|
|
this.state.wx = x;
|
|
this.state.wy = y;
|
|
this.state._svggroup = null;
|
|
};
|
|
GDIContext.prototype.setWindowExtEx = function (x, y) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setWindowExtEx: x=" + x + " y=" + y);
|
|
this.state.ww = x;
|
|
this.state.wh = y;
|
|
this.state._svggroup = null;
|
|
};
|
|
GDIContext.prototype.setViewportOrgEx = function (x, y) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setViewportOrgEx: x=" + x + " y=" + y);
|
|
this.state.vx = x;
|
|
this.state.vy = y;
|
|
this.state._svggroup = null;
|
|
};
|
|
GDIContext.prototype.setViewportExtEx = function (x, y) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setViewportExtEx: x=" + x + " y=" + y);
|
|
this.state.vw = x;
|
|
this.state.vh = y;
|
|
this.state._svggroup = null;
|
|
};
|
|
GDIContext.prototype.setBrushOrgEx = function (origin) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setBrushOrgEx: x=" + origin.x + " y=" + origin.y);
|
|
this.state.nextbrx = origin.x;
|
|
this.state.nextbry = origin.y;
|
|
};
|
|
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__.EMFJSError("restoreDC: relative restore not implemented");
|
|
}
|
|
else if (saved > 1) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("restoreDC: absolute restore not implemented");
|
|
}
|
|
}
|
|
else {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("No saved contexts");
|
|
}
|
|
this.state._svggroup = null;
|
|
};
|
|
GDIContext.prototype.setStretchBltMode = function (stretchMode) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setStretchBltMode: stretchMode=" + stretchMode);
|
|
};
|
|
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.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.moveToEx = function (x, y) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] moveToEx: x=" + x + " y=" + y);
|
|
this.state.x = x;
|
|
this.state.y = y;
|
|
if (this._svgPath != null) {
|
|
this._svgPath.move(this.state.x, this.state.y);
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] new path: " + this._svgPath.path());
|
|
}
|
|
};
|
|
GDIContext.prototype.polygon = function (points, bounds, 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)]);
|
|
}
|
|
if (first) {
|
|
this._pushGroup();
|
|
}
|
|
var opts = {
|
|
"fill-rule": this.state.polyfillmode === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.PolygonFillMode.ALTERNATE ? "evenodd" : "nonzero",
|
|
};
|
|
this._applyOpts(opts, true, true, false);
|
|
this._svg.polygon(this.state._svggroup, pts, opts);
|
|
};
|
|
GDIContext.prototype.polyPolygon = function (polygons, bounds) {
|
|
_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], bounds, i === 0);
|
|
}
|
|
};
|
|
GDIContext.prototype.polyline = function (isLineTo, points, bounds) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] polyline: isLineTo=" + isLineTo.toString() + ", points=" + points
|
|
+ ", bounds=" + bounds.toString() + " 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)]);
|
|
}
|
|
if (this._svgPath != null) {
|
|
if (!isLineTo || pts.length === 0) {
|
|
this._svgPath.move(this._todevX(this.state.x), this._todevY(this.state.y));
|
|
}
|
|
else {
|
|
var firstPts = pts[0];
|
|
this._svgPath.move(firstPts[0], firstPts[1]);
|
|
}
|
|
this._svgPath.line(pts);
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] new path: " + this._svgPath.path());
|
|
}
|
|
else {
|
|
this._pushGroup();
|
|
var opts = this._applyOpts(null, true, false, false);
|
|
if (isLineTo && points.length > 0) {
|
|
var firstPt = points[0];
|
|
if (firstPt.x !== this.state.x || firstPt.y !== this.state.y) {
|
|
pts.unshift([this._todevX(this.state.x), this._todevY(this.state.y)]);
|
|
}
|
|
}
|
|
this._svg.polyline(this.state._svggroup, pts, opts);
|
|
}
|
|
if (points.length > 0) {
|
|
var lastPt = points[points.length - 1];
|
|
this.state.x = lastPt.x;
|
|
this.state.y = lastPt.y;
|
|
}
|
|
};
|
|
GDIContext.prototype.polybezier = function (isPolyBezierTo, points, bounds) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] polybezier: isPolyBezierTo=" + isPolyBezierTo.toString() + ", points=" + points
|
|
+ ", bounds=" + bounds.toString() + " with pen " + this.state.selected.pen.toString());
|
|
var pts = [];
|
|
for (var i = 0; i < points.length; i++) {
|
|
var point = points[i];
|
|
pts.push({ x: this._todevX(point.x), y: this._todevY(point.y) });
|
|
}
|
|
if (this._svgPath != null) {
|
|
if (isPolyBezierTo && pts.length > 0) {
|
|
var firstPts = pts[0];
|
|
this._svgPath.move(firstPts.x, firstPts.y);
|
|
}
|
|
else {
|
|
this._svgPath.move(this._todevX(this.state.x), this._todevY(this.state.y));
|
|
}
|
|
if (pts.length < (isPolyBezierTo ? 3 : 4)) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Not enough points to draw bezier");
|
|
}
|
|
for (var i = isPolyBezierTo ? 1 : 0; i + 3 <= pts.length; i += 3) {
|
|
var cp1 = pts[i];
|
|
var cp2 = pts[i + 1];
|
|
var ep = pts[i + 2];
|
|
this._svgPath.curveC(cp1.x, cp1.y, cp2.x, cp2.y, ep.x, ep.y);
|
|
}
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] new path: " + this._svgPath.path());
|
|
}
|
|
else {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("polybezier not implemented (not a path)");
|
|
}
|
|
if (points.length > 0) {
|
|
var lastPt = points[points.length - 1];
|
|
this.state.x = lastPt.x;
|
|
this.state.y = lastPt.y;
|
|
}
|
|
};
|
|
GDIContext.prototype.selectClipPath = function (rgnMode) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] selectClipPath: rgnMode=0x" + rgnMode.toString(16));
|
|
};
|
|
GDIContext.prototype.selectClipRgn = function (rgnMode, region) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] selectClipRgn: rgnMode=0x" + rgnMode.toString(16));
|
|
if (rgnMode === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.RegionMode.RGN_COPY) {
|
|
this.state.selected.region = region;
|
|
this.state.clip = null;
|
|
this.state.ownclip = false;
|
|
}
|
|
else {
|
|
if (region == null) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("No clip region to select");
|
|
}
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Not implemented: rgnMode=0x" + rgnMode.toString(16));
|
|
}
|
|
this.state._svgclipChanged = true;
|
|
};
|
|
GDIContext.prototype.offsetClipRgn = function (offset) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] offsetClipRgn: offset=" + offset.toString());
|
|
this._getClipRgn().offset(offset.x, offset.y);
|
|
};
|
|
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.setMiterLimit = function (miterLimit) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] setMiterLimit: miterLimit=" + miterLimit);
|
|
this.state.miterlimit = miterLimit;
|
|
};
|
|
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.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 (index, brush) {
|
|
var idx = this._storeObject(brush, index);
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createBrush: brush=" + brush.toString() + " with handle " + idx);
|
|
};
|
|
GDIContext.prototype.createPen = function (index, pen) {
|
|
var idx = this._storeObject(pen, index);
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createPen: pen=" + pen.toString() + " width handle " + idx);
|
|
};
|
|
GDIContext.prototype.createPenEx = function (index, pen) {
|
|
var idx = this._storeObject(pen, index);
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] createPenEx: pen=" + pen.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.abortPath = function () {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] abortPath");
|
|
if (this._svgPath != null) {
|
|
this._svgPath = null;
|
|
}
|
|
};
|
|
GDIContext.prototype.beginPath = function () {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] beginPath");
|
|
if (this._svgPath != null) {
|
|
this._svgPath = null;
|
|
}
|
|
this._svgPath = this._svg.createPath();
|
|
};
|
|
GDIContext.prototype.closeFigure = function () {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] closeFigure");
|
|
if (this._svgPath == null) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("No path bracket: cannot close figure");
|
|
}
|
|
this._svgPath.close();
|
|
};
|
|
GDIContext.prototype.fillPath = function (bounds) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] fillPath");
|
|
if (this.state.selected.path == null) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("No path selected");
|
|
}
|
|
var selPath = this.state.selected.path;
|
|
var opts = this._applyOpts(null, true, true, false);
|
|
this._svg.path(this.state._svggroup, selPath.svgPath, opts);
|
|
this._pushGroup();
|
|
this.state.selected.path = null;
|
|
};
|
|
GDIContext.prototype.strokePath = function (bounds) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] strokePath");
|
|
if (this.state.selected.path == null) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("No path selected");
|
|
}
|
|
var selPath = this.state.selected.path;
|
|
var opts = this._applyOpts({ fill: "none" }, true, false, false);
|
|
this._svg.path(this.state._svggroup, selPath.svgPath, opts);
|
|
this._pushGroup();
|
|
this.state.selected.path = null;
|
|
};
|
|
GDIContext.prototype.endPath = function () {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] endPath");
|
|
if (this._svgPath == null) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("No path bracket: cannot end path");
|
|
}
|
|
this._pushGroup();
|
|
this._selectObject(new Path(this._svgPath));
|
|
this._svgPath = null;
|
|
};
|
|
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._getStockObject = function (idx) {
|
|
if (idx >= 0x80000000 && idx <= 0x80000011) {
|
|
return _StockObjects[(idx - 0x80000000).toString()];
|
|
}
|
|
else if (idx === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.StockObject.DC_BRUSH) {
|
|
return this.state.selected.brush;
|
|
}
|
|
else if (idx === _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.GDI.StockObject.DC_PEN) {
|
|
return this.state.selected.pen;
|
|
}
|
|
return null;
|
|
};
|
|
GDIContext.prototype._storeObject = function (obj, idx) {
|
|
if (!idx) {
|
|
idx = 0;
|
|
while (this.objects[idx.toString()] != null && idx <= 65535) {
|
|
idx++;
|
|
}
|
|
if (idx > 65535) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[gdi] Too many objects!");
|
|
return -1;
|
|
}
|
|
}
|
|
this.objects[idx.toString()] = obj;
|
|
return idx;
|
|
};
|
|
GDIContext.prototype._getObject = function (objIdx) {
|
|
var obj = this.objects[objIdx.toString()];
|
|
if (obj == null) {
|
|
obj = this._getStockObject(objIdx);
|
|
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__.EMFJSError("Invalid brush style");
|
|
}
|
|
var id = _Helper__WEBPACK_IMPORTED_MODULE_0__.Helper._makeUniqueId("p");
|
|
var spat = this._svg.pattern(this._getSvgDef(), id, this.state.brx, this.state.bry, 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;
|
|
switch (obj.type) {
|
|
case "region":
|
|
this.state._svgclipChanged = true;
|
|
break;
|
|
case "brush":
|
|
this.state.brx = this.state.nextbrx;
|
|
this.state.bry = this.state.nextbry;
|
|
break;
|
|
}
|
|
};
|
|
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"] = pen.width;
|
|
opts["stroke-miterlimit"] = this.state.miterlimit;
|
|
opts["stroke-linecap"] = "round";
|
|
var dotWidth = 1;
|
|
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"] = Math.abs(font.height);
|
|
opts.fill = "#" + this.state.textcolor.toHex();
|
|
}
|
|
return opts;
|
|
};
|
|
return GDIContext;
|
|
}());
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/emfjs/Helper.ts":
|
|
/*!*****************************!*\
|
|
!*** ./src/emfjs/Helper.ts ***!
|
|
\*****************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ "EMFJSError": () => (/* binding */ EMFJSError),
|
|
/* harmony export */ "Helper": () => (/* binding */ Helper),
|
|
/* harmony export */ "loggingEnabled": () => (/* binding */ loggingEnabled)
|
|
/* harmony export */ });
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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 EMFJSError = /** @class */ (function (_super) {
|
|
__extends(EMFJSError, _super);
|
|
function EMFJSError(message) {
|
|
var _newTarget = this.constructor;
|
|
var _this = _super.call(this, message) || this;
|
|
Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain
|
|
return _this;
|
|
}
|
|
return EMFJSError;
|
|
}(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 "EMFJS_" + 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 = {
|
|
FormatSignature: {
|
|
ENHMETA_SIGNATURE: 0x464D4520,
|
|
EPS_SIGNATURE: 0x46535045,
|
|
},
|
|
BITMAPINFOHEADER_SIZE: 40,
|
|
BITMAPCOREHEADER_SIZE: 12,
|
|
RecordType: {
|
|
EMR_POLYBEZIER: 0x00000002,
|
|
EMR_POLYGON: 0x00000003,
|
|
EMR_POLYLINE: 0x00000004,
|
|
EMR_POLYBEZIERTO: 0x00000005,
|
|
EMR_POLYLINETO: 0x00000006,
|
|
EMR_POLYPOLYLINE: 0x00000007,
|
|
EMR_POLYPOLYGON: 0x00000008,
|
|
EMR_SETWINDOWEXTEX: 0x00000009,
|
|
EMR_SETWINDOWORGEX: 0x0000000A,
|
|
EMR_SETVIEWPORTEXTEX: 0x0000000B,
|
|
EMR_SETVIEWPORTORGEX: 0x0000000C,
|
|
EMR_SETBRUSHORGEX: 0x0000000D,
|
|
EMR_EOF: 0x0000000E,
|
|
EMR_SETPIXELV: 0x0000000F,
|
|
EMR_SETMAPPERFLAGS: 0x00000010,
|
|
EMR_SETMAPMODE: 0x00000011,
|
|
EMR_SETBKMODE: 0x00000012,
|
|
EMR_SETPOLYFILLMODE: 0x00000013,
|
|
EMR_SETROP2: 0x00000014,
|
|
EMR_SETSTRETCHBLTMODE: 0x00000015,
|
|
EMR_SETTEXTALIGN: 0x00000016,
|
|
EMR_SETCOLORADJUSTMENT: 0x00000017,
|
|
EMR_SETTEXTCOLOR: 0x00000018,
|
|
EMR_SETBKCOLOR: 0x00000019,
|
|
EMR_OFFSETCLIPRGN: 0x0000001A,
|
|
EMR_MOVETOEX: 0x0000001B,
|
|
EMR_SETMETARGN: 0x0000001C,
|
|
EMR_EXCLUDECLIPRECT: 0x0000001D,
|
|
EMR_INTERSECTCLIPRECT: 0x0000001E,
|
|
EMR_SCALEVIEWPORTEXTEX: 0x0000001F,
|
|
EMR_SCALEWINDOWEXTEX: 0x00000020,
|
|
EMR_SAVEDC: 0x00000021,
|
|
EMR_RESTOREDC: 0x00000022,
|
|
EMR_SETWORLDTRANSFORM: 0x00000023,
|
|
EMR_MODIFYWORLDTRANSFORM: 0x00000024,
|
|
EMR_SELECTOBJECT: 0x00000025,
|
|
EMR_CREATEPEN: 0x00000026,
|
|
EMR_CREATEBRUSHINDIRECT: 0x00000027,
|
|
EMR_DELETEOBJECT: 0x00000028,
|
|
EMR_ANGLEARC: 0x00000029,
|
|
EMR_ELLIPSE: 0x0000002A,
|
|
EMR_RECTANGLE: 0x0000002B,
|
|
EMR_ROUNDRECT: 0x0000002C,
|
|
EMR_ARC: 0x0000002D,
|
|
EMR_CHORD: 0x0000002E,
|
|
EMR_PIE: 0x0000002F,
|
|
EMR_SELECTPALETTE: 0x00000030,
|
|
EMR_CREATEPALETTE: 0x00000031,
|
|
EMR_SETPALETTEENTRIES: 0x00000032,
|
|
EMR_RESIZEPALETTE: 0x00000033,
|
|
EMR_REALIZEPALETTE: 0x00000034,
|
|
EMR_EXTFLOODFILL: 0x00000035,
|
|
EMR_LINETO: 0x00000036,
|
|
EMR_ARCTO: 0x00000037,
|
|
EMR_POLYDRAW: 0x00000038,
|
|
EMR_SETARCDIRECTION: 0x00000039,
|
|
EMR_SETMITERLIMIT: 0x0000003A,
|
|
EMR_BEGINPATH: 0x0000003B,
|
|
EMR_ENDPATH: 0x0000003C,
|
|
EMR_CLOSEFIGURE: 0x0000003D,
|
|
EMR_FILLPATH: 0x0000003E,
|
|
EMR_STROKEANDFILLPATH: 0x0000003F,
|
|
EMR_STROKEPATH: 0x00000040,
|
|
EMR_FLATTENPATH: 0x00000041,
|
|
EMR_WIDENPATH: 0x00000042,
|
|
EMR_SELECTCLIPPATH: 0x00000043,
|
|
EMR_ABORTPATH: 0x00000044,
|
|
EMR_COMMENT: 0x00000046,
|
|
EMR_FILLRGN: 0x00000047,
|
|
EMR_FRAMERGN: 0x00000048,
|
|
EMR_INVERTRGN: 0x00000049,
|
|
EMR_PAINTRGN: 0x0000004A,
|
|
EMR_EXTSELECTCLIPRGN: 0x0000004B,
|
|
EMR_BITBLT: 0x0000004C,
|
|
EMR_STRETCHBLT: 0x0000004D,
|
|
EMR_MASKBLT: 0x0000004E,
|
|
EMR_PLGBLT: 0x0000004F,
|
|
EMR_SETDIBITSTODEVICE: 0x00000050,
|
|
EMR_STRETCHDIBITS: 0x00000051,
|
|
EMR_EXTCREATEFONTINDIRECTW: 0x00000052,
|
|
EMR_EXTTEXTOUTA: 0x00000053,
|
|
EMR_EXTTEXTOUTW: 0x00000054,
|
|
EMR_POLYBEZIER16: 0x00000055,
|
|
EMR_POLYGON16: 0x00000056,
|
|
EMR_POLYLINE16: 0x00000057,
|
|
EMR_POLYBEZIERTO16: 0x00000058,
|
|
EMR_POLYLINETO16: 0x00000059,
|
|
EMR_POLYPOLYLINE16: 0x0000005A,
|
|
EMR_POLYPOLYGON16: 0x0000005B,
|
|
EMR_POLYDRAW16: 0x0000005C,
|
|
EMR_CREATEMONOBRUSH: 0x0000005D,
|
|
EMR_CREATEDIBPATTERNBRUSHPT: 0x0000005E,
|
|
EMR_EXTCREATEPEN: 0x0000005F,
|
|
EMR_POLYTEXTOUTA: 0x00000060,
|
|
EMR_POLYTEXTOUTW: 0x00000061,
|
|
EMR_SETICMMODE: 0x00000062,
|
|
EMR_CREATECOLORSPACE: 0x00000063,
|
|
EMR_SETCOLORSPACE: 0x00000064,
|
|
EMR_DELETECOLORSPACE: 0x00000065,
|
|
EMR_GLSRECORD: 0x00000066,
|
|
EMR_GLSBOUNDEDRECORD: 0x00000067,
|
|
EMR_PIXELFORMAT: 0x00000068,
|
|
EMR_DRAWESCAPE: 0x00000069,
|
|
EMR_EXTESCAPE: 0x0000006A,
|
|
EMR_SMALLTEXTOUT: 0x0000006C,
|
|
EMR_FORCEUFIMAPPING: 0x0000006D,
|
|
EMR_NAMEDESCAPE: 0x0000006E,
|
|
EMR_COLORCORRECTPALETTE: 0x0000006F,
|
|
EMR_SETICMPROFILEA: 0x00000070,
|
|
EMR_SETICMPROFILEW: 0x00000071,
|
|
EMR_ALPHABLEND: 0x00000072,
|
|
EMR_SETLAYOUT: 0x00000073,
|
|
EMR_TRANSPARENTBLT: 0x00000074,
|
|
EMR_GRADIENTFILL: 0x00000076,
|
|
EMR_SETLINKEDUFIS: 0x00000077,
|
|
EMR_SETTEXTJUSTIFICATION: 0x00000078,
|
|
EMR_COLORMATCHTOTARGETW: 0x00000079,
|
|
EMR_CREATECOLORSPACEW: 0x0000007A,
|
|
},
|
|
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,
|
|
},
|
|
MixMode: {
|
|
TRANSPARENT: 1,
|
|
OPAQUE: 2,
|
|
},
|
|
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_COSMETIC: 0x00000000,
|
|
PS_ENDCAP_ROUND: 0x00000000,
|
|
PS_JOIN_ROUND: 0x00000000,
|
|
PS_SOLID: 0x00000000,
|
|
PS_DASH: 0x00000001,
|
|
PS_DOT: 0x00000002,
|
|
PS_DASHDOT: 0x00000003,
|
|
PS_DASHDOTDOT: 0x00000004,
|
|
PS_NULL: 0x00000005,
|
|
PS_INSIDEFRAME: 0x00000006,
|
|
PS_USERSTYLE: 0x00000007,
|
|
PS_ALTERNATE: 0x00000008,
|
|
PS_ENDCAP_SQUARE: 0x00000100,
|
|
PS_ENDCAP_FLAT: 0x00000200,
|
|
PS_JOIN_BEVEL: 0x00001000,
|
|
PS_JOIN_MITER: 0x00002000,
|
|
PS_GEOMETRIC: 0x00010000,
|
|
},
|
|
PolygonFillMode: {
|
|
ALTERNATE: 1,
|
|
WINDING: 2,
|
|
},
|
|
BitmapCompression: {
|
|
BI_RGB: 0,
|
|
BI_RLE8: 1,
|
|
BI_RLE4: 2,
|
|
BI_BITFIELDS: 3,
|
|
BI_JPEG: 4,
|
|
BI_PNG: 5,
|
|
},
|
|
RegionMode: {
|
|
RGN_AND: 1,
|
|
RGN_OR: 2,
|
|
RGN_XOR: 3,
|
|
RGN_DIFF: 4,
|
|
RGN_COPY: 5,
|
|
},
|
|
StockObject: {
|
|
WHITE_BRUSH: 0x80000000,
|
|
LTGRAY_BRUSH: 0x80000001,
|
|
GRAY_BRUSH: 0x80000002,
|
|
DKGRAY_BRUSH: 0x80000003,
|
|
BLACK_BRUSH: 0x80000004,
|
|
NULL_BRUSH: 0x80000005,
|
|
WHITE_PEN: 0x80000006,
|
|
BLACK_PEN: 0x80000007,
|
|
NULL_PEN: 0x80000008,
|
|
OEM_FIXED_FONT: 0x8000000A,
|
|
ANSI_FIXED_FONT: 0x8000000B,
|
|
ANSI_VAR_FONT: 0x8000000C,
|
|
SYSTEM_FONT: 0x8000000D,
|
|
DEVICE_DEFAULT_FONT: 0x8000000E,
|
|
DEFAULT_PALETTE: 0x8000000F,
|
|
SYSTEM_FIXED_FONT: 0x80000010,
|
|
DEFAULT_GUI_FONT: 0x80000011,
|
|
DC_BRUSH: 0x80000012,
|
|
DC_PEN: 0x80000013,
|
|
},
|
|
};
|
|
Helper._uniqueId = 0;
|
|
return Helper;
|
|
}());
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/emfjs/Primitives.ts":
|
|
/*!*********************************!*\
|
|
!*** ./src/emfjs/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 */ "PointL": () => (/* binding */ PointL),
|
|
/* harmony export */ "PointS": () => (/* binding */ PointS),
|
|
/* harmony export */ "RectL": () => (/* binding */ RectL),
|
|
/* harmony export */ "SizeL": () => (/* binding */ SizeL)
|
|
/* harmony export */ });
|
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Helper */ "./src/emfjs/Helper.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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 PointL = /** @class */ (function () {
|
|
function PointL(reader, x, y) {
|
|
if (reader != null) {
|
|
this.x = reader.readInt32();
|
|
this.y = reader.readInt32();
|
|
}
|
|
else {
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
}
|
|
PointL.prototype.clone = function () {
|
|
return new PointL(null, this.x, this.y);
|
|
};
|
|
PointL.prototype.toString = function () {
|
|
return "{x: " + this.x + ", y: " + this.y + "}";
|
|
};
|
|
return PointL;
|
|
}());
|
|
|
|
var RectL = /** @class */ (function () {
|
|
function RectL(reader, left, top, right, bottom) {
|
|
if (reader != null) {
|
|
this.left = reader.readInt32();
|
|
this.top = reader.readInt32();
|
|
this.right = reader.readInt32();
|
|
this.bottom = reader.readInt32();
|
|
}
|
|
else {
|
|
this.bottom = bottom;
|
|
this.right = right;
|
|
this.top = top;
|
|
this.left = left;
|
|
}
|
|
}
|
|
RectL.prototype.clone = function () {
|
|
return new RectL(null, this.left, this.top, this.right, this.bottom);
|
|
};
|
|
RectL.prototype.toString = function () {
|
|
return "{left: " + this.left + ", top: " + this.top + ", right: " + this.right
|
|
+ ", bottom: " + this.bottom + "}";
|
|
};
|
|
RectL.prototype.empty = function () {
|
|
return this.left >= this.right || this.top >= this.bottom;
|
|
};
|
|
RectL.prototype.intersect = function (rectL) {
|
|
if (this.empty() || rectL.empty()) {
|
|
return null;
|
|
}
|
|
if (this.left >= rectL.right || this.top >= rectL.bottom ||
|
|
this.right <= rectL.left || this.bottom <= rectL.top) {
|
|
return null;
|
|
}
|
|
return new RectL(null, Math.max(this.left, rectL.left), Math.max(this.top, rectL.top), Math.min(this.right, rectL.right), Math.min(this.bottom, rectL.bottom));
|
|
};
|
|
return RectL;
|
|
}());
|
|
|
|
var SizeL = /** @class */ (function () {
|
|
function SizeL(reader, cx, cy) {
|
|
if (reader != null) {
|
|
this.cx = reader.readUint32();
|
|
this.cy = reader.readUint32();
|
|
}
|
|
else {
|
|
this.cx = cx;
|
|
this.cy = cy;
|
|
}
|
|
}
|
|
SizeL.prototype.clone = function () {
|
|
return new SizeL(null, this.cx, this.cy);
|
|
};
|
|
SizeL.prototype.toString = function () {
|
|
return "{cx: " + this.cx + ", cy: " + this.cy + "}";
|
|
};
|
|
return SizeL;
|
|
}());
|
|
|
|
var Obj = /** @class */ (function () {
|
|
function Obj(type) {
|
|
this.type = type;
|
|
}
|
|
Obj.prototype.clone = function () {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("clone not implemented");
|
|
};
|
|
Obj.prototype.toString = function () {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("toString not implemented");
|
|
};
|
|
return Obj;
|
|
}());
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/emfjs/Region.ts":
|
|
/*!*****************************!*\
|
|
!*** ./src/emfjs/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/emfjs/Helper.ts");
|
|
/* harmony import */ var _Primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Primitives */ "./src/emfjs/Primitives.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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) {
|
|
var hdrSize = reader.readUint32();
|
|
if (hdrSize !== 32) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Invalid region header");
|
|
}
|
|
reader.skip(4);
|
|
var rectCnt = reader.readUint32();
|
|
var rgnSize = reader.readUint32();
|
|
if (rectCnt * 16 !== rgnSize) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_0__.EMFJSError("Invalid region data");
|
|
}
|
|
_this.bounds = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
_this.scans = [];
|
|
var scanLine = void 0;
|
|
for (var i = 0; i < rectCnt; i++) {
|
|
var r = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(reader);
|
|
if (!!scanLine || scanLine.top !== r.top || scanLine.bottom !== r.bottom) {
|
|
scanLine = new Scan(r);
|
|
_this.scans.push(scanLine);
|
|
}
|
|
else {
|
|
scanLine.append(r);
|
|
}
|
|
}
|
|
_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("[emf] 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(new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(null, this.bounds.left, this.bounds.top, this.bounds.right, this.bounds.bottom)));
|
|
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("[emf] 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("[emf] 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("[emf] 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_1;
|
|
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_1 = 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_1 != null && right != null && bottom != null) {
|
|
this.bounds = new _Primitives__WEBPACK_IMPORTED_MODULE_1__.RectL(null, left, top_1, 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("[emf] Region subtraction -> " + this.toString());
|
|
};
|
|
Region.prototype.intersect = function (rect) {
|
|
_Helper__WEBPACK_IMPORTED_MODULE_0__.Helper.log("[emf] 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("[emf] 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("[emf] 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("[emf] 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("[emf] 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__.RectL(null, left, top, right, bottom);
|
|
rgn._updateComplexity();
|
|
return rgn;
|
|
}
|
|
var Scan = /** @class */ (function () {
|
|
function Scan(r, copy) {
|
|
if (r != null) {
|
|
this.top = r.top;
|
|
this.bottom = r.bottom;
|
|
this.scanlines = [{ left: r.left, right: r.right }];
|
|
}
|
|
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 });
|
|
}
|
|
}
|
|
}
|
|
Scan.prototype.clone = function () {
|
|
return new Scan(null, this);
|
|
};
|
|
Scan.prototype.append = function (r) {
|
|
this.scanlines.push({ left: r.left, right: r.right });
|
|
};
|
|
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;
|
|
};
|
|
return Scan;
|
|
}());
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/emfjs/Renderer.ts":
|
|
/*!*******************************!*\
|
|
!*** ./src/emfjs/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/emfjs/Blob.ts");
|
|
/* harmony import */ var _EMFRecords__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./EMFRecords */ "./src/emfjs/EMFRecords.ts");
|
|
/* harmony import */ var _GDIContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./GDIContext */ "./src/emfjs/GDIContext.ts");
|
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Helper */ "./src/emfjs/Helper.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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_4__.Helper.log("EMFJS.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.wExt, info.hExt, 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 = reader.readUint32();
|
|
if (type !== 0x00000001) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_4__.EMFJSError("Not an EMF file");
|
|
}
|
|
var size = reader.readUint32();
|
|
if (size % 4 !== 0) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_4__.EMFJSError("Not an EMF file");
|
|
}
|
|
this._img = new EMF(reader, size);
|
|
if (this._img == null) {
|
|
throw new _Helper__WEBPACK_IMPORTED_MODULE_4__.EMFJSError("Format not recognized");
|
|
}
|
|
};
|
|
Renderer.prototype._render = function (svg, mapMode, w, h, xExt, yExt) {
|
|
var gdi = new _GDIContext__WEBPACK_IMPORTED_MODULE_3__.GDIContext(svg);
|
|
gdi.setWindowExtEx(w, h);
|
|
gdi.setViewportExtEx(xExt, yExt);
|
|
gdi.setMapMode(mapMode);
|
|
_Helper__WEBPACK_IMPORTED_MODULE_4__.Helper.log("[EMF] BEGIN RENDERING --->");
|
|
this._img.render(gdi);
|
|
_Helper__WEBPACK_IMPORTED_MODULE_4__.Helper.log("[EMF] <--- DONE RENDERING");
|
|
};
|
|
return Renderer;
|
|
}());
|
|
|
|
var EMF = /** @class */ (function () {
|
|
function EMF(reader, hdrsize) {
|
|
this._hdrsize = hdrsize;
|
|
this._records = new _EMFRecords__WEBPACK_IMPORTED_MODULE_2__.EMFRecords(reader, this._hdrsize);
|
|
}
|
|
EMF.prototype.render = function (gdi) {
|
|
this._records.play(gdi);
|
|
};
|
|
return EMF;
|
|
}());
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/emfjs/Style.ts":
|
|
/*!****************************!*\
|
|
!*** ./src/emfjs/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 */ "Pen": () => (/* binding */ Pen)
|
|
/* harmony export */ });
|
|
/* harmony import */ var _Bitmap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Bitmap */ "./src/emfjs/Bitmap.ts");
|
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Helper */ "./src/emfjs/Helper.ts");
|
|
/* harmony import */ var _Primitives__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Primitives */ "./src/emfjs/Primitives.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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.readInt32();
|
|
_this.width = reader.readInt32();
|
|
_this.escapement = reader.readInt32();
|
|
_this.orientation = reader.readInt32();
|
|
_this.weight = reader.readInt32();
|
|
_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.readFixedSizeUnicodeString(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) {
|
|
var _this = _super.call(this, "brush") || this;
|
|
if (reader != null) {
|
|
var start = reader.pos;
|
|
_this.style = reader.readUint32();
|
|
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:
|
|
_this.pattern = new _Bitmap__WEBPACK_IMPORTED_MODULE_0__.DIBitmap(reader);
|
|
break;
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_DIBPATTERNPT:
|
|
_this.dibpatternpt = new _Bitmap__WEBPACK_IMPORTED_MODULE_0__.DIBitmap(reader);
|
|
break;
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_HATCHED:
|
|
_this.color = new ColorRef(reader);
|
|
_this.hatchstyle = reader.readUint32();
|
|
break;
|
|
}
|
|
reader.seek(start + 12);
|
|
}
|
|
else {
|
|
_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;
|
|
break;
|
|
case _Helper__WEBPACK_IMPORTED_MODULE_1__.Helper.GDI.BrushStyle.BS_DIBPATTERNPT:
|
|
_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_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, brush) {
|
|
var _this = _super.call(this, "pen") || this;
|
|
if (reader != null) {
|
|
if (style != null) {
|
|
// LogPenEx
|
|
_this.style = reader.readUint32() & 0xFF;
|
|
_this.width = reader.readUint32();
|
|
_this.brush = new Brush(reader);
|
|
_this.color = _this.brush.color != null ? _this.brush.color.clone() : new ColorRef(null, 0, 0, 0);
|
|
// TODO: NumStyleEntries, StyleEntry
|
|
}
|
|
else {
|
|
// LogPen
|
|
_this.style = reader.readUint32() & 0xFF;
|
|
_this.width = (new _Primitives__WEBPACK_IMPORTED_MODULE_2__.PointL(reader)).x;
|
|
_this.color = new ColorRef(reader);
|
|
}
|
|
}
|
|
else {
|
|
_this.style = style;
|
|
_this.width = width;
|
|
if (color != null) {
|
|
_this.color = color;
|
|
}
|
|
if (brush != null) {
|
|
_this.brush = brush;
|
|
}
|
|
}
|
|
return _this;
|
|
}
|
|
Pen.prototype.clone = function () {
|
|
return new Pen(null, this.style, this.width, this.color != null ? this.color.clone() : null, this.brush != null ? this.brush.clone() : null);
|
|
};
|
|
Pen.prototype.toString = function () {
|
|
return "{style: " + this.style + ", width: " + this.width
|
|
+ ", color: " + (this.color != null ? this.color.toString() : "none") + "}";
|
|
};
|
|
return Pen;
|
|
}(_Primitives__WEBPACK_IMPORTED_MODULE_2__.Obj));
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
/************************************************************************/
|
|
/******/ // 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/emfjs/index.ts ***!
|
|
\****************************/
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ "Error": () => (/* reexport safe */ _Helper__WEBPACK_IMPORTED_MODULE_1__.EMFJSError),
|
|
/* 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/emfjs/Renderer.ts");
|
|
/* harmony import */ var _Helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Helper */ "./src/emfjs/Helper.ts");
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2016 Tom Zoehner
|
|
Copyright (c) 2018 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=EMFJS.bundle.js.map
|