@galacean/effects-plugin-rich-text 2.8.0-alpha.5 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Description: Galacean Effects player rich text plugin
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 云垣
6
- * Version: v2.8.0-alpha.5
6
+ * Version: v2.8.0
7
7
  */
8
8
 
9
9
  'use strict';
@@ -436,8 +436,11 @@ var RichTextLayout = /*#__PURE__*/ function() {
436
436
  this.width = size ? size[0] : 100;
437
437
  this.height = size ? size[1] : 100;
438
438
  this.wrapEnabled = wrapEnabled;
439
- this.maxTextWidth = maxTextWidth;
440
- this.maxTextHeight = maxTextHeight;
439
+ // 兜底,避免 0/负数/NaN/Infinity
440
+ var safeMaxW = Number.isFinite(maxTextWidth) ? maxTextWidth : 0;
441
+ var safeMaxH = Number.isFinite(maxTextHeight) ? maxTextHeight : 0;
442
+ this.maxTextWidth = Math.max(1, safeMaxW);
443
+ this.maxTextHeight = Math.max(1, safeMaxH);
441
444
  this.sizeMode = sizeMode;
442
445
  }
443
446
  var _proto = RichTextLayout.prototype;
@@ -519,7 +522,7 @@ var RichTextLayout = /*#__PURE__*/ function() {
519
522
  */ _proto.getOffsetXRich = function getOffsetXRich(style, maxWidth, contentW) {
520
523
  switch(this.textAlign){
521
524
  case EFFECTS.spec.TextAlignment.left:
522
- return style.outlineWidth;
525
+ return style.outlineWidth * style.fontScale;
523
526
  case EFFECTS.spec.TextAlignment.middle:
524
527
  return (maxWidth - contentW) / 2;
525
528
  case EFFECTS.spec.TextAlignment.right:
@@ -887,14 +890,15 @@ var RichTextLayout = /*#__PURE__*/ function() {
887
890
  var safeDiv = function(a, b) {
888
891
  return Math.abs(b) > 1e-5 ? a / b : 1;
889
892
  };
890
- var availableW = Math.max(1, layout.maxTextWidth || sizeResult.canvasWidth);
891
- var availableH = Math.max(1, layout.maxTextHeight || sizeResult.canvasHeight);
893
+ // 用像素空间计算
894
+ var frameWpx = layout.maxTextWidth * style.fontScale;
895
+ var frameHpx = layout.maxTextHeight * style.fontScale;
892
896
  var _sizeResult_contentWidth;
893
- var contentW = Math.max(1, (_sizeResult_contentWidth = sizeResult.contentWidth) != null ? _sizeResult_contentWidth : sizeResult.canvasWidth);
897
+ var contentWpx = Math.max(1, (_sizeResult_contentWidth = sizeResult.contentWidth) != null ? _sizeResult_contentWidth : sizeResult.canvasWidth);
894
898
  var _sizeResult_bboxHeight;
895
- var contentH = Math.max(1, (_sizeResult_bboxHeight = sizeResult.bboxHeight) != null ? _sizeResult_bboxHeight : sizeResult.canvasHeight);
896
- // 只缩小不放大
897
- var s = Math.min(1, safeDiv(availableW, contentW), safeDiv(availableH, contentH));
899
+ var contentHpx = Math.max(1, (_sizeResult_bboxHeight = sizeResult.bboxHeight) != null ? _sizeResult_bboxHeight : sizeResult.canvasHeight);
900
+ // 只缩小不放大(基于像素空间计算)
901
+ var s = Math.min(1, safeDiv(frameWpx, contentWpx), safeDiv(frameHpx, contentHpx));
898
902
  // 浮点精度处理
899
903
  if (s > 0.9999) {
900
904
  return {
@@ -974,13 +978,15 @@ var RichTextLayout = /*#__PURE__*/ function() {
974
978
  function RichHorizontalAlignStrategyImpl() {}
975
979
  var _proto = RichHorizontalAlignStrategyImpl.prototype;
976
980
  _proto.getHorizontalOffsets = function getHorizontalOffsets(lines, sizeResult, overflowResult, layout, style) {
977
- var frameW = layout.maxTextWidth;
978
- var compX = sizeResult.baselineCompensationX || 0;
979
- // 统一用 frame 宽做容器
981
+ var _sizeResult_containerWidth;
982
+ var containerWidthPx = (_sizeResult_containerWidth = sizeResult.containerWidth) != null ? _sizeResult_containerWidth : layout.maxTextWidth * style.fontScale;
983
+ var _sizeResult_baselineCompensationX;
984
+ var compX = (_sizeResult_baselineCompensationX = sizeResult.baselineCompensationX) != null ? _sizeResult_baselineCompensationX : 0;
985
+ // 使用像素单位的容器宽度
980
986
  var baseOffsets = lines.map(function(line) {
981
- return layout.getOffsetXRich(style, frameW, line.width);
987
+ return layout.getOffsetXRich(style, containerWidthPx, line.width);
982
988
  });
983
- // visible 叠加水平补偿,clip/display 不加
989
+ // visible 模式下使用 baseOffset + baselineCompensationX
984
990
  var lineOffsets = layout.overflow === EFFECTS.spec.TextOverflow.visible ? baseOffsets.map(function(x) {
985
991
  return x + compX;
986
992
  }) : baseOffsets;
@@ -998,10 +1004,8 @@ var RichTextLayout = /*#__PURE__*/ function() {
998
1004
  function RichVerticalAlignStrategyImpl() {}
999
1005
  var _proto = RichVerticalAlignStrategyImpl.prototype;
1000
1006
  _proto.getVerticalOffsets = function getVerticalOffsets(lines, sizeResult, overflowResult, layout, style, singleLineHeight) {
1001
- var lineHeights = lines.map(function(line) {
1002
- return line.lineHeight;
1003
- });
1004
- var compY = sizeResult.baselineCompensationY || 0;
1007
+ var _sizeResult_baselineCompensationY;
1008
+ var compY = (_sizeResult_baselineCompensationY = sizeResult.baselineCompensationY) != null ? _sizeResult_baselineCompensationY : 0;
1005
1009
  var baselineY = 0;
1006
1010
  if (lines.length === 0) {
1007
1011
  return {
@@ -1013,7 +1017,7 @@ var RichTextLayout = /*#__PURE__*/ function() {
1013
1017
  case EFFECTS.spec.TextOverflow.visible:
1014
1018
  {
1015
1019
  // frame-based 计算
1016
- var frameH = layout.maxTextHeight;
1020
+ var frameHpx = layout.maxTextHeight * style.fontScale;
1017
1021
  var _sizeResult_bboxTop;
1018
1022
  var bboxTop = (_sizeResult_bboxTop = sizeResult.bboxTop) != null ? _sizeResult_bboxTop : 0;
1019
1023
  var _sizeResult_bboxHeight, _sizeResult_bboxBottom;
@@ -1027,10 +1031,10 @@ var RichTextLayout = /*#__PURE__*/ function() {
1027
1031
  baselineYFrame = -bboxTop;
1028
1032
  break;
1029
1033
  case EFFECTS.spec.TextVerticalAlign.middle:
1030
- baselineYFrame = (frameH - bboxHeight) / 2 - bboxTop;
1034
+ baselineYFrame = (frameHpx - bboxHeight) / 2 - bboxTop;
1031
1035
  break;
1032
1036
  case EFFECTS.spec.TextVerticalAlign.bottom:
1033
- baselineYFrame = frameH - bboxHeight - bboxTop;
1037
+ baselineYFrame = frameHpx - bboxHeight - bboxTop;
1034
1038
  break;
1035
1039
  }
1036
1040
  baselineY = baselineYFrame + compY; // 关键:叠加"向下移动 E"
@@ -1038,26 +1042,8 @@ var RichTextLayout = /*#__PURE__*/ function() {
1038
1042
  }
1039
1043
  case EFFECTS.spec.TextOverflow.clip:
1040
1044
  {
1041
- var firstLine = lines[0];
1042
- if (firstLine) {
1043
- var _Math;
1044
- var richSizes = firstLine.richOptions.map(function(o) {
1045
- return o.fontSize;
1046
- });
1047
- var firstMax = (_Math = Math).max.apply(_Math, [].concat(richSizes.length ? richSizes : [
1048
- style.fontSize
1049
- ]));
1050
- var fontSizeForOffset = firstMax * style.fontScale * singleLineHeight;
1051
- baselineY = layout.getOffsetYRich(style, lineHeights, fontSizeForOffset) + compY;
1052
- } else {
1053
- baselineY = layout.getOffsetYRich(style, lineHeights, style.fontSize * style.fontScale) + compY;
1054
- }
1055
- break;
1056
- }
1057
- case EFFECTS.spec.TextOverflow.display:
1058
- {
1059
- // display 垂直对齐改为基于 bbox,而不是 getOffsetYRich
1060
- var frameH1 = layout.maxTextHeight;
1045
+ // clip 垂直对齐逻辑与 display 保持一致(基于 bbox 的几何模型)
1046
+ var frameHpx1 = layout.maxTextHeight * style.fontScale;
1061
1047
  // 用缩放后的行数据重建 baselines 和 bbox
1062
1048
  var baselines = [
1063
1049
  0
@@ -1065,7 +1051,6 @@ var RichTextLayout = /*#__PURE__*/ function() {
1065
1051
  for(var i = 1; i < lines.length; i++){
1066
1052
  baselines[i] = baselines[i - 1] + lines[i].lineHeight;
1067
1053
  }
1068
- // 计算 bboxTop / bboxBottom(使用行的测量值 lineAscent/lineDescent)
1069
1054
  var bboxTop1 = Infinity;
1070
1055
  var bboxBottom1 = -Infinity;
1071
1056
  for(var i1 = 0; i1 < lines.length; i1++){
@@ -1077,26 +1062,64 @@ var RichTextLayout = /*#__PURE__*/ function() {
1077
1062
  bboxBottom1 = Math.max(bboxBottom1, baselines[i1] + desc);
1078
1063
  }
1079
1064
  var bboxHeight1 = bboxBottom1 - bboxTop1;
1065
+ var baselineClipY = 0;
1066
+ switch(layout.textVerticalAlign){
1067
+ case EFFECTS.spec.TextVerticalAlign.top:
1068
+ baselineClipY = -bboxTop1;
1069
+ break;
1070
+ case EFFECTS.spec.TextVerticalAlign.middle:
1071
+ baselineClipY = (frameHpx1 - bboxHeight1) / 2 - bboxTop1;
1072
+ break;
1073
+ case EFFECTS.spec.TextVerticalAlign.bottom:
1074
+ baselineClipY = frameHpx1 - bboxHeight1 - bboxTop1;
1075
+ break;
1076
+ }
1077
+ baselineY = baselineClipY + compY;
1078
+ break;
1079
+ }
1080
+ case EFFECTS.spec.TextOverflow.display:
1081
+ {
1082
+ // display 垂直对齐改为基于 bbox,而不是 getOffsetYRich
1083
+ var frameHpx2 = layout.maxTextHeight * style.fontScale;
1084
+ // 用缩放后的行数据重建 baselines 和 bbox
1085
+ var baselines1 = [
1086
+ 0
1087
+ ];
1088
+ for(var i2 = 1; i2 < lines.length; i2++){
1089
+ baselines1[i2] = baselines1[i2 - 1] + lines[i2].lineHeight;
1090
+ }
1091
+ // 计算 bboxTop / bboxBottom(使用行的测量值 lineAscent/lineDescent)
1092
+ var bboxTop2 = Infinity;
1093
+ var bboxBottom2 = -Infinity;
1094
+ for(var i3 = 0; i3 < lines.length; i3++){
1095
+ var _lines_i_lineAscent1;
1096
+ var asc1 = (_lines_i_lineAscent1 = lines[i3].lineAscent) != null ? _lines_i_lineAscent1 : 0;
1097
+ var _lines_i_lineDescent1;
1098
+ var desc1 = (_lines_i_lineDescent1 = lines[i3].lineDescent) != null ? _lines_i_lineDescent1 : 0;
1099
+ bboxTop2 = Math.min(bboxTop2, baselines1[i3] - asc1);
1100
+ bboxBottom2 = Math.max(bboxBottom2, baselines1[i3] + desc1);
1101
+ }
1102
+ var bboxHeight2 = bboxBottom2 - bboxTop2;
1080
1103
  // 计算 display 模式的基线
1081
1104
  var baselineDisplayY = 0;
1082
1105
  switch(layout.textVerticalAlign){
1083
1106
  case EFFECTS.spec.TextVerticalAlign.top:
1084
- baselineDisplayY = -bboxTop1;
1107
+ baselineDisplayY = -bboxTop2;
1085
1108
  break;
1086
1109
  case EFFECTS.spec.TextVerticalAlign.middle:
1087
- baselineDisplayY = (frameH1 - bboxHeight1) / 2 - bboxTop1;
1110
+ baselineDisplayY = (frameHpx2 - bboxHeight2) / 2 - bboxTop2;
1088
1111
  break;
1089
1112
  case EFFECTS.spec.TextVerticalAlign.bottom:
1090
- baselineDisplayY = frameH1 - bboxHeight1 - bboxTop1;
1113
+ baselineDisplayY = frameHpx2 - bboxHeight2 - bboxTop2;
1091
1114
  break;
1092
1115
  }
1093
1116
  // 后续 lineYOffsets 保持按行高累计
1094
1117
  var lineYOffsets = [];
1095
1118
  var currentY = baselineDisplayY;
1096
- for(var i2 = 0; i2 < lines.length; i2++){
1119
+ for(var i4 = 0; i4 < lines.length; i4++){
1097
1120
  lineYOffsets.push(currentY);
1098
- if (i2 < lines.length - 1) {
1099
- currentY += lines[i2 + 1].lineHeight;
1121
+ if (i4 < lines.length - 1) {
1122
+ currentY += lines[i4 + 1].lineHeight;
1100
1123
  }
1101
1124
  }
1102
1125
  return {
@@ -1451,9 +1474,12 @@ exports.RichTextComponent = /*#__PURE__*/ function(MaskableGraphic) {
1451
1474
  // 使用 this.canvasSize 统一设置画布尺寸
1452
1475
  EFFECTS.assertExist(this.canvasSize);
1453
1476
  var _this_canvasSize = this.canvasSize, canvasWidth = _this_canvasSize.x, canvasHeight = _this_canvasSize.y;
1454
- layout.width = canvasWidth / this.textStyle.fontScale;
1455
- layout.height = canvasHeight / this.textStyle.fontScale;
1456
- this.renderToTexture(canvasWidth, canvasHeight, flipY, function(context) {
1477
+ // 确保canvas宽高至少为1
1478
+ var safeW = Math.max(1, Math.ceil(canvasWidth));
1479
+ var safeH = Math.max(1, Math.ceil(canvasHeight));
1480
+ layout.width = safeW / this.textStyle.fontScale;
1481
+ layout.height = safeH / this.textStyle.fontScale;
1482
+ this.renderToTexture(safeW, safeH, flipY, function(context) {
1457
1483
  // 步骤6: 绘制文本
1458
1484
  _this.drawTextWithStrategies(context, wrapResult.lines, horizontalAlignResult, TextVerticalAlignResult, overflowResult, _this.textStyle);
1459
1485
  }, {
@@ -1468,12 +1494,15 @@ exports.RichTextComponent = /*#__PURE__*/ function(MaskableGraphic) {
1468
1494
  }
1469
1495
  var _this_size = this.size, _this_size_x = _this_size.x, x = _this_size_x === void 0 ? 1 : _this_size_x, _this_size_y = _this_size.y, y = _this_size_y === void 0 ? 1 : _this_size_y;
1470
1496
  var layout = this.textLayout;
1497
+ var fontScale = this.textStyle.fontScale || 1;
1498
+ // 防止 frameW / frameH 为 0
1499
+ var frameW = Math.max(1, layout.maxTextWidth || 0);
1500
+ var frameH = Math.max(1, layout.maxTextHeight || 0);
1471
1501
  switch(layout.overflow){
1472
1502
  case EFFECTS.spec.TextOverflow.visible:
1473
1503
  {
1474
- var _Math;
1475
- var frameW = layout.maxTextWidth;
1476
- var frameH = layout.maxTextHeight;
1504
+ var frameWpx = frameW * fontScale;
1505
+ var frameHpx = frameH * fontScale;
1477
1506
  var _sizeResult_bboxTop;
1478
1507
  var bboxTop = (_sizeResult_bboxTop = sizeResult.bboxTop) != null ? _sizeResult_bboxTop : 0;
1479
1508
  var _sizeResult_bboxHeight, _sizeResult_bboxBottom;
@@ -1487,17 +1516,17 @@ exports.RichTextComponent = /*#__PURE__*/ function(MaskableGraphic) {
1487
1516
  baselineYFrame = -bboxTop;
1488
1517
  break;
1489
1518
  case EFFECTS.spec.TextVerticalAlign.middle:
1490
- baselineYFrame = (frameH - bboxHeight) / 2 - bboxTop;
1519
+ baselineYFrame = (frameHpx - bboxHeight) / 2 - bboxTop;
1491
1520
  break;
1492
1521
  case EFFECTS.spec.TextVerticalAlign.bottom:
1493
- baselineYFrame = frameH - bboxHeight - bboxTop;
1522
+ baselineYFrame = frameHpx - bboxHeight - bboxTop;
1494
1523
  break;
1495
1524
  }
1496
1525
  // 上下溢出检测
1497
1526
  var contentTopInFrame = baselineYFrame + bboxTop;
1498
1527
  var contentBottomInFrame = baselineYFrame + bboxBottom;
1499
1528
  var overflowTop = Math.max(0, -contentTopInFrame);
1500
- var overflowBottom = Math.max(0, contentBottomInFrame - frameH);
1529
+ var overflowBottom = Math.max(0, contentBottomInFrame - frameHpx);
1501
1530
  // 垂直扩张
1502
1531
  var expandTop = overflowTop;
1503
1532
  var expandBottom = overflowBottom;
@@ -1528,56 +1557,78 @@ exports.RichTextComponent = /*#__PURE__*/ function(MaskableGraphic) {
1528
1557
  var compY = expandTop;
1529
1558
  // 水平扩张
1530
1559
  var lines = sizeResult.lines || [];
1560
+ // 1. 先按 frameWpx 计算每行的对齐起点(逻辑对齐)
1531
1561
  var xOffsetsFrame = lines.map(function(line) {
1532
- return layout.getOffsetXRich(_this.textStyle, frameW, line.width);
1562
+ return layout.getOffsetXRich(_this.textStyle, frameWpx, line.width);
1533
1563
  });
1534
- var leftMost = xOffsetsFrame.length > 0 ? (_Math = Math).min.apply(_Math, [].concat(xOffsetsFrame)) : 0;
1535
- var ex = Math.max(0, -leftMost);
1536
- var expandLeft = ex;
1537
- var expandRight = ex;
1538
- var finalW = frameW + expandLeft + expandRight;
1539
- var finalH = frameH + expandTop + expandBottom;
1564
+ // 2. 用对齐后的偏移 + 行宽算出内容的左右边界
1565
+ var contentMinX = Infinity;
1566
+ var contentMaxX = -Infinity;
1567
+ for(var i = 0; i < lines.length; i++){
1568
+ var _xOffsetsFrame_i;
1569
+ var off = (_xOffsetsFrame_i = xOffsetsFrame[i]) != null ? _xOffsetsFrame_i : 0;
1570
+ var _lines_i_width;
1571
+ var w = (_lines_i_width = lines[i].width) != null ? _lines_i_width : 0; // 像素宽
1572
+ contentMinX = Math.min(contentMinX, off);
1573
+ contentMaxX = Math.max(contentMaxX, off + w);
1574
+ }
1575
+ if (!isFinite(contentMinX)) {
1576
+ contentMinX = 0;
1577
+ }
1578
+ if (!isFinite(contentMaxX)) {
1579
+ contentMaxX = 0;
1580
+ }
1581
+ // 3. 计算内容相对于 frame 的越界量
1582
+ var overflowLeft = Math.max(0, -contentMinX); // 内容左边 < 0
1583
+ var overflowRight = Math.max(0, contentMaxX - frameWpx); // 内容右边 > frameWpx?
1584
+ // 4. 让 canvas 左右都扩张到能容下整个内容 bbox
1585
+ var expandLeft = overflowLeft;
1586
+ var expandRight = overflowRight;
1587
+ // 5. 最终 canvas 宽高
1588
+ var finalWpx = Math.ceil(frameWpx + expandLeft + expandRight);
1589
+ var finalHpx = Math.ceil(frameHpx + expandTop + expandBottom);
1540
1590
  // 记录补偿,供垂直对齐策略叠加
1541
1591
  sizeResult.baselineCompensationX = expandLeft;
1542
1592
  sizeResult.baselineCompensationY = compY;
1543
- sizeResult.canvasWidth = finalW;
1544
- sizeResult.canvasHeight = finalH;
1545
- this.canvasSize = new EFFECTS.math.Vector2(finalW, finalH);
1593
+ // containerWidth 用 frameWpx,而不是 finalWpx
1594
+ sizeResult.containerWidth = frameWpx;
1595
+ sizeResult.canvasWidth = finalWpx;
1596
+ sizeResult.canvasHeight = finalHpx;
1597
+ this.canvasSize = new EFFECTS.math.Vector2(finalWpx, finalHpx);
1546
1598
  var _this_size1;
1547
1599
  var _ref = (_this_size1 = this.size) != null ? _this_size1 : this.item.transform.size, _ref_x = _ref.x, x1 = _ref_x === void 0 ? 1 : _ref_x, _ref_y = _ref.y, y1 = _ref_y === void 0 ? 1 : _ref_y;
1548
- this.item.transform.size.set(x1 * finalW * this.SCALE_FACTOR * this.SCALE_FACTOR, y1 * finalH * this.SCALE_FACTOR * this.SCALE_FACTOR);
1549
- this.size = this.item.transform.size.clone();
1600
+ this.item.transform.size.set(x1 * finalWpx * this.SCALE_FACTOR * this.SCALE_FACTOR, y1 * finalHpx * this.SCALE_FACTOR * this.SCALE_FACTOR);
1550
1601
  this.initialized = true;
1551
1602
  break;
1552
1603
  }
1553
1604
  case EFFECTS.spec.TextOverflow.clip:
1554
1605
  {
1555
- var frameW1 = layout.maxTextWidth;
1556
- var frameH1 = layout.maxTextHeight;
1606
+ var frameWpx1 = frameW * fontScale;
1607
+ var frameHpx1 = frameH * fontScale;
1557
1608
  // 直接使用 frame 尺寸作为画布尺寸
1558
- sizeResult.canvasWidth = frameW1;
1559
- sizeResult.canvasHeight = frameH1;
1609
+ sizeResult.canvasWidth = frameWpx1;
1610
+ sizeResult.canvasHeight = frameHpx1;
1560
1611
  // clip 模式不需要任何补偿
1561
1612
  sizeResult.baselineCompensationX = 0;
1562
1613
  sizeResult.baselineCompensationY = 0;
1563
1614
  // 设置 canvas 和节点变换
1564
- this.canvasSize = new EFFECTS.math.Vector2(frameW1, frameH1);
1615
+ this.canvasSize = new EFFECTS.math.Vector2(frameWpx1, frameHpx1);
1565
1616
  // 把 layout 的尺寸更新为 frame 尺寸
1566
- layout.width = frameW1 / this.textStyle.fontScale;
1567
- layout.height = frameH1 / this.textStyle.fontScale;
1617
+ layout.width = frameW;
1618
+ layout.height = frameH;
1568
1619
  var _this_size2;
1569
1620
  var _ref1 = (_this_size2 = this.size) != null ? _this_size2 : this.item.transform.size, _ref_x1 = _ref1.x, x2 = _ref_x1 === void 0 ? 1 : _ref_x1, _ref_y1 = _ref1.y, y2 = _ref_y1 === void 0 ? 1 : _ref_y1;
1570
- this.item.transform.size.set(x2 * frameW1 * this.SCALE_FACTOR * this.SCALE_FACTOR, y2 * frameH1 * this.SCALE_FACTOR * this.SCALE_FACTOR);
1571
- this.size = this.item.transform.size.clone();
1621
+ this.item.transform.size.set(x2 * frameWpx1 * this.SCALE_FACTOR * this.SCALE_FACTOR, y2 * frameHpx1 * this.SCALE_FACTOR * this.SCALE_FACTOR);
1572
1622
  this.initialized = true;
1573
1623
  break;
1574
1624
  }
1575
1625
  case EFFECTS.spec.TextOverflow.display:
1576
1626
  {
1577
1627
  if (!this.initialized) {
1578
- this.canvasSize = new EFFECTS.math.Vector2(layout.maxTextWidth, layout.maxTextHeight);
1579
- this.item.transform.size.set(x * this.canvasSize.x * this.SCALE_FACTOR * this.SCALE_FACTOR, y * this.canvasSize.y * this.SCALE_FACTOR * this.SCALE_FACTOR);
1580
- this.size = this.item.transform.size.clone();
1628
+ var frameWpx2 = frameW * fontScale;
1629
+ var frameHpx2 = frameH * fontScale;
1630
+ this.canvasSize = new EFFECTS.math.Vector2(frameWpx2, frameHpx2);
1631
+ this.item.transform.size.set(x * frameWpx2 * this.SCALE_FACTOR * this.SCALE_FACTOR, y * frameHpx2 * this.SCALE_FACTOR * this.SCALE_FACTOR);
1581
1632
  this.initialized = true;
1582
1633
  }
1583
1634
  break;
@@ -1696,7 +1747,7 @@ EFFECTS.applyMixins(exports.RichTextComponent, [
1696
1747
 
1697
1748
  /**
1698
1749
  * 插件版本号
1699
- */ var version = "2.8.0-alpha.5";
1750
+ */ var version = "2.8.0";
1700
1751
  EFFECTS.registerPlugin("rich-text", RichTextLoader);
1701
1752
  EFFECTS.logger.info("Plugin rich text version: " + version + ".");
1702
1753
  if (version !== EFFECTS__namespace.version) {