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
 |