export var DEFAULT_FONT_SIZE = 12;
|
export var DEFAULT_FONT_FAMILY = 'sans-serif';
|
export var DEFAULT_FONT = DEFAULT_FONT_SIZE + "px " + DEFAULT_FONT_FAMILY;
|
var OFFSET = 20;
|
var SCALE = 100;
|
var defaultWidthMapStr = "007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";
|
function getTextWidthMap(mapStr) {
|
var map = {};
|
if (typeof JSON === 'undefined') {
|
return map;
|
}
|
for (var i = 0; i < mapStr.length; i++) {
|
var char = String.fromCharCode(i + 32);
|
var size = (mapStr.charCodeAt(i) - OFFSET) / SCALE;
|
map[char] = size;
|
}
|
return map;
|
}
|
export var DEFAULT_TEXT_WIDTH_MAP = getTextWidthMap(defaultWidthMapStr);
|
export var platformApi = {
|
createCanvas: function () {
|
return typeof document !== 'undefined'
|
&& document.createElement('canvas');
|
},
|
measureText: (function () {
|
var _ctx;
|
var _cachedFont;
|
return function (text, font) {
|
if (!_ctx) {
|
var canvas = platformApi.createCanvas();
|
_ctx = canvas && canvas.getContext('2d');
|
}
|
if (_ctx) {
|
if (_cachedFont !== font) {
|
_cachedFont = _ctx.font = font || DEFAULT_FONT;
|
}
|
return _ctx.measureText(text);
|
}
|
else {
|
text = text || '';
|
font = font || DEFAULT_FONT;
|
var res = /^([0-9]*?)px$/.exec(font);
|
var fontSize = +(res && res[1]) || DEFAULT_FONT_SIZE;
|
var width = 0;
|
if (font.indexOf('mono') >= 0) {
|
width = fontSize * text.length;
|
}
|
else {
|
for (var i = 0; i < text.length; i++) {
|
var preCalcWidth = DEFAULT_TEXT_WIDTH_MAP[text[i]];
|
width += preCalcWidth == null ? fontSize : (preCalcWidth * fontSize);
|
}
|
}
|
return { width: width };
|
}
|
};
|
})(),
|
loadImage: function (src, onload, onerror) {
|
var image = new Image();
|
image.onload = onload;
|
image.onerror = onerror;
|
image.src = src;
|
return image;
|
}
|
};
|
export function setPlatformAPI(newPlatformApis) {
|
for (var key in platformApi) {
|
if (newPlatformApis[key]) {
|
platformApi[key] = newPlatformApis[key];
|
}
|
}
|
}
|