Fix character width calculations when weight & style are not defaults,
use a common shared function to determine the correct weight & style,
add the file to build.js
diff --git a/player/js/utils/FontManager.js b/player/js/utils/FontManager.js
index bb4457b..5bf2da1 100644
--- a/player/js/utils/FontManager.js
+++ b/player/js/utils/FontManager.js
@@ -94,9 +94,11 @@
var tHelper = createNS('text');
tHelper.style.fontSize = '100px';
//tHelper.style.fontFamily = fontData.fFamily;
+
+ var fontProps = getFontProperties(fontData);
tHelper.setAttribute('font-family', fontData.fFamily);
- tHelper.setAttribute('font-style', fontData.fStyle);
- tHelper.setAttribute('font-weight', fontData.fWeight);
+ tHelper.setAttribute('font-style', fontProps.style);
+ tHelper.setAttribute('font-weight', fontProps.weight);
tHelper.textContent = '1';
if(fontData.fClass){
tHelper.style.fontFamily = 'inherit';
diff --git a/player/js/utils/getFontProperties.js b/player/js/utils/getFontProperties.js
new file mode 100644
index 0000000..295904d
--- /dev/null
+++ b/player/js/utils/getFontProperties.js
@@ -0,0 +1,37 @@
+function getFontProperties(fontData) {
+ var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];
+
+ var fWeight = 'normal', fStyle = 'normal';
+ var len = styles.length;
+ var styleName;
+ for (var i = 0; i < len; i += 1) {
+ styleName = styles[i].toLowerCase();
+ switch (styleName) {
+ case 'italic':
+ fStyle = 'italic';
+ break;
+ case 'bold':
+ fWeight = '700';
+ break;
+ case 'black':
+ fWeight = '900';
+ break;
+ case 'medium':
+ fWeight = '500';
+ break;
+ case 'regular':
+ case 'normal':
+ fWeight = '400';
+ break;
+ case 'light':
+ case 'thin':
+ fWeight = '200';
+ break;
+ }
+ }
+
+ return {
+ style: fStyle,
+ weight: fontData.fWeight || fWeight
+ };
+}
\ No newline at end of file
diff --git a/player/js/utils/text/TextProperty.js b/player/js/utils/text/TextProperty.js
index 01605f4..f6ed5ad 100644
--- a/player/js/utils/text/TextProperty.js
+++ b/player/js/utils/text/TextProperty.js
@@ -177,38 +177,10 @@
var j, jLen;
var fontData = fontManager.getFontByName(documentData.f);
var charData, cLength = 0;
- var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];
- var fWeight = 'normal', fStyle = 'normal';
- len = styles.length;
- var styleName;
- for(i=0;i<len;i+=1){
- styleName = styles[i].toLowerCase();
- switch(styleName) {
- case 'italic':
- fStyle = 'italic';
- break;
- case 'bold':
- fWeight = '700';
- break;
- case 'black':
- fWeight = '900';
- break;
- case 'medium':
- fWeight = '500';
- break;
- case 'regular':
- case 'normal':
- fWeight = '400';
- break;
- case 'light':
- case 'thin':
- fWeight = '200';
- break;
- }
- }
- documentData.fWeight = fontData.fWeight || fWeight;
- documentData.fStyle = fStyle;
+ var fontProps = getFontProperties(fontData);
+ documentData.fWeight = fontProps.weight;
+ documentData.fStyle = fontProps.style;
documentData.finalSize = documentData.s;
documentData.finalText = this.buildFinalText(documentData.t);
len = documentData.finalText.length;
diff --git a/tasks/build.js b/tasks/build.js
index f7c8ce8..aa0f58a 100644
--- a/tasks/build.js
+++ b/tasks/build.js
@@ -73,6 +73,10 @@
builds: ['canvas_worker']
},
{
+ src: 'js/utils/getFontProperties.js',
+ builds: defaultBuilds
+ },
+ {
src: 'js/utils/FontManager.js',
builds: defaultBuilds
},