Files
fonteditor/src/editor/controller/initRender.js
2015-04-29 13:55:08 +08:00

263 lines
7.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file Editor 的render初始化
* @author mengke01(kekee000@gmail.com)
*/
define(
function (require) {
var commandList = require('../menu/commandList');
var lang = require('common/lang');
var modeSupport = require('../mode/support');
var selectShape = require('render/util/selectShape');
function onContextMenu(e) {
this.contextMenu.hide();
switch (e.command) {
case 'addreferenceline':
this.execCommand('addreferenceline', e.pos.x, e.pos.y);
break;
case 'split':
this.setMode('split');
break;
case 'paste':
var shapes = this.getClipBoard();
if (shapes) {
this.execCommand('pasteshapes', shapes, e.pos);
}
break;
case 'addsupportshapes':
this.execCommand('addsupportshapes', e.args.type);
break;
case 'gridsorption':
this.execCommand('gridsorption', !e.args.selected);
break;
case 'shapesorption':
this.execCommand('shapesorption', !e.args.selected);
break;
case 'showgrid':
this.execCommand('showgrid', !e.args.selected);
break;
case 'save':
this.fire('save');
break;
default:
this.execCommand(e.command, e);
}
}
/**
* 初始化渲染器
*/
function initRender() {
var me = this;
var render = this.render;
var setCamera = function (e) {
render.camera.x = e.x;
render.camera.y = e.y;
render.camera.event = e;
};
render.capture.on('down', function (e) {
if (me.contextMenu.visible()) {
return;
}
render.camera.startX = e.x;
render.camera.startY = e.y;
setCamera(e);
me.mode.down && me.mode.down.call(me, e);
});
render.capture.on('dragstart', function (e) {
if (me.contextMenu.visible()) {
return;
}
setCamera(e);
me.mode.dragstart && me.mode.dragstart.call(me, e);
});
render.capture.on('drag', function (e) {
if (me.contextMenu.visible()) {
return;
}
render.camera.mx = e.x - render.camera.x;
render.camera.my = e.y - render.camera.y;
setCamera(e);
me.mode.drag && me.mode.drag.call(me, e);
});
render.capture.on('dragend', function (e) {
if (me.contextMenu.visible()) {
return;
}
setCamera(e);
me.mode.dragend && me.mode.dragend.call(me, e);
});
render.capture.on('move', function (e) {
if (me.contextMenu.visible()) {
return;
}
// 这里由于canvas绘制导致0.5像素偏差,需要修正一下
me.graduationMarker.moveTo(e.x - 1, e.y - 1);
me.mode.move && me.mode.move.call(me, e);
});
render.capture.on('up', function (e) {
if (me.contextMenu.visible()) {
return;
}
me.mode.up && me.mode.up.call(me, e);
});
render.capture.on('click', function (e) {
if (me.contextMenu.visible()) {
return;
}
me.mode.click && me.mode.click.call(me, e);
});
render.capture.on('dblclick', function (e) {
if (me.contextMenu.visible()) {
return;
}
var result = render.getLayer('font').getShapeIn(e);
if (result) {
var shape = selectShape(result, e);
me.setMode('point', shape);
}
else if (me.mode === modeSupport.point) {
me.setMode();
}
});
render.capture.on('rightdown', function (e) {
if (me.mode.rightdown) {
me.mode.rightdown.call(me, e);
}
else {
me.contextMenu.onClick = lang.bind(onContextMenu, me);
me.contextMenu.show(e, commandList.editor);
}
});
render.keyCapture.on('keyup', function (e) {
if (me.contextMenu.visible()) {
return;
}
// esc键,重置model
if (e.key === 'esc' && !me.mode.keyup) {
me.setMode();
}
else {
me.mode.keyup && me.mode.keyup.call(me, e);
}
});
render.keyCapture.on('keydown', function (e) {
if (me.contextMenu.visible()) {
return;
}
// 保存
if (e.keyCode === 83 && e.ctrlKey) {
me.fire('save');
}
// 粘贴
else if (e.keyCode === 86 && e.ctrlKey) {
var shapes = me.getClipBoard();
if (shapes) {
me.execCommand('pasteshapes', shapes);
}
}
// 放大
else if (e.keyCode === 187 && (e.ctrlKey || e.altKey)) {
e.originEvent.stopPropagation();
e.originEvent.preventDefault();
var size = render.getSize();
render.scale(1.25, {
x: size.width / 2,
y: size.height / 2
});
}
// 缩小
else if (e.keyCode === 189 && (e.ctrlKey || e.altKey)) {
e.originEvent.stopPropagation();
e.originEvent.preventDefault();
var sz = render.getSize();
render.scale(0.8, {
x: sz.width / 2,
y: sz.height / 2
});
}
// 撤销
else if (e.keyCode === 90 && e.ctrlKey) {
if (me.mode.undo) {
me.mode.undo.call(me, e);
}
else {
me.execCommand('undo');
}
}
// 恢复
else if (e.keyCode === 89 && e.ctrlKey) {
if (me.mode.redo) {
me.mode.redo.call(me, e);
}
else {
me.execCommand('redo');
}
}
else {
me.mode.keydown && me.mode.keydown.call(me, e);
}
});
render.keyCapture.on('keydown', function (e) {
if (me.contextMenu.visible()) {
return;
}
me.mode.keydown && me.mode.keydown.call(me, e);
});
render.on('resize', function (e) {
me.render.move(
(e.size.width - e.prevSize.width) / 2,
(e.size.height - e.prevSize.height) / 2
);
me.render.refresh();
});
}
return initRender;
}
);