client/js/paper-renderer.js
author veltr
Fri, 27 Jul 2012 19:15:32 +0200
changeset 4 f5297dde9053
parent 3 7722ec70c01b
child 5 67085e6281e5
permissions -rw-r--r--
Can now add nodes/edges
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     1
Rkns.Renderers.Paper = Rkns.Utils.inherit(Rkns.Renderers._Base);
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     2
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     3
Rkns.Renderers.Paper__Controllers = {}
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     4
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     5
Rkns.Renderers.Paper__Controllers._Base = function(_renderer, _element) {
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     6
    if (typeof _renderer !== "undefined") {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
     7
        this.id = Rkns.Utils.getUID('controller');
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     8
        this._renderer = _renderer;
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     9
        this._element = _element;
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    10
        this._element.__controller = this;
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    11
    }
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    12
}
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    13
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    14
Rkns.Renderers.Paper__Controllers._Base.prototype.select = function() {}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    15
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    16
Rkns.Renderers.Paper__Controllers._Base.prototype.unselect = function() {}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    17
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    18
Rkns.Renderers.Paper__Controllers.Node = Rkns.Utils.inherit(Rkns.Renderers.Paper__Controllers._Base);
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    19
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    20
Rkns.Renderers.Paper__Controllers.Node.prototype._init = function() {
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    21
    this._renderer.node_layer.activate();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    22
    this.type = "node";
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    23
    this.node_circle = new paper.Path.Circle([0, 0], Rkns._NODE_RADIUS);
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    24
    this.node_circle.fillColor = '#ffffff';
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    25
    this.node_circle.__controller = this;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    26
    this.node_text = new paper.PointText([0,0]);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    27
    this.node_text.characterStyle = {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    28
        fontSize: Rkns._NODE_FONT_SIZE,
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    29
        fillColor: 'black'
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    30
    };
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    31
    this.node_text.paragraphStyle.justification = 'center';
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    32
    this.node_text.__controller = this;
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    33
}
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    34
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    35
Rkns.Renderers.Paper__Controllers.Node.prototype.redraw = function() {
3
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
    36
    this.node_model_coords = new paper.Point(this._element.position);
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    37
    this.node_paper_coords = this._renderer.toPaperCoords(this.node_model_coords);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    38
    this.node_circle.position = this.node_paper_coords;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    39
    this.node_text.content = this._element.title;
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    40
    this.node_text.position = this.node_paper_coords.add([0, 2 * Rkns._NODE_RADIUS]);
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    41
    this.node_circle.strokeColor = this._element.created_by.color;
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    42
}
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    43
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    44
Rkns.Renderers.Paper__Controllers.Node.prototype.paperShift = function(_delta) {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    45
    this._element.setPosition(this._renderer.toModelCoords(this.node_paper_coords.add(_delta)));
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    46
    this._renderer._project.serializer.save();
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    47
    this._renderer.redraw();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    48
}
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    49
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    50
Rkns.Renderers.Paper__Controllers.Node.prototype.select = function(_delta) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    51
    this.node_circle.strokeWidth = 3;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    52
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    53
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    54
Rkns.Renderers.Paper__Controllers.Node.prototype.unselect = function(_delta) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    55
    this.node_circle.strokeWidth = 1;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    56
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    57
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    58
/* */
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    59
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    60
Rkns.Renderers.Paper__Controllers.Edge = Rkns.Utils.inherit(Rkns.Renderers.Paper__Controllers._Base);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    61
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    62
Rkns.Renderers.Paper__Controllers.Edge.prototype._init = function() {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    63
    this._renderer.edge_layer.activate();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    64
    this.type = "edge";
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    65
    this.from_node_controller = this._element.from.__controller;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    66
    this.to_node_controller = this._element.to.__controller;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    67
    this.edge_line = new paper.Path();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    68
    this.edge_line.add([0,0],[0,0]);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    69
    this.edge_line.__controller = this;
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    70
    this.edge_arrow = new paper.Path();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    71
    this.edge_arrow.add([0,0],[Rkns._ARROW_LENGTH,Rkns._ARROW_WIDTH / 2],[0,Rkns._ARROW_WIDTH]);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    72
    this.edge_arrow.__controller = this;
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    73
    this.edge_text = new paper.PointText();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    74
    this.edge_text.characterStyle = {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    75
        fontSize: Rkns._EDGE_FONT_SIZE,
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    76
        fillColor: 'black'
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    77
    };
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    78
    this.edge_text.paragraphStyle.justification = 'center';
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    79
    this.edge_text.__controller = this;
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    80
    this.edge_text_angle = 0;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    81
    this.edge_arrow_angle = 0;
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    82
}
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    83
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    84
Rkns.Renderers.Paper__Controllers.Edge.prototype.redraw = function() {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    85
    var _p0 = this.from_node_controller.node_paper_coords,
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    86
        _p1 = this.to_node_controller.node_paper_coords,
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    87
        _a = _p1.subtract(_p0).angle,
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    88
        _center = _p0.add(_p1).divide(2),
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    89
        _color = this._element.created_by.color;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    90
    this.edge_line.strokeColor = _color;
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    91
    this.edge_line.segments[0].point = _p0;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    92
    this.edge_line.segments[1].point = _p1;
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    93
    this.edge_arrow.rotate(_a - this.edge_arrow_angle);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    94
    this.edge_arrow.fillColor = _color;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    95
    this.edge_arrow.position = _center;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
    96
    this.edge_arrow_angle = _a;
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    97
    if (_a > 90) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    98
        _a -= 180;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
    99
    }
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   100
    if (_a < -90) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   101
        _a += 180;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   102
    }
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   103
    this.edge_text.rotate(_a - this.edge_text_angle);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   104
    this.edge_text.content = this._element.title;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   105
    this.edge_text.position = _center;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   106
    this.edge_text_angle = _a;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   107
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   108
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   109
Rkns.Renderers.Paper__Controllers.Edge.prototype.select = function(_delta) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   110
    this.edge_line.strokeWidth = 3;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   111
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   112
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   113
Rkns.Renderers.Paper__Controllers.Edge.prototype.unselect = function(_delta) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   114
    this.edge_line.strokeWidth = 1;
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   115
}
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   116
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   117
Rkns.Renderers.Paper__Controllers.Edge.prototype.paperShift = function(_delta) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   118
    this.from_node_controller.paperShift(_delta);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   119
    this.to_node_controller.paperShift(_delta);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   120
    this._renderer.redraw();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   121
}
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   122
/* */
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   123
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   124
Rkns.Renderers.Paper__Controllers.TempEdge = Rkns.Utils.inherit(Rkns.Renderers.Paper__Controllers._Base);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   125
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   126
Rkns.Renderers.Paper__Controllers.TempEdge.prototype._init = function() {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   127
    this._renderer.edge_layer.activate();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   128
    this.type = "temp-edge";
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   129
    var _color = this._renderer._project.current_user.color;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   130
    this.edge_line = new paper.Path();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   131
    this.edge_line.strokeColor = _color;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   132
    this.edge_line.add([0,0],[0,0]);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   133
    this.edge_line.__controller = this;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   134
    this.edge_arrow = new paper.Path();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   135
    this.edge_arrow.fillColor = _color;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   136
    this.edge_arrow.add([0,0],[Rkns._ARROW_LENGTH,Rkns._ARROW_WIDTH / 2],[0,Rkns._ARROW_WIDTH]);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   137
    this.edge_arrow.__controller = this;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   138
    this.edge_arrow_angle = 0;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   139
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   140
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   141
Rkns.Renderers.Paper__Controllers.TempEdge.prototype.redraw = function() {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   142
    var _p0 = this.from_node_controller.node_paper_coords,
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   143
        _p1 = this.end_pos,
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   144
        _a = _p1.subtract(_p0).angle,
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   145
        _c = _p0.add(_p1).divide(2);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   146
    this.edge_line.segments[0].point = _p0;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   147
    this.edge_line.segments[1].point = _p1;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   148
    this.edge_arrow.rotate(_a - this.edge_arrow_angle);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   149
    this.edge_arrow.position = _c;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   150
    this.edge_arrow_angle = _a;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   151
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   152
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   153
Rkns.Renderers.Paper__Controllers.TempEdge.prototype.paperShift = function(_delta) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   154
    this.end_pos = this.end_pos.add(_delta);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   155
    this._renderer.onMouseMove({point: this.end_pos});
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   156
    this.redraw();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   157
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   158
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   159
Rkns.Renderers.Paper__Controllers.TempEdge.prototype.finishEdge = function(_event) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   160
    var _hitResult = paper.project.hitTest(_event.point);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   161
    if (_hitResult && typeof _hitResult.item.__controller !== "undefined") {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   162
        var _target = _hitResult.item.__controller;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   163
        if (_target.type === "node" && this.from_node_controller._element.id !== _target._element.id) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   164
            this._renderer._project.addEdge({
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   165
                from: this.from_node_controller._element.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   166
                to: _target._element.id
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   167
            }, Rkns._RENDER_AND_SAVE)
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   168
        }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   169
    }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   170
    this.edge_arrow.remove();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   171
    this.edge_line.remove();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   172
    this._renderer.controllers.removeId(this.id);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   173
}
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   174
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   175
/* */
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   176
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   177
Rkns.Renderers.Paper.prototype._init = function() {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   178
    this._MARGIN_X = 80;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   179
    this._MARGIN_Y = 50;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   180
    var _canvas_id = this._project._opts.canvas_id;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   181
    this.$ = Rkns.$("#"+_canvas_id)
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   182
    paper.setup(document.getElementById(_canvas_id));
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   183
    this.scale = 1;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   184
    this.offset = paper.view.center;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   185
    this.totalScroll = 0;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   186
    this.dragging_target = null;
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   187
    this.selected_target = null;
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   188
    this.edge_layer = new paper.Layer();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   189
    this.node_layer = new paper.Layer();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   190
    var _tool = new paper.Tool(),
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   191
        _this = this;
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   192
    _tool.onMouseMove = function(_event) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   193
        _this.onMouseMove(_event);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   194
    }
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   195
    _tool.onMouseDown = function(_event) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   196
        _this.onMouseDown(_event);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   197
    }
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   198
    _tool.onMouseDrag = function(_event) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   199
        _this.onMouseDrag(_event);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   200
    }
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   201
    _tool.onMouseUp = function(_event) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   202
        _this.onMouseUp(_event);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   203
    }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   204
    this.$.mousewheel(function(_event, _delta) {
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   205
        _this.onScroll(_event, _delta);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   206
    })
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   207
    this.$.dblclick(function(_event) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   208
        _this.onDoubleClick(_event);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   209
    })
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   210
    paper.view.onResize = function(_event) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   211
        _this.offset = _this.offset.add(_event.delta.divide(2));
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   212
        _this.redraw();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   213
    }
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   214
}
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   215
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   216
Rkns.Renderers.Paper.prototype.toPaperCoords = function(_point) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   217
    return _point.multiply(this.scale).add(this.offset);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   218
}
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   219
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   220
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   221
Rkns.Renderers.Paper.prototype.toModelCoords = function(_point) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   222
    return _point.subtract(this.offset).divide(this.scale);
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   223
}
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   224
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   225
Rkns.Renderers.Paper.prototype.draw = function() {
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   226
    var _this = this,
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   227
        _xx = this._project.nodes.map(function(_node) { return _node.position.x }),
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   228
        _yy = this._project.nodes.map(function(_node) { return _node.position.y }),
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   229
        _minx = Math.min.apply(Math, _xx),
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   230
        _miny = Math.min.apply(Math, _yy),
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   231
        _maxx = Math.max.apply(Math, _xx),
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   232
        _maxy = Math.max.apply(Math, _yy);
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   233
    this.scale = Math.min((paper.view.size.width - 2 * this._MARGIN_X) / (_maxx - _minx), (paper.view.size.height - 2 * this._MARGIN_Y) / (_maxy - _miny));
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   234
    this.offset = paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(this.scale));
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   235
    this.controllers = new Rkns.Model.List();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   236
    this._project.nodes.forEach(function(_node) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   237
        _this.addElement("Node", _node);
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   238
    });
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   239
    this._project.edges.forEach(function(_edge) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   240
        _this.addElement("Edge", _edge);
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   241
    });
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   242
    
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   243
    this.redraw();
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   244
}
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   245
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   246
Rkns.Renderers.Paper.prototype.addElement = function(_type, _element) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   247
    var _el = new Rkns.Renderers.Paper__Controllers[_type](this, _element);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   248
    this.controllers.push(_el);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   249
    return _el;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   250
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   251
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   252
Rkns.Renderers.Paper.prototype.redraw = function() {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   253
    this.controllers.forEach(function(_controller) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   254
        _controller.redraw();
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   255
    });
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   256
    paper.view.draw();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   257
}
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   258
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   259
Rkns.Renderers.Paper.prototype.onMouseMove = function(_event) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   260
    var _hitResult = paper.project.hitTest(_event.point);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   261
    if (_hitResult && typeof _hitResult.item.__controller !== "undefined") {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   262
        if (this.selected_target !== _hitResult.item.__controller) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   263
            if (this.selected_target) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   264
                this.selected_target.unselect();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   265
            }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   266
            this.selected_target = _hitResult.item.__controller;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   267
            this.selected_target.select();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   268
        }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   269
    } else {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   270
        if (this.selected_target) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   271
            this.selected_target.unselect();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   272
        }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   273
        this.selected_target = null;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   274
    }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   275
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   276
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   277
Rkns.Renderers.Paper.prototype.onMouseDown = function(_event) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   278
    var _hitResult = paper.project.hitTest(_event.point);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   279
    if (_hitResult && typeof _hitResult.item.__controller !== "undefined") {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   280
        this.dragging_target = _hitResult.item.__controller;
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   281
        if (this.dragging_target.type === "node" && _hitResult.type === "stroke") {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   282
            var _tmpEdge = this.addElement("TempEdge",{});
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   283
            _tmpEdge.end_pos = _event.point;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   284
            _tmpEdge.from_node_controller = this.dragging_target;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   285
            _tmpEdge.redraw();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   286
            this.dragging_target = _tmpEdge;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   287
        }
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   288
    } else {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   289
        this.dragging_target = null;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   290
    }
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
   291
}
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   292
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   293
Rkns.Renderers.Paper.prototype.onMouseDrag = function(_event) {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   294
    if (this.dragging_target && typeof this.dragging_target.paperShift === "function") {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   295
        this.dragging_target.paperShift(_event.delta);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   296
    } else {
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   297
        this.offset = this.offset.add(_event.delta);
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   298
        this.redraw();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   299
    }
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   300
}
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   301
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   302
Rkns.Renderers.Paper.prototype.onMouseUp = function(_event) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   303
    if (this.dragging_target && this.dragging_target.type === "temp-edge") {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   304
        this.dragging_target.finishEdge(_event);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   305
    }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   306
    this.dragging_target = null;
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   307
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   308
3
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
   309
Rkns.Renderers.Paper.prototype.onScroll = function(_event, _scrolldelta) {
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
   310
    this.totalScroll += _scrolldelta;
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   311
    if (Math.abs(this.totalScroll) >= 1) {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   312
        var _off = this.$.offset(),
3
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
   313
            _delta = new paper.Point([
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
   314
                _event.pageX - _off.left,
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
   315
                _event.pageY - _off.top
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
   316
            ]).subtract(this.offset).multiply( Math.SQRT2 - 1 );
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   317
        if (this.totalScroll > 0) {
3
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
   318
            this.offset = this.offset.subtract(_delta);
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   319
            this.scale *= Math.SQRT2;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   320
        } else {
3
7722ec70c01b Scroll now depends on mouse position
veltr
parents: 2
diff changeset
   321
            this.offset = this.offset.add(_delta.divide( Math.SQRT2 ));
2
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   322
            this.scale *= Math.SQRT1_2;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   323
        }
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   324
        this.totalScroll = 0;
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   325
        this.redraw();
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   326
    }
3360c3f7fb18 Added Edge management to the rendering engine
veltr
parents: 1
diff changeset
   327
}
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   328
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   329
Rkns.Renderers.Paper.prototype.onDoubleClick = function(_event) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   330
    var _off = this.$.offset(),
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   331
        _point = new paper.Point([
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   332
            _event.pageX - _off.left,
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   333
            _event.pageY - _off.top
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   334
        ]);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   335
    var _hitResult = paper.project.hitTest(_point);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   336
    if (!_hitResult || typeof _hitResult.item.__controller === "undefined") {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   337
        var _coords = this.toModelCoords(_point);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   338
        this._project.addNode({
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   339
            position: {
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   340
                x: _coords.x,
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   341
                y: _coords.y
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   342
            }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   343
        }, Rkns._RENDER_AND_SAVE);
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   344
    }
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   345
    paper.view.draw();
f5297dde9053 Can now add nodes/edges
veltr
parents: 3
diff changeset
   346
}