mirror of
https://github.com/konvajs/konva.git
synced 2025-05-03 12:27:47 +08:00
added horizontal align logic back into the Text draw func
This commit is contained in:
parent
e279ea30b9
commit
aa4b0955c0
28
dist/kinetic-core.js
vendored
28
dist/kinetic-core.js
vendored
@ -3895,41 +3895,43 @@ Kinetic.Text = function(config) {
|
|||||||
this.dummyCanvas = document.createElement('canvas');
|
this.dummyCanvas = document.createElement('canvas');
|
||||||
this.shapeType = "Text";
|
this.shapeType = "Text";
|
||||||
this.boxShape = new Kinetic.Rect({});
|
this.boxShape = new Kinetic.Rect({});
|
||||||
|
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
this.textShape = new Kinetic.Shape({
|
this.textShape = new Kinetic.Shape({
|
||||||
drawFunc: function() {
|
drawFunc: function() {
|
||||||
var context = this.getContext();
|
var context = this.getContext();
|
||||||
|
var p = that.attrs.padding;
|
||||||
|
var lineHeightPx = that.attrs.lineHeight * that.getTextHeight();
|
||||||
|
var textArr = that.textArr;
|
||||||
|
|
||||||
// sync appliedShadow flag with boxShape
|
// sync appliedShadow flag with boxShape
|
||||||
this.appliedShadow = that.boxShape.appliedShadow;
|
this.appliedShadow = that.boxShape.appliedShadow;
|
||||||
|
|
||||||
context.font = that.attrs.fontStyle + ' ' + that.attrs.fontSize + 'pt ' + that.attrs.fontFamily;
|
context.font = that.attrs.fontStyle + ' ' + that.attrs.fontSize + 'pt ' + that.attrs.fontFamily;
|
||||||
context.textBaseline = 'middle';
|
context.textBaseline = 'middle';
|
||||||
context.textAlign = 'left';
|
context.textAlign = 'left';
|
||||||
context.save();
|
context.save();
|
||||||
|
|
||||||
var p = that.attrs.padding;
|
|
||||||
|
|
||||||
var lineHeightPx = that.attrs.lineHeight * that.getTextHeight();
|
|
||||||
|
|
||||||
// horizontal align
|
|
||||||
context.translate(p, 0);
|
context.translate(p, 0);
|
||||||
|
|
||||||
// vertical align
|
|
||||||
context.translate(0, p + that.getTextHeight() / 2);
|
context.translate(0, p + that.getTextHeight() / 2);
|
||||||
|
|
||||||
// draw text lines
|
// draw text lines
|
||||||
var textArr = that.textArr;
|
|
||||||
for(var n = 0; n < textArr.length; n++) {
|
for(var n = 0; n < textArr.length; n++) {
|
||||||
var text = textArr[n];
|
var text = textArr[n];
|
||||||
|
|
||||||
|
// horizontal alignment
|
||||||
|
context.save();
|
||||||
|
if(that.attrs.align === 'right') {
|
||||||
|
context.translate(that.getBoxWidth() - that._getTextSize(text).width - p * 2, 0);
|
||||||
|
}
|
||||||
|
else if(that.attrs.align === 'center') {
|
||||||
|
context.translate((that.getBoxWidth() - that._getTextSize(text).width - p * 2) / 2, 0);
|
||||||
|
}
|
||||||
|
|
||||||
this.fillText(text);
|
this.fillText(text);
|
||||||
this.strokeText(text);
|
this.strokeText(text);
|
||||||
|
context.restore();
|
||||||
|
|
||||||
context.translate(0, lineHeightPx);
|
context.translate(0, lineHeightPx);
|
||||||
}
|
}
|
||||||
|
|
||||||
context.restore();
|
context.restore();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -3941,7 +3943,7 @@ Kinetic.Text = function(config) {
|
|||||||
this.add(this.boxShape);
|
this.add(this.boxShape);
|
||||||
this.add(this.textShape);
|
this.add(this.textShape);
|
||||||
|
|
||||||
// sync attrs
|
// sync attr event bindings
|
||||||
var attrs = ['width', 'height', 'cornerRadius', 'stroke', 'strokeWidth', 'fill', 'shadow', 'detectionType', 'textFill', 'textStroke', 'textStrokeWidth'];
|
var attrs = ['width', 'height', 'cornerRadius', 'stroke', 'strokeWidth', 'fill', 'shadow', 'detectionType', 'textFill', 'textStroke', 'textStrokeWidth'];
|
||||||
var that = this;
|
var that = this;
|
||||||
for(var n = 0; n < attrs.length; n++) {
|
for(var n = 0; n < attrs.length; n++) {
|
||||||
|
2
dist/kinetic-core.min.js
vendored
2
dist/kinetic-core.min.js
vendored
File diff suppressed because one or more lines are too long
@ -26,41 +26,43 @@ Kinetic.Text = function(config) {
|
|||||||
this.dummyCanvas = document.createElement('canvas');
|
this.dummyCanvas = document.createElement('canvas');
|
||||||
this.shapeType = "Text";
|
this.shapeType = "Text";
|
||||||
this.boxShape = new Kinetic.Rect({});
|
this.boxShape = new Kinetic.Rect({});
|
||||||
|
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
this.textShape = new Kinetic.Shape({
|
this.textShape = new Kinetic.Shape({
|
||||||
drawFunc: function() {
|
drawFunc: function() {
|
||||||
var context = this.getContext();
|
var context = this.getContext();
|
||||||
|
var p = that.attrs.padding;
|
||||||
|
var lineHeightPx = that.attrs.lineHeight * that.getTextHeight();
|
||||||
|
var textArr = that.textArr;
|
||||||
|
|
||||||
// sync appliedShadow flag with boxShape
|
// sync appliedShadow flag with boxShape
|
||||||
this.appliedShadow = that.boxShape.appliedShadow;
|
this.appliedShadow = that.boxShape.appliedShadow;
|
||||||
|
|
||||||
context.font = that.attrs.fontStyle + ' ' + that.attrs.fontSize + 'pt ' + that.attrs.fontFamily;
|
context.font = that.attrs.fontStyle + ' ' + that.attrs.fontSize + 'pt ' + that.attrs.fontFamily;
|
||||||
context.textBaseline = 'middle';
|
context.textBaseline = 'middle';
|
||||||
context.textAlign = 'left';
|
context.textAlign = 'left';
|
||||||
context.save();
|
context.save();
|
||||||
|
|
||||||
var p = that.attrs.padding;
|
|
||||||
|
|
||||||
var lineHeightPx = that.attrs.lineHeight * that.getTextHeight();
|
|
||||||
|
|
||||||
// horizontal align
|
|
||||||
context.translate(p, 0);
|
context.translate(p, 0);
|
||||||
|
|
||||||
// vertical align
|
|
||||||
context.translate(0, p + that.getTextHeight() / 2);
|
context.translate(0, p + that.getTextHeight() / 2);
|
||||||
|
|
||||||
// draw text lines
|
// draw text lines
|
||||||
var textArr = that.textArr;
|
|
||||||
for(var n = 0; n < textArr.length; n++) {
|
for(var n = 0; n < textArr.length; n++) {
|
||||||
var text = textArr[n];
|
var text = textArr[n];
|
||||||
|
|
||||||
|
// horizontal alignment
|
||||||
|
context.save();
|
||||||
|
if(that.attrs.align === 'right') {
|
||||||
|
context.translate(that.getBoxWidth() - that._getTextSize(text).width - p * 2, 0);
|
||||||
|
}
|
||||||
|
else if(that.attrs.align === 'center') {
|
||||||
|
context.translate((that.getBoxWidth() - that._getTextSize(text).width - p * 2) / 2, 0);
|
||||||
|
}
|
||||||
|
|
||||||
this.fillText(text);
|
this.fillText(text);
|
||||||
this.strokeText(text);
|
this.strokeText(text);
|
||||||
|
context.restore();
|
||||||
|
|
||||||
context.translate(0, lineHeightPx);
|
context.translate(0, lineHeightPx);
|
||||||
}
|
}
|
||||||
|
|
||||||
context.restore();
|
context.restore();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -72,7 +74,7 @@ Kinetic.Text = function(config) {
|
|||||||
this.add(this.boxShape);
|
this.add(this.boxShape);
|
||||||
this.add(this.textShape);
|
this.add(this.textShape);
|
||||||
|
|
||||||
// sync attrs
|
// sync attr event bindings
|
||||||
var attrs = ['width', 'height', 'cornerRadius', 'stroke', 'strokeWidth', 'fill', 'shadow', 'detectionType', 'textFill', 'textStroke', 'textStrokeWidth'];
|
var attrs = ['width', 'height', 'cornerRadius', 'stroke', 'strokeWidth', 'fill', 'shadow', 'detectionType', 'textFill', 'textStroke', 'textStrokeWidth'];
|
||||||
var that = this;
|
var that = this;
|
||||||
for(var n = 0; n < attrs.length; n++) {
|
for(var n = 0; n < attrs.length; n++) {
|
||||||
|
@ -2848,9 +2848,10 @@ Test.prototype.tests = {
|
|||||||
textFill: '#888',
|
textFill: '#888',
|
||||||
textStroke: '#333',
|
textStroke: '#333',
|
||||||
align: 'right',
|
align: 'right',
|
||||||
|
lineHeight: 1.2,
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 100,
|
height: 100,
|
||||||
padding: 40,
|
padding: 10,
|
||||||
shadow: {
|
shadow: {
|
||||||
color: 'black',
|
color: 'black',
|
||||||
blur: 1,
|
blur: 1,
|
||||||
@ -2884,14 +2885,20 @@ Test.prototype.tests = {
|
|||||||
test(text.getTextFill() == '#888', 'text fill should be #888');
|
test(text.getTextFill() == '#888', 'text fill should be #888');
|
||||||
test(text.getTextStroke() == '#333', 'text fill should be #333');
|
test(text.getTextStroke() == '#333', 'text fill should be #333');
|
||||||
test(text.getAlign() === 'right', 'text should be aligned right');
|
test(text.getAlign() === 'right', 'text should be aligned right');
|
||||||
|
test(text.getLineHeight() === 1.2, 'line height should be 1.2');
|
||||||
test(text.getWidth() === 400, 'width should be 400');
|
test(text.getWidth() === 400, 'width should be 400');
|
||||||
test(text.getHeight() === 100, 'height should be 100');
|
test(text.getHeight() === 100, 'height should be 100');
|
||||||
test(text.getPadding() === 40, 'padding should be 40');
|
test(text.getPadding() === 10, 'padding should be 10');
|
||||||
test(text.getShadow().color === 'black', 'text box shadow color should be black');
|
test(text.getShadow().color === 'black', 'text box shadow color should be black');
|
||||||
test(text.getCornerRadius() === 10, 'text box corner radius should be 10');
|
test(text.getCornerRadius() === 10, 'text box corner radius should be 10');
|
||||||
test(text.getDraggable() === true, 'text should be draggable');
|
test(text.getDraggable() === true, 'text should be draggable');
|
||||||
test(text.getDetectionType() === 'path', 'text detection type should be path');
|
test(text.getDetectionType() === 'path', 'text detection type should be path');
|
||||||
|
|
||||||
|
test(text.getBoxWidth() === 400, 'box width should be 400');
|
||||||
|
test(text.getBoxHeight() === 100, 'box height should be 100');
|
||||||
|
test(text.getTextWidth() > 0, 'text width should be greater than 0');
|
||||||
|
test(text.getTextHeight() > 0, 'text height should be greater than 0');
|
||||||
|
|
||||||
text.setX(1);
|
text.setX(1);
|
||||||
text.setY(2);
|
text.setY(2);
|
||||||
text.setStroke('orange');
|
text.setStroke('orange');
|
||||||
@ -2935,7 +2942,7 @@ Test.prototype.tests = {
|
|||||||
test(text.getDetectionType() === 'pixel', 'text detection type should be pixel');
|
test(text.getDetectionType() === 'pixel', 'text detection type should be pixel');
|
||||||
|
|
||||||
},
|
},
|
||||||
'*SHAPE - text multi line': function(containerId) {
|
'SHAPE - text multi line': function(containerId) {
|
||||||
var stage = new Kinetic.Stage({
|
var stage = new Kinetic.Stage({
|
||||||
container: containerId,
|
container: containerId,
|
||||||
width: 578,
|
width: 578,
|
||||||
@ -2956,6 +2963,7 @@ Test.prototype.tests = {
|
|||||||
textFill: '#555',
|
textFill: '#555',
|
||||||
width: 380,
|
width: 380,
|
||||||
padding: 20,
|
padding: 20,
|
||||||
|
align: 'center',
|
||||||
shadow: {
|
shadow: {
|
||||||
color: 'black',
|
color: 'black',
|
||||||
blur: 1,
|
blur: 1,
|
||||||
|
Loading…
Reference in New Issue
Block a user