| 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
  
 | 
  
 | 
/** 
 | 
 * AUTO-GENERATED FILE. DO NOT MODIFY. 
 | 
 */ 
 | 
  
 | 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
import { __extends } from "tslib"; 
 | 
import { createSymbol, normalizeSymbolOffset, normalizeSymbolSize } from '../../util/symbol.js'; 
 | 
import * as graphic from '../../util/graphic.js'; 
 | 
import { getECData } from '../../util/innerStore.js'; 
 | 
import { enterEmphasis, leaveEmphasis, toggleHoverEmphasis } from '../../util/states.js'; 
 | 
import { getDefaultLabel } from './labelHelper.js'; 
 | 
import { extend } from 'zrender/lib/core/util.js'; 
 | 
import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js'; 
 | 
import ZRImage from 'zrender/lib/graphic/Image.js'; 
 | 
import { saveOldStyle } from '../../animation/basicTransition.js'; 
 | 
var Symbol = /** @class */function (_super) { 
 | 
  __extends(Symbol, _super); 
 | 
  function Symbol(data, idx, seriesScope, opts) { 
 | 
    var _this = _super.call(this) || this; 
 | 
    _this.updateData(data, idx, seriesScope, opts); 
 | 
    return _this; 
 | 
  } 
 | 
  Symbol.prototype._createSymbol = function (symbolType, data, idx, symbolSize, keepAspect) { 
 | 
    // Remove paths created before 
 | 
    this.removeAll(); 
 | 
    // let symbolPath = createSymbol( 
 | 
    //     symbolType, -0.5, -0.5, 1, 1, color 
 | 
    // ); 
 | 
    // If width/height are set too small (e.g., set to 1) on ios10 
 | 
    // and macOS Sierra, a circle stroke become a rect, no matter what 
 | 
    // the scale is set. So we set width/height as 2. See #4150. 
 | 
    var symbolPath = createSymbol(symbolType, -1, -1, 2, 2, null, keepAspect); 
 | 
    symbolPath.attr({ 
 | 
      z2: 100, 
 | 
      culling: true, 
 | 
      scaleX: symbolSize[0] / 2, 
 | 
      scaleY: symbolSize[1] / 2 
 | 
    }); 
 | 
    // Rewrite drift method 
 | 
    symbolPath.drift = driftSymbol; 
 | 
    this._symbolType = symbolType; 
 | 
    this.add(symbolPath); 
 | 
  }; 
 | 
  /** 
 | 
   * Stop animation 
 | 
   * @param {boolean} toLastFrame 
 | 
   */ 
 | 
  Symbol.prototype.stopSymbolAnimation = function (toLastFrame) { 
 | 
    this.childAt(0).stopAnimation(null, toLastFrame); 
 | 
  }; 
 | 
  Symbol.prototype.getSymbolType = function () { 
 | 
    return this._symbolType; 
 | 
  }; 
 | 
  /** 
 | 
   * FIXME: 
 | 
   * Caution: This method breaks the encapsulation of this module, 
 | 
   * but it indeed brings convenience. So do not use the method 
 | 
   * unless you detailedly know all the implements of `Symbol`, 
 | 
   * especially animation. 
 | 
   * 
 | 
   * Get symbol path element. 
 | 
   */ 
 | 
  Symbol.prototype.getSymbolPath = function () { 
 | 
    return this.childAt(0); 
 | 
  }; 
 | 
  /** 
 | 
   * Highlight symbol 
 | 
   */ 
 | 
  Symbol.prototype.highlight = function () { 
 | 
    enterEmphasis(this.childAt(0)); 
 | 
  }; 
 | 
  /** 
 | 
   * Downplay symbol 
 | 
   */ 
 | 
  Symbol.prototype.downplay = function () { 
 | 
    leaveEmphasis(this.childAt(0)); 
 | 
  }; 
 | 
  /** 
 | 
   * @param {number} zlevel 
 | 
   * @param {number} z 
 | 
   */ 
 | 
  Symbol.prototype.setZ = function (zlevel, z) { 
 | 
    var symbolPath = this.childAt(0); 
 | 
    symbolPath.zlevel = zlevel; 
 | 
    symbolPath.z = z; 
 | 
  }; 
 | 
  Symbol.prototype.setDraggable = function (draggable, hasCursorOption) { 
 | 
    var symbolPath = this.childAt(0); 
 | 
    symbolPath.draggable = draggable; 
 | 
    symbolPath.cursor = !hasCursorOption && draggable ? 'move' : symbolPath.cursor; 
 | 
  }; 
 | 
  /** 
 | 
   * Update symbol properties 
 | 
   */ 
 | 
  Symbol.prototype.updateData = function (data, idx, seriesScope, opts) { 
 | 
    this.silent = false; 
 | 
    var symbolType = data.getItemVisual(idx, 'symbol') || 'circle'; 
 | 
    var seriesModel = data.hostModel; 
 | 
    var symbolSize = Symbol.getSymbolSize(data, idx); 
 | 
    var isInit = symbolType !== this._symbolType; 
 | 
    var disableAnimation = opts && opts.disableAnimation; 
 | 
    if (isInit) { 
 | 
      var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect'); 
 | 
      this._createSymbol(symbolType, data, idx, symbolSize, keepAspect); 
 | 
    } else { 
 | 
      var symbolPath = this.childAt(0); 
 | 
      symbolPath.silent = false; 
 | 
      var target = { 
 | 
        scaleX: symbolSize[0] / 2, 
 | 
        scaleY: symbolSize[1] / 2 
 | 
      }; 
 | 
      disableAnimation ? symbolPath.attr(target) : graphic.updateProps(symbolPath, target, seriesModel, idx); 
 | 
      saveOldStyle(symbolPath); 
 | 
    } 
 | 
    this._updateCommon(data, idx, symbolSize, seriesScope, opts); 
 | 
    if (isInit) { 
 | 
      var symbolPath = this.childAt(0); 
 | 
      if (!disableAnimation) { 
 | 
        var target = { 
 | 
          scaleX: this._sizeX, 
 | 
          scaleY: this._sizeY, 
 | 
          style: { 
 | 
            // Always fadeIn. Because it has fadeOut animation when symbol is removed.. 
 | 
            opacity: symbolPath.style.opacity 
 | 
          } 
 | 
        }; 
 | 
        symbolPath.scaleX = symbolPath.scaleY = 0; 
 | 
        symbolPath.style.opacity = 0; 
 | 
        graphic.initProps(symbolPath, target, seriesModel, idx); 
 | 
      } 
 | 
    } 
 | 
    if (disableAnimation) { 
 | 
      // Must stop leave transition manually if don't call initProps or updateProps. 
 | 
      this.childAt(0).stopAnimation('leave'); 
 | 
    } 
 | 
  }; 
 | 
  Symbol.prototype._updateCommon = function (data, idx, symbolSize, seriesScope, opts) { 
 | 
    var symbolPath = this.childAt(0); 
 | 
    var seriesModel = data.hostModel; 
 | 
    var emphasisItemStyle; 
 | 
    var blurItemStyle; 
 | 
    var selectItemStyle; 
 | 
    var focus; 
 | 
    var blurScope; 
 | 
    var emphasisDisabled; 
 | 
    var labelStatesModels; 
 | 
    var hoverScale; 
 | 
    var cursorStyle; 
 | 
    if (seriesScope) { 
 | 
      emphasisItemStyle = seriesScope.emphasisItemStyle; 
 | 
      blurItemStyle = seriesScope.blurItemStyle; 
 | 
      selectItemStyle = seriesScope.selectItemStyle; 
 | 
      focus = seriesScope.focus; 
 | 
      blurScope = seriesScope.blurScope; 
 | 
      labelStatesModels = seriesScope.labelStatesModels; 
 | 
      hoverScale = seriesScope.hoverScale; 
 | 
      cursorStyle = seriesScope.cursorStyle; 
 | 
      emphasisDisabled = seriesScope.emphasisDisabled; 
 | 
    } 
 | 
    if (!seriesScope || data.hasItemOption) { 
 | 
      var itemModel = seriesScope && seriesScope.itemModel ? seriesScope.itemModel : data.getItemModel(idx); 
 | 
      var emphasisModel = itemModel.getModel('emphasis'); 
 | 
      emphasisItemStyle = emphasisModel.getModel('itemStyle').getItemStyle(); 
 | 
      selectItemStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle(); 
 | 
      blurItemStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle(); 
 | 
      focus = emphasisModel.get('focus'); 
 | 
      blurScope = emphasisModel.get('blurScope'); 
 | 
      emphasisDisabled = emphasisModel.get('disabled'); 
 | 
      labelStatesModels = getLabelStatesModels(itemModel); 
 | 
      hoverScale = emphasisModel.getShallow('scale'); 
 | 
      cursorStyle = itemModel.getShallow('cursor'); 
 | 
    } 
 | 
    var symbolRotate = data.getItemVisual(idx, 'symbolRotate'); 
 | 
    symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0); 
 | 
    var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, 'symbolOffset'), symbolSize); 
 | 
    if (symbolOffset) { 
 | 
      symbolPath.x = symbolOffset[0]; 
 | 
      symbolPath.y = symbolOffset[1]; 
 | 
    } 
 | 
    cursorStyle && symbolPath.attr('cursor', cursorStyle); 
 | 
    var symbolStyle = data.getItemVisual(idx, 'style'); 
 | 
    var visualColor = symbolStyle.fill; 
 | 
    if (symbolPath instanceof ZRImage) { 
 | 
      var pathStyle = symbolPath.style; 
 | 
      symbolPath.useStyle(extend({ 
 | 
        // TODO other properties like x, y ? 
 | 
        image: pathStyle.image, 
 | 
        x: pathStyle.x, 
 | 
        y: pathStyle.y, 
 | 
        width: pathStyle.width, 
 | 
        height: pathStyle.height 
 | 
      }, symbolStyle)); 
 | 
    } else { 
 | 
      if (symbolPath.__isEmptyBrush) { 
 | 
        // fill and stroke will be swapped if it's empty. 
 | 
        // So we cloned a new style to avoid it affecting the original style in visual storage. 
 | 
        // TODO Better implementation. No empty logic! 
 | 
        symbolPath.useStyle(extend({}, symbolStyle)); 
 | 
      } else { 
 | 
        symbolPath.useStyle(symbolStyle); 
 | 
      } 
 | 
      // Disable decal because symbol scale will been applied on the decal. 
 | 
      symbolPath.style.decal = null; 
 | 
      symbolPath.setColor(visualColor, opts && opts.symbolInnerColor); 
 | 
      symbolPath.style.strokeNoScale = true; 
 | 
    } 
 | 
    var liftZ = data.getItemVisual(idx, 'liftZ'); 
 | 
    var z2Origin = this._z2; 
 | 
    if (liftZ != null) { 
 | 
      if (z2Origin == null) { 
 | 
        this._z2 = symbolPath.z2; 
 | 
        symbolPath.z2 += liftZ; 
 | 
      } 
 | 
    } else if (z2Origin != null) { 
 | 
      symbolPath.z2 = z2Origin; 
 | 
      this._z2 = null; 
 | 
    } 
 | 
    var useNameLabel = opts && opts.useNameLabel; 
 | 
    setLabelStyle(symbolPath, labelStatesModels, { 
 | 
      labelFetcher: seriesModel, 
 | 
      labelDataIndex: idx, 
 | 
      defaultText: getLabelDefaultText, 
 | 
      inheritColor: visualColor, 
 | 
      defaultOpacity: symbolStyle.opacity 
 | 
    }); 
 | 
    // Do not execute util needed. 
 | 
    function getLabelDefaultText(idx) { 
 | 
      return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx); 
 | 
    } 
 | 
    this._sizeX = symbolSize[0] / 2; 
 | 
    this._sizeY = symbolSize[1] / 2; 
 | 
    var emphasisState = symbolPath.ensureState('emphasis'); 
 | 
    emphasisState.style = emphasisItemStyle; 
 | 
    symbolPath.ensureState('select').style = selectItemStyle; 
 | 
    symbolPath.ensureState('blur').style = blurItemStyle; 
 | 
    // null / undefined / true means to use default strategy. 
 | 
    // 0 / false / negative number / NaN / Infinity means no scale. 
 | 
    var scaleRatio = hoverScale == null || hoverScale === true ? Math.max(1.1, 3 / this._sizeY) 
 | 
    // PENDING: restrict hoverScale > 1? It seems unreasonable to scale down 
 | 
    : isFinite(hoverScale) && hoverScale > 0 ? +hoverScale : 1; 
 | 
    // always set scale to allow resetting 
 | 
    emphasisState.scaleX = this._sizeX * scaleRatio; 
 | 
    emphasisState.scaleY = this._sizeY * scaleRatio; 
 | 
    this.setSymbolScale(1); 
 | 
    toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled); 
 | 
  }; 
 | 
  Symbol.prototype.setSymbolScale = function (scale) { 
 | 
    this.scaleX = this.scaleY = scale; 
 | 
  }; 
 | 
  Symbol.prototype.fadeOut = function (cb, seriesModel, opt) { 
 | 
    var symbolPath = this.childAt(0); 
 | 
    var dataIndex = getECData(this).dataIndex; 
 | 
    var animationOpt = opt && opt.animation; 
 | 
    // Avoid mistaken hover when fading out 
 | 
    this.silent = symbolPath.silent = true; 
 | 
    // Not show text when animating 
 | 
    if (opt && opt.fadeLabel) { 
 | 
      var textContent = symbolPath.getTextContent(); 
 | 
      if (textContent) { 
 | 
        graphic.removeElement(textContent, { 
 | 
          style: { 
 | 
            opacity: 0 
 | 
          } 
 | 
        }, seriesModel, { 
 | 
          dataIndex: dataIndex, 
 | 
          removeOpt: animationOpt, 
 | 
          cb: function () { 
 | 
            symbolPath.removeTextContent(); 
 | 
          } 
 | 
        }); 
 | 
      } 
 | 
    } else { 
 | 
      symbolPath.removeTextContent(); 
 | 
    } 
 | 
    graphic.removeElement(symbolPath, { 
 | 
      style: { 
 | 
        opacity: 0 
 | 
      }, 
 | 
      scaleX: 0, 
 | 
      scaleY: 0 
 | 
    }, seriesModel, { 
 | 
      dataIndex: dataIndex, 
 | 
      cb: cb, 
 | 
      removeOpt: animationOpt 
 | 
    }); 
 | 
  }; 
 | 
  Symbol.getSymbolSize = function (data, idx) { 
 | 
    return normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize')); 
 | 
  }; 
 | 
  return Symbol; 
 | 
}(graphic.Group); 
 | 
function driftSymbol(dx, dy) { 
 | 
  this.parent.drift(dx, dy); 
 | 
} 
 | 
export default Symbol; 
 |