Track current poly. Toggle between select and polyedit mode when clicking on the currently selected poly. polyedit mode does nothing now but show the points
git-svn-id: http://svg-edit.googlecode.com/svn/trunk@366 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
dfb022fe6f
commit
6cb95656e0
|
@ -472,6 +472,7 @@ function SvgCanvas(c)
|
||||||
var freehand_max_x = null;
|
var freehand_max_x = null;
|
||||||
var freehand_min_y = null;
|
var freehand_min_y = null;
|
||||||
var freehand_max_y = null;
|
var freehand_max_y = null;
|
||||||
|
var current_poly = null;
|
||||||
var current_poly_pts = [];
|
var current_poly_pts = [];
|
||||||
// this will hold all the currently selected elements
|
// this will hold all the currently selected elements
|
||||||
// default size of 1 until it needs to grow bigger
|
// default size of 1 until it needs to grow bigger
|
||||||
|
@ -926,7 +927,7 @@ function SvgCanvas(c)
|
||||||
canvas.clearSelection();
|
canvas.clearSelection();
|
||||||
canvas.addToSelection([t]);
|
canvas.addToSelection([t]);
|
||||||
}
|
}
|
||||||
// else the user is going to manipulate the selected elements
|
// else if it's a poly, go into polyedit mode in mouseup
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
canvas.clearSelection();
|
canvas.clearSelection();
|
||||||
|
@ -1079,6 +1080,9 @@ function SvgCanvas(c)
|
||||||
case "poly":
|
case "poly":
|
||||||
started = true;
|
started = true;
|
||||||
break;
|
break;
|
||||||
|
case "polyedit":
|
||||||
|
started = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
console.log("Unknown mode in mousedown: " + current_mode);
|
console.log("Unknown mode in mousedown: " + current_mode);
|
||||||
break;
|
break;
|
||||||
|
@ -1106,6 +1110,7 @@ function SvgCanvas(c)
|
||||||
if (selectedElements[0] != null) {
|
if (selectedElements[0] != null) {
|
||||||
var dx = x - start_x;
|
var dx = x - start_x;
|
||||||
var dy = y - start_y;
|
var dy = y - start_y;
|
||||||
|
if (dx != 0 || dy != 0) {
|
||||||
var ts = ["translate(",dx,",",dy,")"].join('');
|
var ts = ["translate(",dx,",",dy,")"].join('');
|
||||||
var len = selectedElements.length;
|
var len = selectedElements.length;
|
||||||
for (var i = 0; i < len; ++i) {
|
for (var i = 0; i < len; ++i) {
|
||||||
|
@ -1118,6 +1123,7 @@ function SvgCanvas(c)
|
||||||
selectedBBoxes[i] = box;
|
selectedBBoxes[i] = box;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "multiselect":
|
case "multiselect":
|
||||||
rubberBox.x.baseVal.value = Math.min(start_x,x);
|
rubberBox.x.baseVal.value = Math.min(start_x,x);
|
||||||
|
@ -1277,16 +1283,24 @@ function SvgCanvas(c)
|
||||||
// call("changed", selected);
|
// call("changed", selected);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var removeAllPointGripsFromPoly = function() {
|
||||||
// TODO: when a shape is moved via keystroke, it is not undo-able
|
// loop through and hide all pointgrips
|
||||||
// TODO: when a poly is selected, must loop through 'd' and populate current_poly_pts
|
var i = current_poly_pts.length/2;
|
||||||
// TODO: when a poly is selected, call addAllPointGripsToPoly
|
while(i--) {
|
||||||
|
document.getElementById("polypointgrip_"+i).setAttribute("display", "none");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
var addAllPointGripsToPoly = function() {
|
var addAllPointGripsToPoly = function() {
|
||||||
// TODO: loop through all points in poly
|
// loop through and hide all pointgrips
|
||||||
// TODO: for each point, find the pointgrip element
|
var i = current_poly_pts.length;
|
||||||
// TODO: set the pointgrip element's x,y
|
while(i) {
|
||||||
// TODO: set the pointgrip display to inline
|
i -= 2;
|
||||||
|
var grip = document.getElementById("polypointgrip_"+i/2);
|
||||||
|
grip.setAttribute("cx", current_poly_pts[i]);
|
||||||
|
grip.setAttribute("cy", current_poly_pts[i+1]);
|
||||||
|
grip.setAttribute("display", "inline");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var addPointGripToPoly = function(x,y) {
|
var addPointGripToPoly = function(x,y) {
|
||||||
|
@ -1317,7 +1331,7 @@ function SvgCanvas(c)
|
||||||
|
|
||||||
// TODO: set up mouse event handlers for dragging (mousedown to set polypoint drag mode)
|
// TODO: set up mouse event handlers for dragging (mousedown to set polypoint drag mode)
|
||||||
var grip = $('#polypointgrip_'+index);
|
var grip = $('#polypointgrip_'+index);
|
||||||
grip.mouseover( function() { console.log(this); this.setAttribute("stroke", "#F00"); } );
|
grip.mouseover( function() { this.setAttribute("stroke", "#F00"); } );
|
||||||
grip.mouseout( function() {this.setAttribute("stroke", "#00F"); } );
|
grip.mouseout( function() {this.setAttribute("stroke", "#00F"); } );
|
||||||
// grip.mousedown( function()
|
// grip.mousedown( function()
|
||||||
}
|
}
|
||||||
|
@ -1337,6 +1351,9 @@ function SvgCanvas(c)
|
||||||
{
|
{
|
||||||
if (!started) return;
|
if (!started) return;
|
||||||
|
|
||||||
|
var x = evt.pageX - container.parentNode.offsetLeft + container.parentNode.scrollLeft;
|
||||||
|
var y = evt.pageY - container.parentNode.offsetTop + container.parentNode.scrollTop;
|
||||||
|
|
||||||
started = false;
|
started = false;
|
||||||
var element = svgdoc.getElementById(getId());
|
var element = svgdoc.getElementById(getId());
|
||||||
var keep = false;
|
var keep = false;
|
||||||
|
@ -1368,13 +1385,59 @@ function SvgCanvas(c)
|
||||||
|
|
||||||
selectorManager.requestSelector(selected).showGrips(selected.tagName != "text");
|
selectorManager.requestSelector(selected).showGrips(selected.tagName != "text");
|
||||||
}
|
}
|
||||||
|
// if it was being dragged/resized
|
||||||
|
if (x != start_x || y != start_y) {
|
||||||
recalculateAllSelectedDimensions();
|
recalculateAllSelectedDimensions();
|
||||||
var len = selectedElements.length;
|
var len = selectedElements.length;
|
||||||
for(var i = 0; i < len; ++i) {
|
for (var i = 0; i < len; ++i) {
|
||||||
if (selectedElements[i] == null) break;
|
if (selectedElements[i] == null) break;
|
||||||
selectorManager.requestSelector(selectedElements[i]).resize(selectedBBoxes[i]);
|
selectorManager.requestSelector(selectedElements[i]).resize(selectedBBoxes[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// no change in position/size, so maybe we should move to polyedit
|
||||||
|
else {
|
||||||
|
// TODO: this causes a poly that was just going to be selected to go straight to polyedit
|
||||||
|
if (selectedElements[0].nodeName == "path" && selectedElements[1] == null) {
|
||||||
|
var t = evt.target;
|
||||||
|
if (current_poly == t) {
|
||||||
|
current_mode = "polyedit";
|
||||||
|
|
||||||
|
// recalculate current_poly_pts
|
||||||
|
current_poly_pts = [];
|
||||||
|
var segList = t.pathSegList;
|
||||||
|
var curx = segList.getItem(0).x, cury = segList.getItem(0).y;
|
||||||
|
current_poly_pts.push(curx);
|
||||||
|
current_poly_pts.push(cury);
|
||||||
|
var len = segList.numberOfItems;
|
||||||
|
for (var i = 1; i < len; ++i) {
|
||||||
|
var l = segList.getItem(i);
|
||||||
|
var x = l.x, y = l.y;
|
||||||
|
// polys can now be closed, skip Z segments
|
||||||
|
if (l.pathSegType == 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var type = l.pathSegType;
|
||||||
|
// current_poly_pts just holds the absolute coords
|
||||||
|
if (type == 4) {
|
||||||
|
curx = x;
|
||||||
|
cury = y;
|
||||||
|
} // type 4 (abs line)
|
||||||
|
else if (type == 5) {
|
||||||
|
curx += x;
|
||||||
|
cury += y;
|
||||||
|
} // type 5 (rel line)
|
||||||
|
current_poly_pts.push(curx);
|
||||||
|
current_poly_pts.push(cury);
|
||||||
|
} // for each segment
|
||||||
|
canvas.clearSelection();
|
||||||
|
addAllPointGripsToPoly();
|
||||||
|
} // going into polyedit mode
|
||||||
|
else {
|
||||||
|
current_poly = t;
|
||||||
|
}
|
||||||
|
} // no change in mouse position
|
||||||
|
}
|
||||||
|
}
|
||||||
// we return immediately from select so that the obj_num is not incremented
|
// we return immediately from select so that the obj_num is not incremented
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
|
@ -1451,9 +1514,6 @@ function SvgCanvas(c)
|
||||||
canvas.addToSelection([element]);
|
canvas.addToSelection([element]);
|
||||||
break;
|
break;
|
||||||
case "poly":
|
case "poly":
|
||||||
var x = evt.pageX - container.parentNode.offsetLeft + container.parentNode.scrollLeft;
|
|
||||||
var y = evt.pageY - container.parentNode.offsetTop + container.parentNode.scrollTop;
|
|
||||||
|
|
||||||
// set element to null here so that it is not removed nor finalized
|
// set element to null here so that it is not removed nor finalized
|
||||||
element = null;
|
element = null;
|
||||||
// continue to be set to true so that mouseMove happens
|
// continue to be set to true so that mouseMove happens
|
||||||
|
@ -1524,18 +1584,13 @@ function SvgCanvas(c)
|
||||||
poly.setAttribute("d", d_attr + "z");
|
poly.setAttribute("d", d_attr + "z");
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop through and hide all pointgrips
|
removeAllPointGripsFromPoly();
|
||||||
var i = current_poly_pts.length/2;
|
document.getElementById("poly_stretch_line").setAttribute("display", "none");
|
||||||
while(i--) {
|
|
||||||
console.log(i);
|
|
||||||
document.getElementById("polypointgrip_"+i).setAttribute("display", "none");
|
|
||||||
}
|
|
||||||
|
|
||||||
// this will signal to commit the poly
|
// this will signal to commit the poly
|
||||||
element = poly;
|
element = poly;
|
||||||
current_poly_pts = [];
|
current_poly_pts = [];
|
||||||
started = false;
|
started = false;
|
||||||
document.getElementById("poly_stretch_line").setAttribute("display", "none");
|
|
||||||
}
|
}
|
||||||
// else, create a new point, append to pts array, update path element
|
// else, create a new point, append to pts array, update path element
|
||||||
else {
|
else {
|
||||||
|
@ -1559,6 +1614,13 @@ function SvgCanvas(c)
|
||||||
keep = true;
|
keep = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "polyedit":
|
||||||
|
keep = true;
|
||||||
|
element = null;
|
||||||
|
current_mode = "select";
|
||||||
|
removeAllPointGripsFromPoly();
|
||||||
|
canvas.addToSelection([evt.target]);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
console.log("Unknown mode in mouseup: " + current_mode);
|
console.log("Unknown mode in mouseup: " + current_mode);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue