diff --git a/src/fonteditor/controller/default.js b/src/fonteditor/controller/default.js index 0e720c1..25b93e0 100644 --- a/src/fonteditor/controller/default.js +++ b/src/fonteditor/controller/default.js @@ -199,7 +199,7 @@ define( !new SettingAdjustPos({ onChange: function (setting) { setTimeout(function () { - program.ttfManager.adjustGlyfPos(setting, selected); + program.ttfManager.adjustGlyfPos(selected, setting); }, 20); } }).show(opt); @@ -211,7 +211,7 @@ define( !new SettingAdjustGlyf({ onChange: function (setting) { setTimeout(function () { - program.ttfManager.adjustGlyf(setting, program.viewer.getSelected()); + program.ttfManager.adjustGlyf(program.viewer.getSelected(), setting); }, 20); } }).show(); diff --git a/src/fonteditor/widget/ttfmanager.js b/src/fonteditor/widget/ttfmanager.js index 1bac440..e4724ae 100644 --- a/src/fonteditor/widget/ttfmanager.js +++ b/src/fonteditor/widget/ttfmanager.js @@ -275,13 +275,13 @@ define( /** * 调整glyf位置 * - * @param {Object} setting 选项 * @param {Array} indexList 索引列表 + * @param {Object} setting 选项 * @return {boolean} */ - Manager.prototype.adjustGlyfPos = function (setting, indexList) { + Manager.prototype.adjustGlyfPos = function (indexList, setting) { - var list = this.ttf.adjustGlyfPos(setting, indexList); + var list = this.ttf.adjustGlyfPos(indexList, setting); if (list.length) { list.forEach(function (g) { g.modify = 'edit'; @@ -296,13 +296,13 @@ define( /** * 调整glyf * - * @param {Object} setting 选项 * @param {Array} indexList 索引列表 + * @param {Object} setting 选项 * @return {boolean} */ - Manager.prototype.adjustGlyf = function (setting, indexList) { + Manager.prototype.adjustGlyf = function (indexList, setting) { - var list = this.ttf.adjustGlyf(setting, indexList); + var list = this.ttf.adjustGlyf(indexList, setting); if (list.length) { list.forEach(function (g) { g.modify = 'edit'; @@ -343,7 +343,7 @@ define( || (undefined !== setting.rightSideBearing && setting.rightSideBearing + (glyf.xMax || 0) !== glyf.advanceWidth) ) { - var list = this.ttf.adjustGlyfPos(setting, [index]); + var list = this.ttf.adjustGlyfPos([index], setting); if (list.length) { list.forEach(function (g) { g.modify = 'edit'; diff --git a/src/ttf/ttf.js b/src/ttf/ttf.js index 2ffa41e..6f999dc 100644 --- a/src/ttf/ttf.js +++ b/src/ttf/ttf.js @@ -65,6 +65,58 @@ define( return glyfList; } + /** + * 调整字形位置 + * + * @param {Array} glyfList 字形列表 + * @param {number=} leftSideBearing 左边距 + * @param {number=} rightSideBearing 右边距 + * @param {number=} verticalAlign 垂直对齐 + * + * @return {Array} 改变的列表 + */ + function adjustPos(glyfList, leftSideBearing, rightSideBearing, verticalAlign) { + + var changed = false; + + // 左边轴 + if (null != leftSideBearing) { + changed = true; + + glyfList.forEach(function (g) { + if (g.leftSideBearing !== leftSideBearing) { + glyfAdjust(g, 1, 1, leftSideBearing - g.leftSideBearing); + } + }); + } + + // 右边轴 + if (null != rightSideBearing) { + changed = true; + + glyfList.forEach(function (g) { + g.advanceWidth = g.xMax + rightSideBearing; + }); + } + + // 基线高度 + if (null != verticalAlign) { + changed = true; + var verticalAlign = verticalAlign || 0; + + glyfList.forEach(function (g) { + if (g.contours && g.contours.length) { + var bound = computeBoundingBox.computePath.apply(this, g.contours); + var offset = verticalAlign - bound.y; + glyfAdjust(g, 1, 1, 0, offset); + } + }); + } + + return changed ? glyfList : []; + } + + /** * 合并两个ttfObject,此处仅合并简单字形 @@ -91,7 +143,8 @@ define( if (options.adjustGlyf) { var ascent = ttf.hhea.ascent; var descent = ttf.hhea.descent; - var ajdustToEmPadding = 0; + var ajdustToEmPadding = 16; + adjustPos(list, 16, 16); adjustToEmBox(list, ascent, descent, ajdustToEmPadding); list.forEach(function (g) { @@ -376,63 +429,31 @@ define( /** * 调整glyf位置 * - * @param {Object} setting 选项 * @param {Array} indexList 索引列表 + * @param {Object} setting 选项 * @return {Array} 改变的glyf */ - TTF.prototype.adjustGlyfPos = function (setting, indexList) { + TTF.prototype.adjustGlyfPos = function (indexList, setting) { var glyfList = this.getGlyf(indexList); - var changed = false; - // 左边轴 - if (undefined !== setting.leftSideBearing) { - - changed = true; - - glyfList.forEach(function (g) { - if (g.leftSideBearing !== setting.leftSideBearing) { - glyfAdjust(g, 1, 1, setting.leftSideBearing - g.leftSideBearing); - } - }); - } - - // 右边轴 - if (undefined !== setting.rightSideBearing) { - - changed = true; - glyfList.forEach(function (g) { - g.advanceWidth = g.xMax + setting.rightSideBearing; - }); - } - - // 基线高度 - if (undefined !== setting.verticalAlign) { - changed = true; - - var verticalAlign = setting.verticalAlign || 0; - glyfList.forEach(function (g) { - if (g.contours && g.contours.length) { - var bound = computeBoundingBox.computePath.apply(this, g.contours); - var offset = verticalAlign - bound.y; - glyfAdjust(g, 1, 1, 0, offset); - } - }); - - } - - return changed ? glyfList : []; + return adjustPos( + glyfList, + setting.leftSideBearing, + setting.rightSideBearing, + setting.verticalAlign + ); }; /** * 调整glyf * - * @param {Object} setting 选项 * @param {Array} indexList 索引列表 + * @param {Object} setting 选项 * @return {boolean} */ - TTF.prototype.adjustGlyf = function (setting, indexList) { + TTF.prototype.adjustGlyf = function (indexList, setting) { var glyfList = this.getGlyf(indexList); var changed = false;