From e6be74571e4fb8bbd02fe5885e24f769b20ae8ea Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 26 Jul 2011 14:57:01 -0400 Subject: [PATCH] Fix text background not respecting text alignment. --- HEADER.js | 2 +- dist/all.js | 31 ++++++++++++++++++++++++++++--- lib/cufon.js | 31 +++++++++++++++++++++++++++++-- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/HEADER.js b/HEADER.js index 4f540164..3cd3a533 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,3 +1,3 @@ /*! Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.4.6" }; \ No newline at end of file +var fabric = fabric || { version: "0.4.7" }; \ No newline at end of file diff --git a/dist/all.js b/dist/all.js index 4295885f..76e09f8a 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.4.6" }; +var fabric = fabric || { version: "0.4.7" }; (function(){ var view = document.defaultView; @@ -767,11 +767,36 @@ Cufon.registerEngine('canvas', (function() { g.save(); g.fillStyle = options.backgroundColor; - var left = 0; + var left = 0, lineNum = 0; + + if (options.textAlign === 'right') { + g.translate(lineOffsets[lineNum], 0); + } + else if (options.textAlign === 'center') { + g.translate(lineOffsets[lineNum] / 2, 0); + } + for (var i = 0, l = chars.length; i < l; ++i) { if (chars[i] === '\n') { - g.translate(-left, -font.ascent - ((font.ascent / 5) * options.lineHeight)); + + lineNum++; + + var topOffset = -font.ascent - ((font.ascent / 5) * options.lineHeight); + + if (options.textAlign === 'right') { + g.translate(-width, topOffset); + g.translate(lineOffsets[lineNum], 0); + } + else if (options.textAlign === 'center') { + g.translate(-left - (lineOffsets[lineNum - 1] / 2), topOffset); + g.translate(lineOffsets[lineNum] / 2, 0); + } + else { + g.translate(-left, topOffset); + } + left = 0; + continue; } var glyph = font.glyphs[chars[i]] || font.missingGlyph; diff --git a/lib/cufon.js b/lib/cufon.js index 90a679d6..fd42dd0d 100644 --- a/lib/cufon.js +++ b/lib/cufon.js @@ -792,11 +792,38 @@ Cufon.registerEngine('canvas', (function() { g.save(); g.fillStyle = options.backgroundColor; - var left = 0; + var left = 0, lineNum = 0; + + if (options.textAlign === 'right') { + g.translate(lineOffsets[lineNum], 0); + } + else if (options.textAlign === 'center') { + g.translate(lineOffsets[lineNum] / 2, 0); + } + for (var i = 0, l = chars.length; i < l; ++i) { if (chars[i] === '\n') { - g.translate(-left, -font.ascent - ((font.ascent / 5) * options.lineHeight)); + + lineNum++; + + var topOffset = -font.ascent - ((font.ascent / 5) * options.lineHeight); + + if (options.textAlign === 'right') { + g.translate(-width, topOffset); + g.translate(lineOffsets[lineNum], 0); + } + else if (options.textAlign === 'center') { + // offset to the start of text in previous line AND half of its offset + // (essentially moving caret to the left edge of bounding box) + g.translate(-left - (lineOffsets[lineNum - 1] / 2), topOffset); + g.translate(lineOffsets[lineNum] / 2, 0); + } + else { + g.translate(-left, topOffset); + } + left = 0; + continue; } var glyph = font.glyphs[chars[i]] || font.missingGlyph;