3 * http://www.robodesign.ro
5 * $Date: 2009-05-13 14:32:21 +0300 $
8 function tool_pencil (app) {
9 profiler.start('pencil.constructor');
12 context = app.layer.context,
14 width = app.image.width,
15 height = app.image.height;
17 this.mousedown = function (ev) {
23 this.mousemove = function (points) {
24 if (!mouse.buttonDown) {
28 var i = 0, x = 0, y = 0,
32 context.moveTo(_self.x, _self.y);
48 this.mouseup = function (ev) {
49 return _self.mousemove(ev);
52 profiler.stop('pencil.constructor');
55 var PaintWebInstance = new (function () {
57 this.layer = {canvas: null, context: null};
61 this.mouse = {x: 0, y: 0, buttonDown: false};
62 this.image = {width: 0, height: 0, zoom: 1};
64 var MathRound = Math.round,
68 mousemove_timer = null,
69 mousemove_points = [],
70 mousemove_delay = 100,
71 setInterval = window.setInterval,
72 clearInterval = window.clearInterval;
75 profiler.start('init');
77 var canvas = _self.doc.getElementById('imageView');
79 _self.layer.canvas = canvas;
80 _self.layer.context = canvas.getContext('2d');
81 _self.image.width = canvas.width;
82 _self.image.height = canvas.height;
84 _self.tool = new tool_pencil(_self);
87 canvas.addEventListener('mouseover', _self.ev_canvas, false);
88 canvas.addEventListener('mouseout', _self.ev_canvas, false);
89 canvas.addEventListener('mousedown', _self.ev_canvas, false);
90 canvas.addEventListener('mousemove', _self.ev_canvas, false);
91 canvas.addEventListener('mouseup', _self.ev_canvas, false);
93 profiler.stop('init');
96 // The general-purpose event handler. This function just determines the mouse
97 // position relative to the canvas element.
98 this.ev_canvas = function (ev) {
106 if (mouse.buttonDown) {
109 _self.mousemove_flush();
110 mouse.buttonDown = true;
114 if (!mouse.buttonDown) {
117 _self.mousemove_flush();
118 mouse.buttonDown = false;
122 if ('mousemove' in tool) {
123 mousemove_points = [];
124 mousemove_timer = setInterval(_self.mousemove_flush, mousemove_delay);
129 if (mousemove_timer) {
130 clearInterval(mousemove_timer);
131 mousemove_timer = null;
132 _self.mousemove_flush();
138 if ('layerX' in ev) {
139 if (image.zoom == 1) {
140 ev.x_ = mouse.x = ev.layerX;
141 ev.y_ = mouse.y = ev.layerY;
143 ev.x_ = mouse.x = MathRound(ev.layerX / image.zoom);
144 ev.y_ = mouse.y = MathRound(ev.layerY / image.zoom);
146 } else if ('offsetX' in ev) {
147 if (image.zoom == 1) {
148 ev.x_ = mouse.x = ev.offsetX;
149 ev.y_ = mouse.y = ev.offsetY;
151 ev.x_ = mouse.x = MathRound(ev.offsetX / image.zoom);
152 ev.y_ = mouse.y = MathRound(ev.offsetY / image.zoom);
157 if (ev.type == 'mousemove' && 'mousemove' in tool) {
158 mousemove_points.push(ev.x_, ev.y_);
161 } else if (ev.type in tool && tool[ev.type](ev)) {
169 this.mousemove_flush = function () {
170 if ('mousemove' in tool && '0' in mousemove_points) {
171 tool.mousemove(mousemove_points);
173 mousemove_points = [];
179 // vim:set spell spl=en fo=wan1croqlt tw=80 ts=2 sw=2 sts=2 sta et ai cin fenc=utf-8 ff=unix: