设置名字和头部信息

This commit is contained in:
kekee000 2014-10-10 16:47:39 +08:00
parent 069e408f50
commit 8aa5c9772c
9 changed files with 99 additions and 27 deletions

View File

@ -41,7 +41,7 @@ define(
upFile.addEventListener('change', onUpFileChange); upFile.addEventListener('change', onUpFileChange);
ajaxBinaryFile({ ajaxBinaryFile({
url: '../font/baiduHealth.ttf', url: '../test/baiduHealth.ttf',
onSuccess: function(binaryData) { onSuccess: function(binaryData) {
var ttfReader = new ttfreader(); var ttfReader = new ttfreader();
var ttfData = ttfReader.read(binaryData); var ttfData = ttfReader.read(binaryData);

View File

@ -102,6 +102,7 @@ define(
* @return {string} 字符串 * @return {string} 字符串
*/ */
pad: function(str, size, ch) { pad: function(str, size, ch) {
str = String(str);
if(str.length > size) { if(str.length > size) {
return str.slice(str.length - size); return str.slice(str.length - size);
} }

View File

@ -15,7 +15,7 @@ define(
+ '<input data-field="fontFamily" type="text" class="form-control">' + '<input data-field="fontFamily" type="text" class="form-control">'
+ '</div>' + '</div>'
+ '<div class="input-group input-group-sm">' + '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">字体家族</span>' + '<span class="input-group-addon">字体家族</span>'
+ '<input data-field="fontSubFamily" type="text" class="form-control">' + '<input data-field="fontSubFamily" type="text" class="form-control">'
+ '</div>' + '</div>'
+ '<div class="input-group input-group-sm">' + '<div class="input-group input-group-sm">'
@ -29,34 +29,36 @@ define(
+ '<div class="input-group input-group-sm">' + '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">PostScript名称</span>' + '<span class="input-group-addon">PostScript名称</span>'
+ '<input data-field="postScriptName" type="text" class="form-control">' + '<input data-field="postScriptName" type="text" class="form-control">'
+ '</div>'
+ '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">em框大小</span>'
+ '<input data-field="unitsPerEm" type="number" min="64" max="16384" class="form-control" placeholder="1024~16384">'
+ '</div>'
+ '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">最小可读尺寸</span>'
+ '<input data-field="lowestRecPPEM" type="number" min="8" max="16384" class="form-control" placeholder="8~16384">'
+ '</div>'
+ '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">创建日期</span>'
+ '<input data-field="created" type="datetime-local" class="form-control">'
+ '</div>'; + '</div>';
return require('./setting').derive({ return require('./setting').derive({
title: '命名信息', title: '字体信息',
getTpl: function() { getTpl: function() {
return tpl; return tpl;
}, },
set: function(setting) { set: function(setting) {
this.getDialog().find('[data-field]').each(function(i, item) { this.setFields(setting);
item = $(item);
item.val(setting[item.attr('data-field')] || '');
});
}, },
validate: function() { validate: function() {
var name = {}; var setting = this.getFields();
this.getDialog().find('[data-field]').each(function(i, item) { return setting;
item = $(item);
var val = item.val().trim();
if (val) {
name[item.attr('data-field')] = val;
}
});
return name;
} }
}); });

View File

@ -11,6 +11,7 @@ define(
function(require) { function(require) {
var lang = require('common/lang'); var lang = require('common/lang');
var observable = require('common/observable'); var observable = require('common/observable');
var pad = require('common/string').pad;
/** /**
* 设置框函数 * 设置框函数
@ -91,6 +92,21 @@ define(
if (item.type == 'checkbox') { if (item.type == 'checkbox') {
item.checked = setting[item.getAttribute('data-field')] ? 'checked' : ''; item.checked = setting[item.getAttribute('data-field')] ? 'checked' : '';
} }
else if (item.type == 'datetime-local') {
var val = setting[item.getAttribute('data-field')];
var date;
if (typeof(val) === 'string') {
date = new Date(Date.parse(val));
}
else if(/^\d+$/.test(val)) {
date = new Date(+val);
}
else {
date = val;
}
item.value = date.getFullYear() + '-' + pad(date.getMonth() + 1, 2) + '-' + pad(date.getDate(), 2)
+ 'T' + pad(date.getHours(), 2) + ':' + pad(date.getMinutes(), 2);
}
else { else {
item = $(item); item = $(item);
item.val(setting[item.attr('data-field')]); item.val(setting[item.attr('data-field')]);
@ -113,11 +129,26 @@ define(
setting[item.getAttribute('data-field')] = true; setting[item.getAttribute('data-field')] = true;
} }
} }
else if (item.type == 'datetime-local') {
if (item.value) {
setting[item.getAttribute('data-field')] = Date.parse(item.value.replace('T', ' '));
}
}
else if (item.type == 'number') {
if (item.value) {
var val = +item.value;
if (item.getAttribute('data-ceil')) {
val = Math.floor(val);
}
setting[item.getAttribute('data-field')] = val;
}
}
else { else {
item = $(item); item = $(item);
var val = item.val().trim(); var val = item.val().trim();
if (val) { if (val) {
setting[item.attr('data-field')] = item.attr('data-ceil') ? Math.floor(val) : +val ; setting[item.attr('data-field')] = val;
} }
} }
}); });

View File

@ -25,8 +25,8 @@ define(
var setting = { var setting = {
'unicode': require('../dialog/setting-unicode'), 'unicode': require('../dialog/setting-unicode'),
'name': require('../dialog/setting-name'), 'name': require('../dialog/setting-name'),
'adjust-pos': require('../dialog/setting-adjust-pos'), //'adjust-pos': require('../dialog/setting-adjust-pos'),
'adjust-glyf': require('../dialog/setting-adjust-glyf'), //'adjust-glyf': require('../dialog/setting-adjust-glyf'),
'online': require('../dialog/font-online') 'online': require('../dialog/font-online')
} }
@ -152,10 +152,10 @@ define(
if (ttf) { if (ttf) {
var dlg = new setting.name({ var dlg = new setting.name({
onChange: function(setting) { onChange: function(setting) {
program.ttfmanager.setName(setting); program.ttfmanager.setInfo(setting);
} }
}); });
dlg.show(ttf.name); dlg.show($.extend({}, ttf.head, ttf.name));
} }
}, },

View File

@ -234,12 +234,22 @@ define(
}; };
/** /**
* 撤销 * 设置名字和头部信息
* @return {this} * @return {this}
*/ */
Manager.prototype.setName = function(name) { Manager.prototype.setInfo = function(info) {
this.ttf.setName(name); var changed = false;
return this; if (this.ttf.get().head.unitsPerEm != info.unitsPerEm) {
changed = true;
}
this.ttf.setName(info);
this.ttf.setHead(info);
if (changed) {
this.fireChange(false);
}
return this;
}; };
/** /**

View File

@ -430,6 +430,26 @@ define(
return this.ttf.name; return this.ttf.name;
}; };
/**
* 设置head信息
*
* @return {Object} 头对象
*/
TTF.prototype.setHead = function(head) {
if (head) {
// unitsperem
if (head.unitsPerEm && head.unitsPerEm >= 64 && head.unitsPerEm <= 16384) {
this.ttf.head.unitsPerEm = head.unitsPerEm;
}
// lowestrecppem
if (head.lowestRecPPEM && head.lowestRecPPEM >= 8 && head.lowestRecPPEM <= 16384) {
this.ttf.head.lowestRecPPEM = head.lowestRecPPEM;
} }
return this.ttf.head;
};
return TTF; return TTF;
} }
); );

View File

@ -47,6 +47,11 @@ define(
// 重置校验码 // 重置校验码
ttf.head.checkSumAdjustment = 0; ttf.head.checkSumAdjustment = 0;
ttf.head.magickNumber = 0x5F0F3CF5; ttf.head.magickNumber = 0x5F0F3CF5;
if (typeof(ttf.head.created) == 'string') {
ttf.head.created = /^\d+$/.test(ttf.head.created) ? +ttf.head.created : Date.parse(ttf.head.created);
}
ttf.head.created = Date.now();
ttf.head.modified = Date.now();
// 将glyf的代码点按小到大排序 // 将glyf的代码点按小到大排序
ttf.glyf.forEach(function(glyf) { ttf.glyf.forEach(function(glyf) {

View File

@ -260,12 +260,15 @@ define(
var delta = -2077545600000; // new Date(1970, 1, 1).getTime() - new Date(1904, 1, 1).getTime(); var delta = -2077545600000; // new Date(1970, 1, 1).getTime() - new Date(1904, 1, 1).getTime();
if (typeof value === 'undefined') { if (typeof(value) === 'undefined') {
value = delta; value = delta;
} }
else if (typeof value.getTime === 'function') { else if (typeof(value.getTime) === 'function') {
value = value.getTime(); value = value.getTime();
} }
else if (/^\d+$/.test(value)){
value = +value;
}
else { else {
value = Date.parse(value); value = Date.parse(value);
} }