client/js/paper-renderer.js
changeset 38 092fc99f7558
parent 37 db991a757015
child 39 84eea249ce7e
--- a/client/js/paper-renderer.js	Thu Sep 06 17:21:11 2012 +0200
+++ b/client/js/paper-renderer.js	Fri Sep 07 12:26:16 2012 +0200
@@ -67,7 +67,7 @@
             top: (Rkns.Renderer._EDITOR_PADDING + _top)
         });
     },
-    sector : function(_repr, _inR, _outR, _startAngle, _endAngle, _padding, _imgsrc) {
+    sector : function(_repr, _inR, _outR, _startAngle, _endAngle, _padding, _imgsrc, _caption) {
         var _startRads = _startAngle * Math.PI / 180,
             _endRads = _endAngle * Math.PI / 180,
             _img = new Image(),
@@ -91,6 +91,8 @@
             _centerRads = (_startRads + _endRads) / 2,
             _centerX = Math.cos(_centerRads) * _centerR,
             _centerY = Math.sin(_centerRads) * _centerR,
+            _textX = Math.cos(_centerRads) * (_outR + 3),
+            _textY = Math.sin(_centerRads) * (_outR + 3),
             _segments = [];
         _segments.push([[_startXIn, _startYIn], [0, 0], [ _kin * _startdx, _kin * _startdy ]]);
         for (var i = 1; i < 4; i++) {
@@ -118,12 +120,31 @@
         _path.opacity = .5;
         _path.closed = true;
         _path.__representation = _repr;
+        if (_textX >= -2 && _textX <= 2) {
+            if (_textY > 0) {
+                _textY += 6;
+            }
+        }
+        var _text = new paper.PointText(_textX,_textY);
+        _text.characterStyle = {
+            fontSize: 9,
+            fillColor: '#c000c0'
+        };
+        if (_textX > 2) {
+            _text.paragraphStyle.justification = 'left';
+        } else if (_textX < -2) {
+            _text.paragraphStyle.justification = 'right';
+        } else {
+            _text.paragraphStyle.justification = 'center';
+        }
+        _text.visible = false;
         var _visible = false,
             _restPos = new paper.Point(-200, -200),
-            _grp = new paper.Group([_path]),
+            _grp = new paper.Group([_path, _text]),
             _delta = _grp.position,
             _imgdelta = new paper.Point([_centerX, _centerY]),
             _currentPos = new paper.Point(0,0);
+        _text.content = _caption;
         _grp.visible = false;
         _grp.position = _restPos;
         var _res = {
@@ -145,17 +166,18 @@
             },
             select: function() {
                 _path.opacity = .8;
+                _text.visible = true;
             },
             unselect: function() {
                 _path.opacity = .5;
+                _text.visible = false;
             },
             destroy: function() {
                 _grp.remove();
             }
         }
         _img.onload = function() {
-            var _w = _img.width,
-                _h = _img.height;
+            var _h = _img.height;
             var _raster = new paper.Raster(_img);
             _raster.position = _imgdelta.add(_grp.position).subtract(_delta);
             _grp.addChild(_raster);
@@ -232,10 +254,13 @@
             _raster.scale(_ratio);
             _this.node_image = new paper.Group(_clip, _raster);
             _this.node_image.opacity = .9;
-            /* This is a workaround to allow clipping at group level */
+            /* This is a workaround to allow clipping at group level
+             * If opacity was set to 1, paper.js would merge all clipping groups in one (known bug).
+            */
             _this.node_image.clipped = true;
             _this.node_image.position = _this.paper_coords;
             _this.node_image.__representation = _this;
+            _clip.__representation = _this;
             paper.view.draw();
         }
         _image.src = _img;
@@ -580,6 +605,9 @@
         _model.set(_data);
         _this.redraw();
     });
+    this.editor_$.find("img").load(function() {
+        _this.redraw();
+    })
     this.editor_$.find(".Rk-Edit-Title")[0].focus();
 }
 
@@ -679,7 +707,7 @@
 Rkns.Renderer.NodeEditButton.prototype._init = function() {
     this.renderer.overlay_layer.activate();
     this.type = "Node-edit-button";
-    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, - 90, 30, 1, 'img/edit.png');
+    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, - 90, 30, 1, 'img/edit.png', this.renderer.renkan.l10n.caption_edit);
 }
 
 Rkns.Renderer.NodeEditButton.prototype.moveTo = function(_pos) {
@@ -722,7 +750,7 @@
 Rkns.Renderer.NodeRemoveButton.prototype._init = function() {
     this.renderer.overlay_layer.activate();
     this.type = "Node-remove-button";
-    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, -210, -90, 1, 'img/remove.png');
+    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, -210, -90, 1, 'img/remove.png', this.renderer.renkan.l10n.caption_remove);
 }
 
 Rkns.Renderer.NodeRemoveButton.prototype.moveTo = function(_pos) {
@@ -766,7 +794,7 @@
 Rkns.Renderer.NodeLinkButton.prototype._init = function() {
     this.renderer.overlay_layer.activate();
     this.type = "Node-link-button";
-    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, 30, 150, 1, 'img/link.png');
+    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, 30, 150, 1, 'img/link.png', this.renderer.renkan.l10n.caption_link);
 }
 
 Rkns.Renderer.NodeLinkButton.prototype.moveTo = function(_pos) {
@@ -803,7 +831,7 @@
 Rkns.Renderer.EdgeEditButton.prototype._init = function() {
     this.renderer.overlay_layer.activate();
     this.type = "Edge-edit-button";
-    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 90, 90, 1, 'img/edit.png');
+    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 90, 90, 1, 'img/edit.png', this.renderer.renkan.l10n.caption_edit);
 }
 
 Rkns.Renderer.EdgeEditButton.prototype.moveTo = function(_pos) {
@@ -846,7 +874,7 @@
 Rkns.Renderer.EdgeRemoveButton.prototype._init = function() {
     this.renderer.overlay_layer.activate();
     this.type = "Edge-remove-button";
-    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 270, -90, 1, 'img/remove.png');
+    this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 270, -90, 1, 'img/remove.png', this.renderer.renkan.l10n.caption_remove);
 }
 Rkns.Renderer.EdgeRemoveButton.prototype.moveTo = function(_pos) {
     this.sector.moveTo(_pos);