55 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.FontMetrics = void 0;
 | |
| var util_1 = require("../core/util");
 | |
| var SAMPLE_TEXT = 'Hidden Text';
 | |
| var FontMetrics = /** @class */ (function () {
 | |
|     function FontMetrics(document) {
 | |
|         this._data = {};
 | |
|         this._document = document;
 | |
|     }
 | |
|     FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) {
 | |
|         var container = this._document.createElement('div');
 | |
|         var img = this._document.createElement('img');
 | |
|         var span = this._document.createElement('span');
 | |
|         var body = this._document.body;
 | |
|         container.style.visibility = 'hidden';
 | |
|         container.style.fontFamily = fontFamily;
 | |
|         container.style.fontSize = fontSize;
 | |
|         container.style.margin = '0';
 | |
|         container.style.padding = '0';
 | |
|         container.style.whiteSpace = 'nowrap';
 | |
|         body.appendChild(container);
 | |
|         img.src = util_1.SMALL_IMAGE;
 | |
|         img.width = 1;
 | |
|         img.height = 1;
 | |
|         img.style.margin = '0';
 | |
|         img.style.padding = '0';
 | |
|         img.style.verticalAlign = 'baseline';
 | |
|         span.style.fontFamily = fontFamily;
 | |
|         span.style.fontSize = fontSize;
 | |
|         span.style.margin = '0';
 | |
|         span.style.padding = '0';
 | |
|         span.appendChild(this._document.createTextNode(SAMPLE_TEXT));
 | |
|         container.appendChild(span);
 | |
|         container.appendChild(img);
 | |
|         var baseline = img.offsetTop - span.offsetTop + 2;
 | |
|         container.removeChild(span);
 | |
|         container.appendChild(this._document.createTextNode(SAMPLE_TEXT));
 | |
|         container.style.lineHeight = 'normal';
 | |
|         img.style.verticalAlign = 'super';
 | |
|         var middle = img.offsetTop - container.offsetTop + 2;
 | |
|         body.removeChild(container);
 | |
|         return { baseline: baseline, middle: middle };
 | |
|     };
 | |
|     FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {
 | |
|         var key = fontFamily + " " + fontSize;
 | |
|         if (typeof this._data[key] === 'undefined') {
 | |
|             this._data[key] = this.parseMetrics(fontFamily, fontSize);
 | |
|         }
 | |
|         return this._data[key];
 | |
|     };
 | |
|     return FontMetrics;
 | |
| }());
 | |
| exports.FontMetrics = FontMetrics;
 | |
| //# sourceMappingURL=font-metrics.js.map
 |