UNPKG

aico-image-editor

Version:

Combine multiple image into and create single combined image

104 lines (95 loc) 3.75 kB
// Define the roundRect method on CanvasRenderingContext2D import fabric from 'fabric'; CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) { if (w < 2 * r) r = w / 2; if (h < 2 * r) r = h / 2; this.beginPath(); this.moveTo(x + r, y); this.arcTo(x + w, y, x + w, y + h, r); this.arcTo(x + w, y + h, x, y + h, r); this.arcTo(x, y + h, x, y, r); this.arcTo(x, y, x + w, y, r); this.closePath(); return this; }; // Extend fabric.Textbox to support rounded backgrounds fabric.Text.prototype._renderTextLinesBackground = function(ctx) { if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) { return; } var heightOfLine, lineLeftOffset, originalFill = ctx.fillStyle, line, lastColor, leftOffset = this._getLeftOffset(), lineTopOffset = this._getTopOffset(), boxStart = 0, boxWidth = 0, charBox, currentColor, path = this.path, drawStart; for (var i = 0, len = this._textLines.length; i < len; i++) { heightOfLine = this.getHeightOfLine(i); if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor', i)) { lineTopOffset += heightOfLine; continue; } line = this._textLines[i]; lineLeftOffset = this._getLineLeftOffset(i); boxWidth = 0; boxStart = 0; lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor'); for (var j = 0, jlen = line.length; j < jlen; j++) { charBox = this.__charBounds[i][j]; currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor'); if (path) { ctx.save(); ctx.translate(charBox.renderLeft, charBox.renderTop); ctx.rotate(charBox.angle); ctx.fillStyle = currentColor; currentColor && ctx.fillRect( -charBox.width / 2, -heightOfLine / this.lineHeight * (1 - this._fontSizeFraction), charBox.width, heightOfLine / this.lineHeight ); ctx.restore(); } else if (currentColor !== lastColor) { drawStart = leftOffset + lineLeftOffset + boxStart; if (this.direction === 'rtl') { drawStart = this.width - drawStart - boxWidth; } ctx.fillStyle = lastColor; lastColor && ctx.roundRect( drawStart - boxWidth/10, lineTopOffset, boxWidth + boxWidth/10 + boxWidth/10, (len - 1) === i ? heightOfLine / this.lineHeight : heightOfLine, heightOfLine/3 ).fill(); boxStart = charBox.left; boxWidth = charBox.width; lastColor = currentColor; } else { boxWidth += charBox.kernedWidth; } } if (currentColor && !path) { drawStart = leftOffset + lineLeftOffset + boxStart; if (this.direction === 'rtl') { drawStart = this.width - drawStart - boxWidth; } ctx.fillStyle = currentColor; ctx.roundRect( drawStart - boxWidth/10, lineTopOffset, boxWidth + boxWidth/10 + boxWidth/10, (len - 1) === i ? heightOfLine / this.lineHeight : heightOfLine, heightOfLine/3 ).fill(); } lineTopOffset += heightOfLine; } ctx.fillStyle = originalFill; // if there is text background color no // other shadows should be casted this._removeShadow(ctx); }