dzięki za odpowiedź

Mam jeszcze jedno pytanie. Na Canvasie rysuje sobie zdjęcie, w rogach zdjęcia rysuje kwadraty, za które można obracać i rozciągać zdjęcie.
funkcja rysująca to co znajduje się na canvasie
function initStage(){
counter = 0;
for (var img in images) {
rectangles[counter++].image = images[img];
}
kin = new Kinetic_2d("obraz");
var context = kin.getContext();
context.globalCompositeOperation = "destination-over";
kin.setDrawStage(function(){
kin.clear();
var mousePos = kin.getMousePos();
for (var n = 0; n < rectangles.length; n++) {
var thisRect = rectangles[n];
if (thisRect.dragging) {
thisRect.x = mousePos.x - offsetX;
thisRect.y = mousePos.y - offsetY;
}
if (thisRect.resizeCorner != "NONE") {
resizeRect(thisRect);
}
if(thisRect.actRot)
{
thisRect.obrot = true;
thisRect.angle = 15*Math.PI/180;
}
// draw resize boxes
/* to nie działa tak jak należy
context.save();
context.translate(getRotX(thisRect.x,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle),getRotY(thisRect.x,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle));
context.rotate(thisRect.angle);
drawResizeBox(0,0, thisRect, TOP_LEFT);
//context.translate(-getRotX(thisRect.x,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle),-getRotY(thisRect.x,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle));
//drawResizeBox(getRotX(thisRect.x,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle),getRotY(thisRect.x,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle), thisRect, TOP_LEFT);
context.restore();
context.save();
context.translate(getRotX(thisRect.x + (thisRect.width * thisRect.scaleX)-10,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle),getRotY(thisRect.x + (thisRect.width * thisRect.scaleX)-10,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle));
context.rotate(thisRect.angle);
drawResizeBox(0,0, thisRect, TOP_RIGHT);
context.restore();
context.save();
context.translate(getRotX(thisRect.x + (thisRect.width * thisRect.scaleX) - 10, thisRect.y + (thisRect.height * thisRect.scaleY) - 10,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle),getRotY(thisRect.x + (thisRect.width * thisRect.scaleX) - 10,thisRect.y + (thisRect.height * thisRect.scaleY) - 10,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle));
context.rotate(thisRect.angle);
drawResizeBox(0,0,thisRect, BOTTOM_RIGHT);
context.restore();
context.save();
context.translate(getRotX(thisRect.x,thisRect.y + (thisRect.height * thisRect.scaleY) - 10,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle), getRotY(thisRect.x,thisRect.y + (thisRect.height * thisRect.scaleY) - 10,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle));
context.rotate(thisRect.angle);
drawResizeBox(0,0,thisRect,BOTTOM_LEFT);
context.restore();
*/
// To działa, ale potrzebuje wersji która jest wyżej
drawResizeBox(thisRect.x, thisRect.y, thisRect, TOP_LEFT);
drawResizeBox(thisRect.x + (thisRect.width * thisRect.scaleX) - 10, thisRect.y, thisRect, TOP_RIGHT);
drawResizeBox(thisRect.x + (thisRect.width * thisRect.scaleX) - 10, thisRect.y + (thisRect.height * thisRect.scaleY) - 10, thisRect, BOTTOM_RIGHT);
drawResizeBox(thisRect.x, thisRect.y + (thisRect.height * thisRect.scaleY) - 10, thisRect, BOTTOM_LEFT);
if (thisRect.scaleX != 0 && thisRect.scaleY != 0) {
kin.beginRegion();
context.save();
context.translate(thisRect.x,thisRect.y);
if(thisRect.obrot)
{
context.translate(thisRect.width/2,thisRect.height/2);
context.rotate(thisRect.angle);
context.translate(-thisRect.width/2, -thisRect.height/2);
}
context.scale(thisRect.scaleX,thisRect.scaleY);
context.drawImage(thisRect.image, 0, 0, thisRect.width, thisRect.height);
context.beginPath();
context.rect(0, 0, thisRect.width, thisRect.height);
context.lineWidth=5;
context.strokeStyle = "black";
context.stroke();
context.stroke();
context.closePath();
kin.addRegionEventListener("onmousedown", function(){
thisRect.dragging = true;
var mousePos = kin.getMousePos();
offsetX = mousePos.x - thisRect.x;
offsetY = mousePos.y - thisRect.y;
// place this rect at the beginning of the rectangles
// array so that is is rendered on top
rectangles.splice(n, 1);
rectangles.splice(0, 0, thisRect);
});
kin.addRegionEventListener("onmouseup", function(){
thisRect.dragging = false;
});
kin.addRegionEventListener("onmouseover", function(){
document.body.style.cursor = "pointer";
});
kin.addRegionEventListener("onmouseout", function(){
document.body.style.cursor = "default";
});
context.restore();
kin.closeRegion();
}
}
}
// funkcja rysująca na zdjęciu kwadraciki
function drawResizeBox(x, y, rect, resizeCorner){
var context = kin.getContext();
kin.beginRegion();
context.beginPath();
context.fillStyle = "red";
context.rect(x, y, 10, 10);
context.fill();
context.closePath();
kin.addRegionEventListener("onmousedown", function(){
var mousePos = kin.getMousePos();
rect.resizeCorner = resizeCorner;
resizeStartX = mousePos.x;
resizeStartY = mousePos.y;
rect.actRot = true;
resizeOffsetX = rect.x - mousePos.x;
resizeOffsetY = rect.y - mousePos.y;
resizeStartScaleX = rect.scaleX;
resizeStartScaleY = rect.scaleY;
});
kin.addRegionEventListener("onmouseup", function(){
rect.resizeCorner = NONE;
rect.actRot = false;
});
kin.closeRegion();
}
Gdy wywołam funkcje drawResizeBox() np w taki sposób
context.save();
context.translate(getRotX(thisRect.x + (thisRect.width * thisRect.scaleX)-10,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle),getRotY(thisRect.x + (thisRect.width * thisRect.scaleX)-10,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle));
context.rotate(thisRect.angle);
drawResizeBox(0,0, thisRect, TOP_RIGHT);
context.restore();
To wszystko się rysuje, ale nie reaguje na zdarzenia, i nie wiem dlaczego, a potrzebuje wywołać to w ten sposób aby móc obracać zdjęciem, a "kwadraciki" by się odrysowały odwrócone w odpowiednich miejscach. Natomiast gdy wywołam funkcję drawResizeBox() w taki sposób:
drawResizeBox(getRotX(thisRect.x,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle),getRotY(thisRect.x,thisRect.y,thisRect.x+thisRect.width/2,thisRect.y+thisRect.height/2,thisRect.angle), thisRect, TOP_LEFT);
Zdarzenie mousedown się wykona,działa skalowanie, zaś mouseup, nie zajdzie (tak jakby zdjęcie przykleiło się do kursora

) i nic nie idzie zrobić jedynie wyjechać poza obszar canvasu.
Wywołanie drawResizeBox(thisRect.x, thisRect.y, thisRect, TOP_LEFT); działa dobrze, lecz potrzebuje wywołać to w sposób jak wyżej. Macie Państwo jakieś rady?