|
@@ -1,549 +0,0 @@
|
|
|
-import { __extends } from "tslib";
|
|
|
-import { parseRichText, parsePlainText } from './helper/parseText.js';
|
|
|
-import TSpan from './TSpan.js';
|
|
|
-import { retrieve2, each, normalizeCssArray, trim, retrieve3, extend, keys, defaults } from '../core/util.js';
|
|
|
-import { adjustTextX, adjustTextY } from '../contain/text.js';
|
|
|
-import ZRImage from './Image.js';
|
|
|
-import Rect from './shape/Rect.js';
|
|
|
-import BoundingRect from '../core/BoundingRect.js';
|
|
|
-import Displayable, { DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable.js';
|
|
|
-import { DEFAULT_FONT, DEFAULT_FONT_SIZE } from '../core/platform.js';
|
|
|
-var DEFAULT_RICH_TEXT_COLOR = {
|
|
|
- fill: '#000'
|
|
|
-};
|
|
|
-var DEFAULT_STROKE_LINE_WIDTH = 2;
|
|
|
-export var DEFAULT_TEXT_ANIMATION_PROPS = {
|
|
|
- style: defaults({
|
|
|
- fill: true,
|
|
|
- stroke: true,
|
|
|
- fillOpacity: true,
|
|
|
- strokeOpacity: true,
|
|
|
- lineWidth: true,
|
|
|
- fontSize: true,
|
|
|
- lineHeight: true,
|
|
|
- width: true,
|
|
|
- height: true,
|
|
|
- textShadowColor: true,
|
|
|
- textShadowBlur: true,
|
|
|
- textShadowOffsetX: true,
|
|
|
- textShadowOffsetY: true,
|
|
|
- backgroundColor: true,
|
|
|
- padding: true,
|
|
|
- borderColor: true,
|
|
|
- borderWidth: true,
|
|
|
- borderRadius: true
|
|
|
- }, DEFAULT_COMMON_ANIMATION_PROPS.style)
|
|
|
-};
|
|
|
-var ZRText = (function (_super) {
|
|
|
- __extends(ZRText, _super);
|
|
|
- function ZRText(opts) {
|
|
|
- var _this = _super.call(this) || this;
|
|
|
- _this.type = 'text';
|
|
|
- _this._children = [];
|
|
|
- _this._defaultStyle = DEFAULT_RICH_TEXT_COLOR;
|
|
|
- _this.attr(opts);
|
|
|
- return _this;
|
|
|
- }
|
|
|
- ZRText.prototype.childrenRef = function () {
|
|
|
- return this._children;
|
|
|
- };
|
|
|
- ZRText.prototype.update = function () {
|
|
|
- _super.prototype.update.call(this);
|
|
|
- if (this.styleChanged()) {
|
|
|
- this._updateSubTexts();
|
|
|
- }
|
|
|
- for (var i = 0; i < this._children.length; i++) {
|
|
|
- var child = this._children[i];
|
|
|
- child.zlevel = this.zlevel;
|
|
|
- child.z = this.z;
|
|
|
- child.z2 = this.z2;
|
|
|
- child.culling = this.culling;
|
|
|
- child.cursor = this.cursor;
|
|
|
- child.invisible = this.invisible;
|
|
|
- }
|
|
|
- };
|
|
|
- ZRText.prototype.updateTransform = function () {
|
|
|
- var innerTransformable = this.innerTransformable;
|
|
|
- if (innerTransformable) {
|
|
|
- innerTransformable.updateTransform();
|
|
|
- if (innerTransformable.transform) {
|
|
|
- this.transform = innerTransformable.transform;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- _super.prototype.updateTransform.call(this);
|
|
|
- }
|
|
|
- };
|
|
|
- ZRText.prototype.getLocalTransform = function (m) {
|
|
|
- var innerTransformable = this.innerTransformable;
|
|
|
- return innerTransformable
|
|
|
- ? innerTransformable.getLocalTransform(m)
|
|
|
- : _super.prototype.getLocalTransform.call(this, m);
|
|
|
- };
|
|
|
- ZRText.prototype.getComputedTransform = function () {
|
|
|
- if (this.__hostTarget) {
|
|
|
- this.__hostTarget.getComputedTransform();
|
|
|
- this.__hostTarget.updateInnerText(true);
|
|
|
- }
|
|
|
- return _super.prototype.getComputedTransform.call(this);
|
|
|
- };
|
|
|
- ZRText.prototype._updateSubTexts = function () {
|
|
|
- this._childCursor = 0;
|
|
|
- normalizeTextStyle(this.style);
|
|
|
- this.style.rich
|
|
|
- ? this._updateRichTexts()
|
|
|
- : this._updatePlainTexts();
|
|
|
- this._children.length = this._childCursor;
|
|
|
- this.styleUpdated();
|
|
|
- };
|
|
|
- ZRText.prototype.addSelfToZr = function (zr) {
|
|
|
- _super.prototype.addSelfToZr.call(this, zr);
|
|
|
- for (var i = 0; i < this._children.length; i++) {
|
|
|
- this._children[i].__zr = zr;
|
|
|
- }
|
|
|
- };
|
|
|
- ZRText.prototype.removeSelfFromZr = function (zr) {
|
|
|
- _super.prototype.removeSelfFromZr.call(this, zr);
|
|
|
- for (var i = 0; i < this._children.length; i++) {
|
|
|
- this._children[i].__zr = null;
|
|
|
- }
|
|
|
- };
|
|
|
- ZRText.prototype.getBoundingRect = function () {
|
|
|
- if (this.styleChanged()) {
|
|
|
- this._updateSubTexts();
|
|
|
- }
|
|
|
- if (!this._rect) {
|
|
|
- var tmpRect = new BoundingRect(0, 0, 0, 0);
|
|
|
- var children = this._children;
|
|
|
- var tmpMat = [];
|
|
|
- var rect = null;
|
|
|
- for (var i = 0; i < children.length; i++) {
|
|
|
- var child = children[i];
|
|
|
- var childRect = child.getBoundingRect();
|
|
|
- var transform = child.getLocalTransform(tmpMat);
|
|
|
- if (transform) {
|
|
|
- tmpRect.copy(childRect);
|
|
|
- tmpRect.applyTransform(transform);
|
|
|
- rect = rect || tmpRect.clone();
|
|
|
- rect.union(tmpRect);
|
|
|
- }
|
|
|
- else {
|
|
|
- rect = rect || childRect.clone();
|
|
|
- rect.union(childRect);
|
|
|
- }
|
|
|
- }
|
|
|
- this._rect = rect || tmpRect;
|
|
|
- }
|
|
|
- return this._rect;
|
|
|
- };
|
|
|
- ZRText.prototype.setDefaultTextStyle = function (defaultTextStyle) {
|
|
|
- this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR;
|
|
|
- };
|
|
|
- ZRText.prototype.setTextContent = function (textContent) {
|
|
|
- if (process.env.NODE_ENV !== 'production') {
|
|
|
- throw new Error('Can\'t attach text on another text');
|
|
|
- }
|
|
|
- };
|
|
|
- ZRText.prototype._mergeStyle = function (targetStyle, sourceStyle) {
|
|
|
- if (!sourceStyle) {
|
|
|
- return targetStyle;
|
|
|
- }
|
|
|
- var sourceRich = sourceStyle.rich;
|
|
|
- var targetRich = targetStyle.rich || (sourceRich && {});
|
|
|
- extend(targetStyle, sourceStyle);
|
|
|
- if (sourceRich && targetRich) {
|
|
|
- this._mergeRich(targetRich, sourceRich);
|
|
|
- targetStyle.rich = targetRich;
|
|
|
- }
|
|
|
- else if (targetRich) {
|
|
|
- targetStyle.rich = targetRich;
|
|
|
- }
|
|
|
- return targetStyle;
|
|
|
- };
|
|
|
- ZRText.prototype._mergeRich = function (targetRich, sourceRich) {
|
|
|
- var richNames = keys(sourceRich);
|
|
|
- for (var i = 0; i < richNames.length; i++) {
|
|
|
- var richName = richNames[i];
|
|
|
- targetRich[richName] = targetRich[richName] || {};
|
|
|
- extend(targetRich[richName], sourceRich[richName]);
|
|
|
- }
|
|
|
- };
|
|
|
- ZRText.prototype.getAnimationStyleProps = function () {
|
|
|
- return DEFAULT_TEXT_ANIMATION_PROPS;
|
|
|
- };
|
|
|
- ZRText.prototype._getOrCreateChild = function (Ctor) {
|
|
|
- var child = this._children[this._childCursor];
|
|
|
- if (!child || !(child instanceof Ctor)) {
|
|
|
- child = new Ctor();
|
|
|
- }
|
|
|
- this._children[this._childCursor++] = child;
|
|
|
- child.__zr = this.__zr;
|
|
|
- child.parent = this;
|
|
|
- return child;
|
|
|
- };
|
|
|
- ZRText.prototype._updatePlainTexts = function () {
|
|
|
- var style = this.style;
|
|
|
- var textFont = style.font || DEFAULT_FONT;
|
|
|
- var textPadding = style.padding;
|
|
|
- var text = getStyleText(style);
|
|
|
- var contentBlock = parsePlainText(text, style);
|
|
|
- var needDrawBg = needDrawBackground(style);
|
|
|
- var bgColorDrawn = !!(style.backgroundColor);
|
|
|
- var outerHeight = contentBlock.outerHeight;
|
|
|
- var outerWidth = contentBlock.outerWidth;
|
|
|
- var contentWidth = contentBlock.contentWidth;
|
|
|
- var textLines = contentBlock.lines;
|
|
|
- var lineHeight = contentBlock.lineHeight;
|
|
|
- var defaultStyle = this._defaultStyle;
|
|
|
- var baseX = style.x || 0;
|
|
|
- var baseY = style.y || 0;
|
|
|
- var textAlign = style.align || defaultStyle.align || 'left';
|
|
|
- var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top';
|
|
|
- var textX = baseX;
|
|
|
- var textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign);
|
|
|
- if (needDrawBg || textPadding) {
|
|
|
- var boxX = adjustTextX(baseX, outerWidth, textAlign);
|
|
|
- var boxY = adjustTextY(baseY, outerHeight, verticalAlign);
|
|
|
- needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);
|
|
|
- }
|
|
|
- textY += lineHeight / 2;
|
|
|
- if (textPadding) {
|
|
|
- textX = getTextXForPadding(baseX, textAlign, textPadding);
|
|
|
- if (verticalAlign === 'top') {
|
|
|
- textY += textPadding[0];
|
|
|
- }
|
|
|
- else if (verticalAlign === 'bottom') {
|
|
|
- textY -= textPadding[2];
|
|
|
- }
|
|
|
- }
|
|
|
- var defaultLineWidth = 0;
|
|
|
- var useDefaultFill = false;
|
|
|
- var textFill = getFill('fill' in style
|
|
|
- ? style.fill
|
|
|
- : (useDefaultFill = true, defaultStyle.fill));
|
|
|
- var textStroke = getStroke('stroke' in style
|
|
|
- ? style.stroke
|
|
|
- : (!bgColorDrawn
|
|
|
- && (!defaultStyle.autoStroke || useDefaultFill))
|
|
|
- ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)
|
|
|
- : null);
|
|
|
- var hasShadow = style.textShadowBlur > 0;
|
|
|
- var fixedBoundingRect = style.width != null
|
|
|
- && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll');
|
|
|
- var calculatedLineHeight = contentBlock.calculatedLineHeight;
|
|
|
- for (var i = 0; i < textLines.length; i++) {
|
|
|
- var el = this._getOrCreateChild(TSpan);
|
|
|
- var subElStyle = el.createStyle();
|
|
|
- el.useStyle(subElStyle);
|
|
|
- subElStyle.text = textLines[i];
|
|
|
- subElStyle.x = textX;
|
|
|
- subElStyle.y = textY;
|
|
|
- if (textAlign) {
|
|
|
- subElStyle.textAlign = textAlign;
|
|
|
- }
|
|
|
- subElStyle.textBaseline = 'middle';
|
|
|
- subElStyle.opacity = style.opacity;
|
|
|
- subElStyle.strokeFirst = true;
|
|
|
- if (hasShadow) {
|
|
|
- subElStyle.shadowBlur = style.textShadowBlur || 0;
|
|
|
- subElStyle.shadowColor = style.textShadowColor || 'transparent';
|
|
|
- subElStyle.shadowOffsetX = style.textShadowOffsetX || 0;
|
|
|
- subElStyle.shadowOffsetY = style.textShadowOffsetY || 0;
|
|
|
- }
|
|
|
- subElStyle.stroke = textStroke;
|
|
|
- subElStyle.fill = textFill;
|
|
|
- if (textStroke) {
|
|
|
- subElStyle.lineWidth = style.lineWidth || defaultLineWidth;
|
|
|
- subElStyle.lineDash = style.lineDash;
|
|
|
- subElStyle.lineDashOffset = style.lineDashOffset || 0;
|
|
|
- }
|
|
|
- subElStyle.font = textFont;
|
|
|
- setSeparateFont(subElStyle, style);
|
|
|
- textY += lineHeight;
|
|
|
- if (fixedBoundingRect) {
|
|
|
- el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, style.width, subElStyle.textAlign), adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline), contentWidth, calculatedLineHeight));
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
- ZRText.prototype._updateRichTexts = function () {
|
|
|
- var style = this.style;
|
|
|
- var text = getStyleText(style);
|
|
|
- var contentBlock = parseRichText(text, style);
|
|
|
- var contentWidth = contentBlock.width;
|
|
|
- var outerWidth = contentBlock.outerWidth;
|
|
|
- var outerHeight = contentBlock.outerHeight;
|
|
|
- var textPadding = style.padding;
|
|
|
- var baseX = style.x || 0;
|
|
|
- var baseY = style.y || 0;
|
|
|
- var defaultStyle = this._defaultStyle;
|
|
|
- var textAlign = style.align || defaultStyle.align;
|
|
|
- var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign;
|
|
|
- var boxX = adjustTextX(baseX, outerWidth, textAlign);
|
|
|
- var boxY = adjustTextY(baseY, outerHeight, verticalAlign);
|
|
|
- var xLeft = boxX;
|
|
|
- var lineTop = boxY;
|
|
|
- if (textPadding) {
|
|
|
- xLeft += textPadding[3];
|
|
|
- lineTop += textPadding[0];
|
|
|
- }
|
|
|
- var xRight = xLeft + contentWidth;
|
|
|
- if (needDrawBackground(style)) {
|
|
|
- this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);
|
|
|
- }
|
|
|
- var bgColorDrawn = !!(style.backgroundColor);
|
|
|
- for (var i = 0; i < contentBlock.lines.length; i++) {
|
|
|
- var line = contentBlock.lines[i];
|
|
|
- var tokens = line.tokens;
|
|
|
- var tokenCount = tokens.length;
|
|
|
- var lineHeight = line.lineHeight;
|
|
|
- var remainedWidth = line.width;
|
|
|
- var leftIndex = 0;
|
|
|
- var lineXLeft = xLeft;
|
|
|
- var lineXRight = xRight;
|
|
|
- var rightIndex = tokenCount - 1;
|
|
|
- var token = void 0;
|
|
|
- while (leftIndex < tokenCount
|
|
|
- && (token = tokens[leftIndex], !token.align || token.align === 'left')) {
|
|
|
- this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn);
|
|
|
- remainedWidth -= token.width;
|
|
|
- lineXLeft += token.width;
|
|
|
- leftIndex++;
|
|
|
- }
|
|
|
- while (rightIndex >= 0
|
|
|
- && (token = tokens[rightIndex], token.align === 'right')) {
|
|
|
- this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn);
|
|
|
- remainedWidth -= token.width;
|
|
|
- lineXRight -= token.width;
|
|
|
- rightIndex--;
|
|
|
- }
|
|
|
- lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2;
|
|
|
- while (leftIndex <= rightIndex) {
|
|
|
- token = tokens[leftIndex];
|
|
|
- this._placeToken(token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center', bgColorDrawn);
|
|
|
- lineXLeft += token.width;
|
|
|
- leftIndex++;
|
|
|
- }
|
|
|
- lineTop += lineHeight;
|
|
|
- }
|
|
|
- };
|
|
|
- ZRText.prototype._placeToken = function (token, style, lineHeight, lineTop, x, textAlign, parentBgColorDrawn) {
|
|
|
- var tokenStyle = style.rich[token.styleName] || {};
|
|
|
- tokenStyle.text = token.text;
|
|
|
- var verticalAlign = token.verticalAlign;
|
|
|
- var y = lineTop + lineHeight / 2;
|
|
|
- if (verticalAlign === 'top') {
|
|
|
- y = lineTop + token.height / 2;
|
|
|
- }
|
|
|
- else if (verticalAlign === 'bottom') {
|
|
|
- y = lineTop + lineHeight - token.height / 2;
|
|
|
- }
|
|
|
- var needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle);
|
|
|
- needDrawBg && this._renderBackground(tokenStyle, style, textAlign === 'right'
|
|
|
- ? x - token.width
|
|
|
- : textAlign === 'center'
|
|
|
- ? x - token.width / 2
|
|
|
- : x, y - token.height / 2, token.width, token.height);
|
|
|
- var bgColorDrawn = !!tokenStyle.backgroundColor;
|
|
|
- var textPadding = token.textPadding;
|
|
|
- if (textPadding) {
|
|
|
- x = getTextXForPadding(x, textAlign, textPadding);
|
|
|
- y -= token.height / 2 - textPadding[0] - token.innerHeight / 2;
|
|
|
- }
|
|
|
- var el = this._getOrCreateChild(TSpan);
|
|
|
- var subElStyle = el.createStyle();
|
|
|
- el.useStyle(subElStyle);
|
|
|
- var defaultStyle = this._defaultStyle;
|
|
|
- var useDefaultFill = false;
|
|
|
- var defaultLineWidth = 0;
|
|
|
- var textFill = getFill('fill' in tokenStyle ? tokenStyle.fill
|
|
|
- : 'fill' in style ? style.fill
|
|
|
- : (useDefaultFill = true, defaultStyle.fill));
|
|
|
- var textStroke = getStroke('stroke' in tokenStyle ? tokenStyle.stroke
|
|
|
- : 'stroke' in style ? style.stroke
|
|
|
- : (!bgColorDrawn
|
|
|
- && !parentBgColorDrawn
|
|
|
- && (!defaultStyle.autoStroke || useDefaultFill)) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)
|
|
|
- : null);
|
|
|
- var hasShadow = tokenStyle.textShadowBlur > 0
|
|
|
- || style.textShadowBlur > 0;
|
|
|
- subElStyle.text = token.text;
|
|
|
- subElStyle.x = x;
|
|
|
- subElStyle.y = y;
|
|
|
- if (hasShadow) {
|
|
|
- subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0;
|
|
|
- subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent';
|
|
|
- subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0;
|
|
|
- subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0;
|
|
|
- }
|
|
|
- subElStyle.textAlign = textAlign;
|
|
|
- subElStyle.textBaseline = 'middle';
|
|
|
- subElStyle.font = token.font || DEFAULT_FONT;
|
|
|
- subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1);
|
|
|
- setSeparateFont(subElStyle, tokenStyle);
|
|
|
- if (textStroke) {
|
|
|
- subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth);
|
|
|
- subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash);
|
|
|
- subElStyle.lineDashOffset = style.lineDashOffset || 0;
|
|
|
- subElStyle.stroke = textStroke;
|
|
|
- }
|
|
|
- if (textFill) {
|
|
|
- subElStyle.fill = textFill;
|
|
|
- }
|
|
|
- var textWidth = token.contentWidth;
|
|
|
- var textHeight = token.contentHeight;
|
|
|
- el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign), adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline), textWidth, textHeight));
|
|
|
- };
|
|
|
- ZRText.prototype._renderBackground = function (style, topStyle, x, y, width, height) {
|
|
|
- var textBackgroundColor = style.backgroundColor;
|
|
|
- var textBorderWidth = style.borderWidth;
|
|
|
- var textBorderColor = style.borderColor;
|
|
|
- var isImageBg = textBackgroundColor && textBackgroundColor.image;
|
|
|
- var isPlainOrGradientBg = textBackgroundColor && !isImageBg;
|
|
|
- var textBorderRadius = style.borderRadius;
|
|
|
- var self = this;
|
|
|
- var rectEl;
|
|
|
- var imgEl;
|
|
|
- if (isPlainOrGradientBg || style.lineHeight || (textBorderWidth && textBorderColor)) {
|
|
|
- rectEl = this._getOrCreateChild(Rect);
|
|
|
- rectEl.useStyle(rectEl.createStyle());
|
|
|
- rectEl.style.fill = null;
|
|
|
- var rectShape = rectEl.shape;
|
|
|
- rectShape.x = x;
|
|
|
- rectShape.y = y;
|
|
|
- rectShape.width = width;
|
|
|
- rectShape.height = height;
|
|
|
- rectShape.r = textBorderRadius;
|
|
|
- rectEl.dirtyShape();
|
|
|
- }
|
|
|
- if (isPlainOrGradientBg) {
|
|
|
- var rectStyle = rectEl.style;
|
|
|
- rectStyle.fill = textBackgroundColor || null;
|
|
|
- rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1);
|
|
|
- }
|
|
|
- else if (isImageBg) {
|
|
|
- imgEl = this._getOrCreateChild(ZRImage);
|
|
|
- imgEl.onload = function () {
|
|
|
- self.dirtyStyle();
|
|
|
- };
|
|
|
- var imgStyle = imgEl.style;
|
|
|
- imgStyle.image = textBackgroundColor.image;
|
|
|
- imgStyle.x = x;
|
|
|
- imgStyle.y = y;
|
|
|
- imgStyle.width = width;
|
|
|
- imgStyle.height = height;
|
|
|
- }
|
|
|
- if (textBorderWidth && textBorderColor) {
|
|
|
- var rectStyle = rectEl.style;
|
|
|
- rectStyle.lineWidth = textBorderWidth;
|
|
|
- rectStyle.stroke = textBorderColor;
|
|
|
- rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1);
|
|
|
- rectStyle.lineDash = style.borderDash;
|
|
|
- rectStyle.lineDashOffset = style.borderDashOffset || 0;
|
|
|
- rectEl.strokeContainThreshold = 0;
|
|
|
- if (rectEl.hasFill() && rectEl.hasStroke()) {
|
|
|
- rectStyle.strokeFirst = true;
|
|
|
- rectStyle.lineWidth *= 2;
|
|
|
- }
|
|
|
- }
|
|
|
- var commonStyle = (rectEl || imgEl).style;
|
|
|
- commonStyle.shadowBlur = style.shadowBlur || 0;
|
|
|
- commonStyle.shadowColor = style.shadowColor || 'transparent';
|
|
|
- commonStyle.shadowOffsetX = style.shadowOffsetX || 0;
|
|
|
- commonStyle.shadowOffsetY = style.shadowOffsetY || 0;
|
|
|
- commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1);
|
|
|
- };
|
|
|
- ZRText.makeFont = function (style) {
|
|
|
- var font = '';
|
|
|
- if (hasSeparateFont(style)) {
|
|
|
- font = [
|
|
|
- style.fontStyle,
|
|
|
- style.fontWeight,
|
|
|
- parseFontSize(style.fontSize),
|
|
|
- style.fontFamily || 'sans-serif'
|
|
|
- ].join(' ');
|
|
|
- }
|
|
|
- return font && trim(font) || style.textFont || style.font;
|
|
|
- };
|
|
|
- return ZRText;
|
|
|
-}(Displayable));
|
|
|
-var VALID_TEXT_ALIGN = { left: true, right: 1, center: 1 };
|
|
|
-var VALID_TEXT_VERTICAL_ALIGN = { top: 1, bottom: 1, middle: 1 };
|
|
|
-var FONT_PARTS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily'];
|
|
|
-export function parseFontSize(fontSize) {
|
|
|
- if (typeof fontSize === 'string'
|
|
|
- && (fontSize.indexOf('px') !== -1
|
|
|
- || fontSize.indexOf('rem') !== -1
|
|
|
- || fontSize.indexOf('em') !== -1)) {
|
|
|
- return fontSize;
|
|
|
- }
|
|
|
- else if (!isNaN(+fontSize)) {
|
|
|
- return fontSize + 'px';
|
|
|
- }
|
|
|
- else {
|
|
|
- return DEFAULT_FONT_SIZE + 'px';
|
|
|
- }
|
|
|
-}
|
|
|
-function setSeparateFont(targetStyle, sourceStyle) {
|
|
|
- for (var i = 0; i < FONT_PARTS.length; i++) {
|
|
|
- var fontProp = FONT_PARTS[i];
|
|
|
- var val = sourceStyle[fontProp];
|
|
|
- if (val != null) {
|
|
|
- targetStyle[fontProp] = val;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-export function hasSeparateFont(style) {
|
|
|
- return style.fontSize != null || style.fontFamily || style.fontWeight;
|
|
|
-}
|
|
|
-export function normalizeTextStyle(style) {
|
|
|
- normalizeStyle(style);
|
|
|
- each(style.rich, normalizeStyle);
|
|
|
- return style;
|
|
|
-}
|
|
|
-function normalizeStyle(style) {
|
|
|
- if (style) {
|
|
|
- style.font = ZRText.makeFont(style);
|
|
|
- var textAlign = style.align;
|
|
|
- textAlign === 'middle' && (textAlign = 'center');
|
|
|
- style.align = (textAlign == null || VALID_TEXT_ALIGN[textAlign]) ? textAlign : 'left';
|
|
|
- var verticalAlign = style.verticalAlign;
|
|
|
- verticalAlign === 'center' && (verticalAlign = 'middle');
|
|
|
- style.verticalAlign = (verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]) ? verticalAlign : 'top';
|
|
|
- var textPadding = style.padding;
|
|
|
- if (textPadding) {
|
|
|
- style.padding = normalizeCssArray(style.padding);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-function getStroke(stroke, lineWidth) {
|
|
|
- return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')
|
|
|
- ? null
|
|
|
- : (stroke.image || stroke.colorStops)
|
|
|
- ? '#000'
|
|
|
- : stroke;
|
|
|
-}
|
|
|
-function getFill(fill) {
|
|
|
- return (fill == null || fill === 'none')
|
|
|
- ? null
|
|
|
- : (fill.image || fill.colorStops)
|
|
|
- ? '#000'
|
|
|
- : fill;
|
|
|
-}
|
|
|
-function getTextXForPadding(x, textAlign, textPadding) {
|
|
|
- return textAlign === 'right'
|
|
|
- ? (x - textPadding[1])
|
|
|
- : textAlign === 'center'
|
|
|
- ? (x + textPadding[3] / 2 - textPadding[1] / 2)
|
|
|
- : (x + textPadding[3]);
|
|
|
-}
|
|
|
-function getStyleText(style) {
|
|
|
- var text = style.text;
|
|
|
- text != null && (text += '');
|
|
|
- return text;
|
|
|
-}
|
|
|
-function needDrawBackground(style) {
|
|
|
- return !!(style.backgroundColor
|
|
|
- || style.lineHeight
|
|
|
- || (style.borderWidth && style.borderColor));
|
|
|
-}
|
|
|
-export default ZRText;
|