|
@@ -23,24 +23,32 @@ Object.assign( Font.prototype, {
|
|
|
|
|
|
var chars = String( text ).split( '' );
|
|
|
var scale = size / data.resolution;
|
|
|
- var offset = 0;
|
|
|
+ var line_height = (data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness) * scale;
|
|
|
+
|
|
|
+ var offsetX = 0, offsetY = 0;
|
|
|
|
|
|
var paths = [];
|
|
|
|
|
|
for ( var i = 0; i < chars.length; i ++ ) {
|
|
|
|
|
|
- var ret = createPath( chars[ i ], scale, offset );
|
|
|
- offset += ret.offset;
|
|
|
-
|
|
|
- paths.push( ret.path );
|
|
|
+ var char = chars[ i ];
|
|
|
|
|
|
+ if(char === "\n") {
|
|
|
+ offsetX = 0;
|
|
|
+ offsetY -= line_height;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ var ret = createPath( char, scale, offsetX, offsetY );
|
|
|
+ offsetX += ret.offsetX;
|
|
|
+ paths.push( ret.path );
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return paths;
|
|
|
|
|
|
}
|
|
|
|
|
|
- function createPath( c, scale, offset ) {
|
|
|
+ function createPath( c, scale, offsetX, offsetY ) {
|
|
|
|
|
|
var glyph = data.glyphs[ c ] || data.glyphs[ '?' ];
|
|
|
|
|
@@ -63,8 +71,8 @@ Object.assign( Font.prototype, {
|
|
|
|
|
|
case 'm': // moveTo
|
|
|
|
|
|
- x = outline[ i ++ ] * scale + offset;
|
|
|
- y = outline[ i ++ ] * scale;
|
|
|
+ x = outline[ i ++ ] * scale + offsetX;
|
|
|
+ y = outline[ i ++ ] * scale + offsetY;
|
|
|
|
|
|
path.moveTo( x, y );
|
|
|
|
|
@@ -72,8 +80,8 @@ Object.assign( Font.prototype, {
|
|
|
|
|
|
case 'l': // lineTo
|
|
|
|
|
|
- x = outline[ i ++ ] * scale + offset;
|
|
|
- y = outline[ i ++ ] * scale;
|
|
|
+ x = outline[ i ++ ] * scale + offsetX;
|
|
|
+ y = outline[ i ++ ] * scale + offsetY;
|
|
|
|
|
|
path.lineTo( x, y );
|
|
|
|
|
@@ -81,10 +89,10 @@ Object.assign( Font.prototype, {
|
|
|
|
|
|
case 'q': // quadraticCurveTo
|
|
|
|
|
|
- cpx = outline[ i ++ ] * scale + offset;
|
|
|
- cpy = outline[ i ++ ] * scale;
|
|
|
- cpx1 = outline[ i ++ ] * scale + offset;
|
|
|
- cpy1 = outline[ i ++ ] * scale;
|
|
|
+ cpx = outline[ i ++ ] * scale + offsetX;
|
|
|
+ cpy = outline[ i ++ ] * scale + offsetY;
|
|
|
+ cpx1 = outline[ i ++ ] * scale + offsetX;
|
|
|
+ cpy1 = outline[ i ++ ] * scale + offsetY;
|
|
|
|
|
|
path.quadraticCurveTo( cpx1, cpy1, cpx, cpy );
|
|
|
|
|
@@ -109,12 +117,12 @@ Object.assign( Font.prototype, {
|
|
|
|
|
|
case 'b': // bezierCurveTo
|
|
|
|
|
|
- cpx = outline[ i ++ ] * scale + offset;
|
|
|
- cpy = outline[ i ++ ] * scale;
|
|
|
- cpx1 = outline[ i ++ ] * scale + offset;
|
|
|
- cpy1 = outline[ i ++ ] * scale;
|
|
|
- cpx2 = outline[ i ++ ] * scale + offset;
|
|
|
- cpy2 = outline[ i ++ ] * scale;
|
|
|
+ cpx = outline[ i ++ ] * scale + offsetX;
|
|
|
+ cpy = outline[ i ++ ] * scale + offsetY;
|
|
|
+ cpx1 = outline[ i ++ ] * scale + offsetX;
|
|
|
+ cpy1 = outline[ i ++ ] * scale + offsetY;
|
|
|
+ cpx2 = outline[ i ++ ] * scale + offsetX;
|
|
|
+ cpy2 = outline[ i ++ ] * scale + offsetY;
|
|
|
|
|
|
path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );
|
|
|
|
|
@@ -143,7 +151,7 @@ Object.assign( Font.prototype, {
|
|
|
|
|
|
}
|
|
|
|
|
|
- return { offset: glyph.ha * scale, path: path };
|
|
|
+ return { offsetX: glyph.ha * scale, path: path };
|
|
|
|
|
|
}
|
|
|
|