diff --git a/src/fonteditor/ttf/main.js b/src/fonteditor/ttf/main.js index 156b749..38c9560 100644 --- a/src/fonteditor/ttf/main.js +++ b/src/fonteditor/ttf/main.js @@ -16,7 +16,7 @@ define( var ProjectViewer = require('../widget/projectviewer'); var TTFManager = require('../widget/ttfmanager'); var program = require('../widget/program'); - var clipboard = require('../widget/clipboard'); + var controller = require('../widget/controller/default'); var string = require('common/string'); @@ -100,6 +100,7 @@ define( var list = project.add(name, program.ttfmanager.get()); program.projectViewer.show(list); program.data.projectName = name; + program.ttfmanager.setState('new'); } } @@ -180,58 +181,18 @@ define( // 查看器 program.viewer = new GLYFViewer($('#glyf-list')); + // 项目管理 + program.project = project; program.projectViewer = new ProjectViewer($('#project-list')); + // ttf管理 program.ttfmanager = new TTFManager(); + controller.init(program); - program.viewer.on('del', function(e) { - if (e.list) { - program.ttfmanager.removeGlyf(e.list); - } - }).on('copy', function(e) { - var list = program.ttfmanager.getGlyf(e.list); - clipboard.set(list, 'glyf'); - }).on('cut', function(e) { - var list = program.ttfmanager.getGlyf(e.list); - clipboard.set(list, 'glyf'); - program.ttfmanager.removeGlyf(e.list); - }).on('paste', function(e) { - var glyfList = clipboard.get('glyf'); - if (glyfList && glyfList.length) { - program.ttfmanager.appendGlyf(glyfList, e.list); - } - }).on('undo', function(e) { - program.ttfmanager.undo(); - }).on('redo', function(e) { - program.ttfmanager.redo(); - }); - - program.projectViewer.on('open', function(e) { - var imported = project.get(e.projectName); - if (imported) { - if (program.ttfmanager.isChanged() && !window.confirm('是否放弃保存当前项目?')) { - return; - } - program.ttfmanager.set(imported); - program.data.projectName = e.projectName; - program.viewer.focus(); - } - }).on('del', function(e) { - if (e.projectName && window.confirm('是否删除项目?')) { - program.projectViewer.show(project.remove(e.projectName)); - } - program.viewer.focus(); - }) - + // 加载项目 program.projectViewer.show(project.items()); - - - program.ttfmanager.on('change', function(e) { - program.viewer.show(e.ttf); - }); - } }; diff --git a/src/fonteditor/widget/clipboard.js b/src/fonteditor/widget/clipboard.js index ac11e27..71b14ec 100644 --- a/src/fonteditor/widget/clipboard.js +++ b/src/fonteditor/widget/clipboard.js @@ -10,7 +10,7 @@ define( function(require) { - var storage = window.sessionStorage; + var storage = window.localStorage; var storageName = 'clipboard.default'; @@ -40,12 +40,19 @@ define( if (null !== data) { data = JSON.parse(data); if (data.type == type) { - storage.removeItem(storageName); + //storage.removeItem(storageName); return data.data; } } return null; + }, + + /** + * 清空 + */ + clear: function() { + storage.removeItem(storageName); } }; diff --git a/src/fonteditor/widget/controller/default.js b/src/fonteditor/widget/controller/default.js new file mode 100644 index 0000000..66fcb37 --- /dev/null +++ b/src/fonteditor/widget/controller/default.js @@ -0,0 +1,76 @@ +/** + * @file default.js + * @author mengke01 + * @date + * @description + * 默认的页面控制器 + */ + + +define( + function(require) { + + var clipboard = require('../clipboard'); + var lang = require('common/lang'); + + return { + + /** + * 初始化控制器 + * + * @param {Object} program 项目组件 + */ + init: function(program) { + program.viewer.on('del', function(e) { + if (e.list) { + program.ttfmanager.removeGlyf(e.list); + } + }).on('copy', function(e) { + var list = program.ttfmanager.getGlyf(e.list); + clipboard.set(list, 'glyf'); + }).on('cut', function(e) { + var list = program.ttfmanager.getGlyf(e.list); + clipboard.set(list, 'glyf'); + program.ttfmanager.removeGlyf(e.list); + }).on('paste', function(e) { + var glyfList = clipboard.get('glyf'); + if (glyfList && glyfList.length) { + program.ttfmanager.appendGlyf(glyfList); + } + }).on('undo', function(e) { + program.ttfmanager.undo(); + }).on('redo', function(e) { + program.ttfmanager.redo(); + }); + + program.projectViewer.on('open', function(e) { + var imported = program.project.get(e.projectName); + if (imported) { + if (program.ttfmanager.isChanged() && !window.confirm('是否放弃保存当前项目?')) { + return; + } + program.ttfmanager.set(imported); + program.data.projectName = e.projectName; + program.viewer.focus(); + } + }).on('del', function(e) { + if (e.projectName && window.confirm('是否删除项目?')) { + program.projectViewer.show(program.project.remove(e.projectName)); + } + program.viewer.focus(); + }) + + program.ttfmanager.on('change', function(e) { + program.viewer.show(e.ttf); + program.viewer.focus(); + }); + + window.onbeforeunload = function() { + if (program.ttfmanager.isChanged()) { + return '是否放弃保存当前项目?'; + } + }; + } + }; + } +); diff --git a/src/fonteditor/widget/glyfviewer.js b/src/fonteditor/widget/glyfviewer.js index 98a032d..53172bb 100644 --- a/src/fonteditor/widget/glyfviewer.js +++ b/src/fonteditor/widget/glyfviewer.js @@ -16,8 +16,10 @@ define( var GLYF_ITEM_TPL = '' + '
' + '' - + '' - + '
${unicode}
${name}
' + + '' + + '' + + '
${unicode}
' + + '
${name}
' + '
'; var keyMap = { @@ -93,16 +95,10 @@ define( var me = this; - - // 绑定键盘事件 - me.listener = function(e) { - - // 取消选中 - if (27 === e.keyCode) { - e.stopPropagation(); - me.main.children().removeClass('selected'); - } - else if (65 === e.keyCode && e.ctrlKey) { + me.downlistener = function(e) { + // 阻止ctrl+A默认事件 + if (65 === e.keyCode && e.ctrlKey) { + e.preventDefault(); e.stopPropagation(); me.main.children().addClass('selected'); } @@ -116,6 +112,11 @@ define( e.stopPropagation(); me.fire('redo'); } + // 取消选中 + else if (27 === e.keyCode) { + e.stopPropagation(); + me.main.children().removeClass('selected'); + } // 其他操作 else if (keyMap[e.keyCode] && (e.keyCode == 46 || e.ctrlKey)) { e.stopPropagation(); @@ -211,13 +212,13 @@ define( GlyfViewer.prototype.focus = function() { if (!this.listening) { - document.body.addEventListener('keyup', this.listener, false); + document.body.addEventListener('keydown', this.downlistener); this.listening = true; } }; GlyfViewer.prototype.blur = function() { - document.body.removeEventListener('keyup', this.listener); + document.body.removeEventListener('keydown', this.downlistener); this.listening = false; }; diff --git a/src/fonteditor/widget/ttfmanager.js b/src/fonteditor/widget/ttfmanager.js index 2f601b9..fc9f84f 100644 --- a/src/fonteditor/widget/ttfmanager.js +++ b/src/fonteditor/widget/ttfmanager.js @@ -14,6 +14,18 @@ define( var pathAdjust = require('graphics/pathAdjust'); var History = require('editor/util/History'); + /** + * 清除glyf编辑状态 + * + * @param {Array} glyfList glyf列表 + * @return {Array} glyf列表 + */ + function clearGlyfTag(glyfList) { + glyfList.forEach(function(g) { + delete g.modify; + }); + return glyfList; + } /** * 合并两个ttfObject,此处仅合并简单字形 @@ -119,6 +131,7 @@ define( * @return {this} */ Manager.prototype.addGlyf = function(glyf) { + glyf.modify = 'new'; this.ttf.glyf.push(glyf); this.fireChange(true); return this; @@ -220,6 +233,9 @@ define( glyfList = glyfList.slice(l); } if (glyfList.length) { + glyfList.forEach(function(g) { + g.modify = 'new'; + }); Array.prototype.splice.apply(glyf, [glyf.length, 0].concat(glyfList)); } @@ -283,6 +299,18 @@ define( return !!this.changed; }; + /** + * 设置状态 + * @return {this} + */ + Manager.prototype.setState = function(state) { + if (state == 'new') { + this.changed = false; + } + }; + + Manager.prototype.clearGlyfTag = clearGlyfTag; + /** * 注销 */