diff --git a/src/document/Document.js b/src/document/Document.js index 42c405d8..f08c409f 100644 --- a/src/document/Document.js +++ b/src/document/Document.js @@ -57,17 +57,6 @@ var Document = this.Document = Base.extend({ return false; }, - getSelectionContext: function(param) { - var context = this._selectionContext; - if (!context) { - var canvas = CanvasProvider.getCanvas(this.size); - context = this._selectionContext = canvas.getContext('2d'); - context.strokeWidth = 1; - } - context.strokeStyle = context.fillStyle = param.layerColor; - return context; - }, - draw: function() { if (this.canvas) { // Initial tests conclude that clearing the canvas using clearRect @@ -77,21 +66,20 @@ var Document = this.Document = Base.extend({ this.size.width + 1, this.size.height + 1); this.context.save(); var param = { offset: new Point(0, 0) }; - for (var i = 0, l = this.layers.length; i < l; i++) { - // TODO: use Layer#color: - param.layerColor = '#4f7aff'; + for (var i = 0, l = this.layers.length; i < l; i++) Item.draw(this.layers[i], this.context, param); - } this.context.restore(); - - // If, during drawing, one of the paths was selected, there will - // be a selectionContext which needs to be composited onto the - // canvas: - if (this._selectionContext) { - var canvas = this._selectionContext.canvas; - this.context.drawImage(canvas, 0, 0); - CanvasProvider.returnCanvas(canvas); - this._selectionContext = null; + + // Draw the selection of the selected items in the document: + var selectedItems = this._selectedItems, + length = selectedItems.length; + if (length) { + this.context.strokeWidth = 1; + // Todo: use Layer#color + this.context.strokeStyle = this.context.fillStyle = '#4f7aff'; + param = { selection: true }; + for (var i = 0; i < length; i++) + selectedItems[i].draw(this.context, param); } } }, diff --git a/src/item/PlacedSymbol.js b/src/item/PlacedSymbol.js index ba85be27..2dbbf029 100644 --- a/src/item/PlacedSymbol.js +++ b/src/item/PlacedSymbol.js @@ -53,13 +53,14 @@ var PlacedSymbol = this.PlacedSymbol = Item.extend({ }, draw: function(ctx, param) { - ctx.save(); - this.matrix.applyToContext(ctx); - Item.draw(this.symbol.getDefinition(), ctx, param); - ctx.restore(); - if (this.getSelected()) { + if (param.selection) { Item.drawSelectedBounds(this.symbol._definition.getStrokeBounds(), - this.document.getSelectionContext(param), this.matrix); + ctx, this.matrix); + } else { + ctx.save(); + this.matrix.applyToContext(ctx); + Item.draw(this.symbol.getDefinition(), ctx, param); + ctx.restore(); } } diff --git a/src/item/Raster.js b/src/item/Raster.js index c3c35da0..c7b44aa9 100644 --- a/src/item/Raster.js +++ b/src/item/Raster.js @@ -202,15 +202,15 @@ var Raster = this.Raster = Item.extend({ }, draw: function(ctx, param) { - ctx.save(); - this.matrix.applyToContext(ctx); - ctx.drawImage(this._canvas || this._image, - -this._size.width / 2, -this._size.height / 2); - ctx.restore(); - if (this.getSelected()) { + if (param.selection) { var bounds = new Rectangle(this._size).setCenter(0, 0); - Item.drawSelectedBounds(bounds, - this.document.getSelectionContext(param), this.matrix); + Item.drawSelectedBounds(bounds, ctx, this.matrix); + } else { + ctx.save(); + this.matrix.applyToContext(ctx); + ctx.drawImage(this._canvas || this._image, + -this._size.width / 2, -this._size.height / 2); + ctx.restore(); } } }, new function() { diff --git a/src/path/Path.js b/src/path/Path.js index 710fd48b..e3f678d4 100644 --- a/src/path/Path.js +++ b/src/path/Path.js @@ -297,8 +297,8 @@ var Path = this.Path = PathItem.extend({ for (var i = 0; i < length; i++) { var segment = segments[i], point = segment._point, - x = point.x, - y = point.y, + x = point._x, + y = point._y, handleIn = segment._handleIn; if (i == 0) { ctx.moveTo(x, y); @@ -308,34 +308,34 @@ var Path = this.Path = PathItem.extend({ } else { ctx.bezierCurveTo( outX, outY, - handleIn.x + x, handleIn.y + y, + handleIn._x + x, handleIn._y + y, x, y ); } } handleOut = segment._handleOut; - outX = handleOut.x + x; - outY = handleOut.y + y; + outX = handleOut._x + x; + outY = handleOut._y + y; } if (this.closed && length > 1) { var segment = segments[0], point = segment._point, - x = point.x, - y = point.y, + x = point._x, + y = point._y, handleIn = segment._handleIn; - ctx.bezierCurveTo(outX, outY, handleIn.x + x, handleIn.y + y, x, y); + ctx.bezierCurveTo(outX, outY, handleIn._x + x, handleIn._y + y, x, y); ctx.closePath(); } - // If the path is part of a compound path or doesn't have a fill or - // stroke, there is no need to continue. - var fillColor = this.getFillColor(), - strokeColor = this.getStrokeColor(); - // If we are drawing onto the selection canvas, stroke the - // path and draw its handles. + // If we are drawing the selection of a path, stroke it and draw + // its handles: if (param.selection) { ctx.stroke(); - drawHandles(ctx, this.segments); + drawHandles(ctx, this._segments); } else { + // If the path is part of a compound path or doesn't have a fill or + // stroke, there is no need to continue. + var fillColor = this.getFillColor(), + strokeColor = this.getStrokeColor(); if (!param.compound && (fillColor || strokeColor)) { this.setContextStyles(ctx); ctx.save(); @@ -354,14 +354,6 @@ var Path = this.Path = PathItem.extend({ } ctx.restore(); } - // If the path is selected, draw it again on the separate - // selection canvas, which will be composited onto the canvas - // after drawing of the document is complete. - if (this.getSelected()) { - param.selection = true; - this.draw(this.document.getSelectionContext(param), param); - param.selection = false; - } } } };