Fix text background not respecting text alignment.

This commit is contained in:
kangax 2011-07-26 14:57:01 -04:00
parent 6e8d9da003
commit e6be74571e
3 changed files with 58 additions and 6 deletions

View file

@ -1,3 +1,3 @@
/*! Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */
var fabric = fabric || { version: "0.4.6" };
var fabric = fabric || { version: "0.4.7" };

31
dist/all.js vendored
View file

@ -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;

View file

@ -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;