add svg glyf adjust

This commit is contained in:
kekee000 2015-01-06 08:52:20 +08:00
parent 41f1322992
commit 626993ef80
3 changed files with 73 additions and 52 deletions

View File

@ -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();

View File

@ -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';

View File

@ -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;