Skip to content

Commit

Permalink
Bug: canvas measureText function would return undefined
Browse files Browse the repository at this point in the history
wangyhzzz committed Jul 2, 2018

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent ff66da2 commit 8810f1c
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions cocos2d/core/label/CCSGLabelCanvasRenderCmd.js
Original file line number Diff line number Diff line change
@@ -118,6 +118,11 @@
return fontDesc;
};

proto._safeMeasureText = function (ctx, string) {
var metric = ctx.measureText(string);
return metric && metric.width || 0;
};

proto._measureText = function (ctx) {
return function(string) {
return ctx.measureText(string).width;
@@ -176,13 +181,13 @@
totalHeight = 0;
for (i = 0; i < paragraphedStrings.length; ++i) {
var j = 0;
var allWidth = this._labelContext.measureText(paragraphedStrings[i]).width;
var allWidth = this._safeMeasureText(this._labelContext, paragraphedStrings[i]);
textFragment = cc.TextUtils.fragmentText(paragraphedStrings[i],
allWidth,
canvasWidthNoMargin,
this._measureText(this._labelContext));
while(j < textFragment.length) {
var measureWidth = this._labelContext.measureText(textFragment[j]).width;
var measureWidth = this._safeMeasureText(this._labelContext, textFragment[j]);
maxLength = measureWidth;
totalHeight += this._getLineHeight();
++j;
@@ -228,8 +233,7 @@
var paragraphLength = [];

for (var i = 0; i < paragraphedStrings.length; ++i) {
var textMetric = ctx.measureText(paragraphedStrings[i]);
paragraphLength.push(textMetric.width);
paragraphLength.push(this._safeMeasureText(ctx, paragraphedStrings[i]));
}

return paragraphLength;
@@ -255,7 +259,7 @@
this._splitedStrings = [];
var canvasWidthNoMargin = this._canvasSize.width - 2 * this._getMargin();
for (i = 0; i < paragraphedStrings.length; ++i) {
var allWidth = this._labelContext.measureText(paragraphedStrings[i]).width;
var allWidth = this._safeMeasureText(this._labelContext, paragraphedStrings[i]);
var textFragment = cc.TextUtils.fragmentText(paragraphedStrings[i],
allWidth,
canvasWidthNoMargin,
@@ -284,7 +288,7 @@
var canvasSizeX = 0;
var canvasSizeY = 0;
for (i = 0; i < paragraphedStrings.length; ++i) {
var paraLength = ctx.measureText(paragraphedStrings[i]).width;
var paraLength = this._safeMeasureText(ctx, paragraphedStrings[i]);
canvasSizeX = canvasSizeX > paraLength ? canvasSizeX : paraLength;
}
canvasSizeY = this._splitedStrings.length * this._getLineHeight();

0 comments on commit 8810f1c

Please sign in to comment.