{"version":3,"file":"js/chunk-vendors-450586c4.9448231b.js","mappings":"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","sources":["webpack://app/./node_modules/zrender/lib/graphic/helper/fixClipWithShadow.js","webpack://app/./node_modules/zrender/lib/graphic/helper/fixShadow.js","webpack://app/./node_modules/zrender/lib/graphic/helper/image.js","webpack://app/./node_modules/zrender/lib/graphic/helper/poly.js","webpack://app/./node_modules/zrender/lib/graphic/helper/roundRect.js","webpack://app/./node_modules/zrender/lib/graphic/helper/smoothBezier.js","webpack://app/./node_modules/zrender/lib/graphic/helper/smoothSpline.js","webpack://app/./node_modules/zrender/lib/graphic/helper/subPixelOptimize.js","webpack://app/./node_modules/zrender/lib/graphic/helper/text.js","webpack://app/./node_modules/zrender/lib/graphic/mixin/RectText.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Arc.js","webpack://app/./node_modules/zrender/lib/graphic/shape/BezierCurve.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Circle.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Ellipse.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Line.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Polygon.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Polyline.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Rect.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Ring.js","webpack://app/./node_modules/zrender/lib/graphic/shape/Sector.js","webpack://app/./node_modules/zrender/lib/mixin/Animatable.js","webpack://app/./node_modules/zrender/lib/mixin/Draggable.js","webpack://app/./node_modules/zrender/lib/mixin/Eventful.js","webpack://app/./node_modules/zrender/lib/mixin/Transformable.js"],"sourcesContent":["var env = require(\"../../core/env\");\n\n// Fix weird bug in some version of IE11 (like 11.0.9600.178**),\n// where exception \"unexpected call to method or property access\"\n// might be thrown when calling ctx.fill or ctx.stroke after a path\n// whose area size is zero is drawn and ctx.clip() is called and\n// shadowBlur is set. See #4572, #3112, #5777.\n// (e.g.,\n// ctx.moveTo(10, 10);\n// ctx.lineTo(20, 10);\n// ctx.closePath();\n// ctx.clip();\n// ctx.shadowBlur = 10;\n// ...\n// ctx.fill();\n// )\nvar shadowTemp = [['shadowBlur', 0], ['shadowColor', '#000'], ['shadowOffsetX', 0], ['shadowOffsetY', 0]];\n\nfunction _default(orignalBrush) {\n // version string can be: '11.0'\n return env.browser.ie && env.browser.version >= 11 ? function () {\n var clipPaths = this.__clipPaths;\n var style = this.style;\n var modified;\n\n if (clipPaths) {\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n var shape = clipPath && clipPath.shape;\n var type = clipPath && clipPath.type;\n\n if (shape && (type === 'sector' && shape.startAngle === shape.endAngle || type === 'rect' && (!shape.width || !shape.height))) {\n for (var j = 0; j < shadowTemp.length; j++) {\n // It is save to put shadowTemp static, because shadowTemp\n // will be all modified each item brush called.\n shadowTemp[j][2] = style[shadowTemp[j][0]];\n style[shadowTemp[j][0]] = shadowTemp[j][1];\n }\n\n modified = true;\n break;\n }\n }\n }\n\n orignalBrush.apply(this, arguments);\n\n if (modified) {\n for (var j = 0; j < shadowTemp.length; j++) {\n style[shadowTemp[j][0]] = shadowTemp[j][2];\n }\n }\n } : orignalBrush;\n}\n\nmodule.exports = _default;","var SHADOW_PROPS = {\n 'shadowBlur': 1,\n 'shadowOffsetX': 1,\n 'shadowOffsetY': 1,\n 'textShadowBlur': 1,\n 'textShadowOffsetX': 1,\n 'textShadowOffsetY': 1,\n 'textBoxShadowBlur': 1,\n 'textBoxShadowOffsetX': 1,\n 'textBoxShadowOffsetY': 1\n};\n\nfunction _default(ctx, propName, value) {\n if (SHADOW_PROPS.hasOwnProperty(propName)) {\n return value *= ctx.dpr;\n }\n\n return value;\n}\n\nmodule.exports = _default;","var LRU = require(\"../../core/LRU\");\n\nvar globalImageCache = new LRU(50);\n/**\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\n\nfunction findExistImage(newImageOrSrc) {\n if (typeof newImageOrSrc === 'string') {\n var cachedImgObj = globalImageCache.get(newImageOrSrc);\n return cachedImgObj && cachedImgObj.image;\n } else {\n return newImageOrSrc;\n }\n}\n/**\n * Caution: User should cache loaded images, but not just count on LRU.\n * Consider if required images more than LRU size, will dead loop occur?\n *\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image.\n * @param {module:zrender/Element} [hostEl] For calling `dirty`.\n * @param {Function} [cb] params: (image, cbPayload)\n * @param {Object} [cbPayload] Payload on cb calling.\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\n\n\nfunction createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) {\n if (!newImageOrSrc) {\n return image;\n } else if (typeof newImageOrSrc === 'string') {\n // Image should not be loaded repeatly.\n if (image && image.__zrImageSrc === newImageOrSrc || !hostEl) {\n return image;\n } // Only when there is no existent image or existent image src\n // is different, this method is responsible for load.\n\n\n var cachedImgObj = globalImageCache.get(newImageOrSrc);\n var pendingWrap = {\n hostEl: hostEl,\n cb: cb,\n cbPayload: cbPayload\n };\n\n if (cachedImgObj) {\n image = cachedImgObj.image;\n !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n } else {\n image = new Image();\n image.onload = image.onerror = imageOnLoad;\n globalImageCache.put(newImageOrSrc, image.__cachedImgObj = {\n image: image,\n pending: [pendingWrap]\n });\n image.src = image.__zrImageSrc = newImageOrSrc;\n }\n\n return image;\n } // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas\n else {\n return newImageOrSrc;\n }\n}\n\nfunction imageOnLoad() {\n var cachedImgObj = this.__cachedImgObj;\n this.onload = this.onerror = this.__cachedImgObj = null;\n\n for (var i = 0; i < cachedImgObj.pending.length; i++) {\n var pendingWrap = cachedImgObj.pending[i];\n var cb = pendingWrap.cb;\n cb && cb(this, pendingWrap.cbPayload);\n pendingWrap.hostEl.dirty();\n }\n\n cachedImgObj.pending.length = 0;\n}\n\nfunction isImageReady(image) {\n return image && image.width && image.height;\n}\n\nexports.findExistImage = findExistImage;\nexports.createOrUpdateImage = createOrUpdateImage;\nexports.isImageReady = isImageReady;","var smoothSpline = require(\"./smoothSpline\");\n\nvar smoothBezier = require(\"./smoothBezier\");\n\nfunction buildPath(ctx, shape, closePath) {\n var points = shape.points;\n var smooth = shape.smooth;\n\n if (points && points.length >= 2) {\n if (smooth && smooth !== 'spline') {\n var controlPoints = smoothBezier(points, smooth, closePath, shape.smoothConstraint);\n ctx.moveTo(points[0][0], points[0][1]);\n var len = points.length;\n\n for (var i = 0; i < (closePath ? len : len - 1); i++) {\n var cp1 = controlPoints[i * 2];\n var cp2 = controlPoints[i * 2 + 1];\n var p = points[(i + 1) % len];\n ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);\n }\n } else {\n if (smooth === 'spline') {\n points = smoothSpline(points, closePath);\n }\n\n ctx.moveTo(points[0][0], points[0][1]);\n\n for (var i = 1, l = points.length; i < l; i++) {\n ctx.lineTo(points[i][0], points[i][1]);\n }\n }\n\n closePath && ctx.closePath();\n }\n}\n\nexports.buildPath = buildPath;","/**\n * @param {Object} ctx\n * @param {Object} shape\n * @param {number} shape.x\n * @param {number} shape.y\n * @param {number} shape.width\n * @param {number} shape.height\n * @param {number} shape.r\n */\nfunction buildPath(ctx, shape) {\n var x = shape.x;\n var y = shape.y;\n var width = shape.width;\n var height = shape.height;\n var r = shape.r;\n var r1;\n var r2;\n var r3;\n var r4; // Convert width and height to positive for better borderRadius\n\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n\n if (typeof r === 'number') {\n r1 = r2 = r3 = r4 = r;\n } else if (r instanceof Array) {\n if (r.length === 1) {\n r1 = r2 = r3 = r4 = r[0];\n } else if (r.length === 2) {\n r1 = r3 = r[0];\n r2 = r4 = r[1];\n } else if (r.length === 3) {\n r1 = r[0];\n r2 = r4 = r[1];\n r3 = r[2];\n } else {\n r1 = r[0];\n r2 = r[1];\n r3 = r[2];\n r4 = r[3];\n }\n } else {\n r1 = r2 = r3 = r4 = 0;\n }\n\n var total;\n\n if (r1 + r2 > width) {\n total = r1 + r2;\n r1 *= width / total;\n r2 *= width / total;\n }\n\n if (r3 + r4 > width) {\n total = r3 + r4;\n r3 *= width / total;\n r4 *= width / total;\n }\n\n if (r2 + r3 > height) {\n total = r2 + r3;\n r2 *= height / total;\n r3 *= height / total;\n }\n\n if (r1 + r4 > height) {\n total = r1 + r4;\n r1 *= height / total;\n r4 *= height / total;\n }\n\n ctx.moveTo(x + r1, y);\n ctx.lineTo(x + width - r2, y);\n r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n ctx.lineTo(x + width, y + height - r3);\n r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n ctx.lineTo(x + r4, y + height);\n r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n ctx.lineTo(x, y + r1);\n r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n}\n\nexports.buildPath = buildPath;","var _vector = require(\"../../core/vector\");\n\nvar v2Min = _vector.min;\nvar v2Max = _vector.max;\nvar v2Scale = _vector.scale;\nvar v2Distance = _vector.distance;\nvar v2Add = _vector.add;\nvar v2Clone = _vector.clone;\nvar v2Sub = _vector.sub;\n\n/**\n * 贝塞尔平滑曲线\n * @module zrender/shape/util/smoothBezier\n * @author pissang (https://www.github.com/pissang)\n * Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * errorrik (errorrik@gmail.com)\n */\n\n/**\n * 贝塞尔平滑曲线\n * @alias module:zrender/shape/util/smoothBezier\n * @param {Array} points 线段顶点数组\n * @param {number} smooth 平滑等级, 0-1\n * @param {boolean} isLoop\n * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内\n * 比如 [[0, 0], [100, 100]], 这个包围盒会与\n * 整个折线的包围盒做一个并集用来约束控制点。\n * @param {Array} 计算出来的控制点数组\n */\nfunction _default(points, smooth, isLoop, constraint) {\n var cps = [];\n var v = [];\n var v1 = [];\n var v2 = [];\n var prevPoint;\n var nextPoint;\n var min;\n var max;\n\n if (constraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n\n for (var i = 0, len = points.length; i < len; i++) {\n v2Min(min, min, points[i]);\n v2Max(max, max, points[i]);\n } // 与指定的包围盒做并集\n\n\n v2Min(min, min, constraint[0]);\n v2Max(max, max, constraint[1]);\n }\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n } else {\n if (i === 0 || i === len - 1) {\n cps.push(v2Clone(points[i]));\n continue;\n } else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n\n v2Sub(v, nextPoint, prevPoint); // use degree to scale the handle length\n\n v2Scale(v, v, smooth);\n var d0 = v2Distance(point, prevPoint);\n var d1 = v2Distance(point, nextPoint);\n var sum = d0 + d1;\n\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n\n v2Scale(v1, v, -d0);\n v2Scale(v2, v, d1);\n var cp0 = v2Add([], point, v1);\n var cp1 = v2Add([], point, v2);\n\n if (constraint) {\n v2Max(cp0, cp0, min);\n v2Min(cp0, cp0, max);\n v2Max(cp1, cp1, min);\n v2Min(cp1, cp1, max);\n }\n\n cps.push(cp0);\n cps.push(cp1);\n }\n\n if (isLoop) {\n cps.push(cps.shift());\n }\n\n return cps;\n}\n\nmodule.exports = _default;","var _vector = require(\"../../core/vector\");\n\nvar v2Distance = _vector.distance;\n\n/**\n * Catmull-Rom spline 插值折线\n * @module zrender/shape/util/smoothSpline\n * @author pissang (https://www.github.com/pissang)\n * Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * errorrik (errorrik@gmail.com)\n */\n\n/**\n * @inner\n */\nfunction interpolate(p0, p1, p2, p3, t, t2, t3) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;\n}\n/**\n * @alias module:zrender/shape/util/smoothSpline\n * @param {Array} points 线段顶点数组\n * @param {boolean} isLoop\n * @return {Array}\n */\n\n\nfunction _default(points, isLoop) {\n var len = points.length;\n var ret = [];\n var distance = 0;\n\n for (var i = 1; i < len; i++) {\n distance += v2Distance(points[i - 1], points[i]);\n }\n\n var segs = distance / 2;\n segs = segs < len ? len : segs;\n\n for (var i = 0; i < segs; i++) {\n var pos = i / (segs - 1) * (isLoop ? len : len - 1);\n var idx = Math.floor(pos);\n var w = pos - idx;\n var p0;\n var p1 = points[idx % len];\n var p2;\n var p3;\n\n if (!isLoop) {\n p0 = points[idx === 0 ? idx : idx - 1];\n p2 = points[idx > len - 2 ? len - 1 : idx + 1];\n p3 = points[idx > len - 3 ? len - 1 : idx + 2];\n } else {\n p0 = points[(idx - 1 + len) % len];\n p2 = points[(idx + 1) % len];\n p3 = points[(idx + 2) % len];\n }\n\n var w2 = w * w;\n var w3 = w * w2;\n ret.push([interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3), interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)]);\n }\n\n return ret;\n}\n\nmodule.exports = _default;","/**\n * Sub-pixel optimize for canvas rendering, prevent from blur\n * when rendering a thin vertical/horizontal line.\n */\nvar round = Math.round;\n/**\n * Sub pixel optimize line for canvas\n *\n * @param {Object} outputShape The modification will be performed on `outputShape`.\n * `outputShape` and `inputShape` can be the same object.\n * `outputShape` object can be used repeatly, because all of\n * the `x1`, `x2`, `y1`, `y2` will be assigned in this method.\n * @param {Object} [inputShape]\n * @param {number} [inputShape.x1]\n * @param {number} [inputShape.y1]\n * @param {number} [inputShape.x2]\n * @param {number} [inputShape.y2]\n * @param {Object} [style]\n * @param {number} [style.lineWidth] If `null`/`undefined`/`0`, do not optimize.\n */\n\nfunction subPixelOptimizeLine(outputShape, inputShape, style) {\n if (!inputShape) {\n return;\n }\n\n var x1 = inputShape.x1;\n var x2 = inputShape.x2;\n var y1 = inputShape.y1;\n var y2 = inputShape.y2;\n outputShape.x1 = x1;\n outputShape.x2 = x2;\n outputShape.y1 = y1;\n outputShape.y2 = y2;\n var lineWidth = style && style.lineWidth;\n\n if (!lineWidth) {\n return;\n }\n\n if (round(x1 * 2) === round(x2 * 2)) {\n outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);\n }\n\n if (round(y1 * 2) === round(y2 * 2)) {\n outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);\n }\n}\n/**\n * Sub pixel optimize rect for canvas\n *\n * @param {Object} outputShape The modification will be performed on `outputShape`.\n * `outputShape` and `inputShape` can be the same object.\n * `outputShape` object can be used repeatly, because all of\n * the `x`, `y`, `width`, `height` will be assigned in this method.\n * @param {Object} [inputShape]\n * @param {number} [inputShape.x]\n * @param {number} [inputShape.y]\n * @param {number} [inputShape.width]\n * @param {number} [inputShape.height]\n * @param {Object} [style]\n * @param {number} [style.lineWidth] If `null`/`undefined`/`0`, do not optimize.\n */\n\n\nfunction subPixelOptimizeRect(outputShape, inputShape, style) {\n if (!inputShape) {\n return;\n }\n\n var originX = inputShape.x;\n var originY = inputShape.y;\n var originWidth = inputShape.width;\n var originHeight = inputShape.height;\n outputShape.x = originX;\n outputShape.y = originY;\n outputShape.width = originWidth;\n outputShape.height = originHeight;\n var lineWidth = style && style.lineWidth;\n\n if (!lineWidth) {\n return;\n }\n\n outputShape.x = subPixelOptimize(originX, lineWidth, true);\n outputShape.y = subPixelOptimize(originY, lineWidth, true);\n outputShape.width = Math.max(subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x, originWidth === 0 ? 0 : 1);\n outputShape.height = Math.max(subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y, originHeight === 0 ? 0 : 1);\n}\n/**\n * Sub pixel optimize for canvas\n *\n * @param {number} position Coordinate, such as x, y\n * @param {number} lineWidth If `null`/`undefined`/`0`, do not optimize.\n * @param {boolean=} positiveOrNegative Default false (negative).\n * @return {number} Optimized position.\n */\n\n\nfunction subPixelOptimize(position, lineWidth, positiveOrNegative) {\n if (!lineWidth) {\n return position;\n } // Assure that (position + lineWidth / 2) is near integer edge,\n // otherwise line will be fuzzy in canvas.\n\n\n var doubledPosition = round(position * 2);\n return (doubledPosition + round(lineWidth)) % 2 === 0 ? doubledPosition / 2 : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n\nexports.subPixelOptimizeLine = subPixelOptimizeLine;\nexports.subPixelOptimizeRect = subPixelOptimizeRect;\nexports.subPixelOptimize = subPixelOptimize;","var _util = require(\"../../core/util\");\n\nvar retrieve2 = _util.retrieve2;\nvar retrieve3 = _util.retrieve3;\nvar each = _util.each;\nvar normalizeCssArray = _util.normalizeCssArray;\nvar isString = _util.isString;\nvar isObject = _util.isObject;\n\nvar textContain = require(\"../../contain/text\");\n\nvar roundRectHelper = require(\"./roundRect\");\n\nvar imageHelper = require(\"./image\");\n\nvar fixShadow = require(\"./fixShadow\");\n\nvar _constant = require(\"../constant\");\n\nvar ContextCachedBy = _constant.ContextCachedBy;\nvar WILL_BE_RESTORED = _constant.WILL_BE_RESTORED;\nvar DEFAULT_FONT = textContain.DEFAULT_FONT; // TODO: Have not support 'start', 'end' yet.\n\nvar VALID_TEXT_ALIGN = {\n left: 1,\n right: 1,\n center: 1\n};\nvar VALID_TEXT_VERTICAL_ALIGN = {\n top: 1,\n bottom: 1,\n middle: 1\n}; // Different from `STYLE_COMMON_PROPS` of `graphic/Style`,\n// the default value of shadowColor is `'transparent'`.\n\nvar SHADOW_STYLE_COMMON_PROPS = [['textShadowBlur', 'shadowBlur', 0], ['textShadowOffsetX', 'shadowOffsetX', 0], ['textShadowOffsetY', 'shadowOffsetY', 0], ['textShadowColor', 'shadowColor', 'transparent']];\nvar _tmpTextPositionResult = {};\nvar _tmpBoxPositionResult = {};\n/**\n * @param {module:zrender/graphic/Style} style\n * @return {module:zrender/graphic/Style} The input style.\n */\n\nfunction normalizeTextStyle(style) {\n normalizeStyle(style);\n each(style.rich, normalizeStyle);\n return style;\n}\n\nfunction normalizeStyle(style) {\n if (style) {\n style.font = textContain.makeFont(style);\n var textAlign = style.textAlign;\n textAlign === 'middle' && (textAlign = 'center');\n style.textAlign = textAlign == null || VALID_TEXT_ALIGN[textAlign] ? textAlign : 'left'; // Compatible with textBaseline.\n\n var textVerticalAlign = style.textVerticalAlign || style.textBaseline;\n textVerticalAlign === 'center' && (textVerticalAlign = 'middle');\n style.textVerticalAlign = textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign] ? textVerticalAlign : 'top';\n var textPadding = style.textPadding;\n\n if (textPadding) {\n style.textPadding = normalizeCssArray(style.textPadding);\n }\n }\n}\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} text\n * @param {module:zrender/graphic/Style} style\n * @param {Object|boolean} [rect] {x, y, width, height}\n * If set false, rect text is not used.\n * @param {Element|module:zrender/graphic/helper/constant.WILL_BE_RESTORED} [prevEl] For ctx prop cache.\n */\n\n\nfunction renderText(hostEl, ctx, text, style, rect, prevEl) {\n style.rich ? renderRichText(hostEl, ctx, text, style, rect, prevEl) : renderPlainText(hostEl, ctx, text, style, rect, prevEl);\n} // Avoid setting to ctx according to prevEl if possible for\n// performance in scenarios of large amount text.\n\n\nfunction renderPlainText(hostEl, ctx, text, style, rect, prevEl) {\n 'use strict';\n\n var needDrawBg = needDrawBackground(style);\n var prevStyle;\n var checkCache = false;\n var cachedByMe = ctx.__attrCachedBy === ContextCachedBy.PLAIN_TEXT; // Only take and check cache for `Text` el, but not RectText.\n\n if (prevEl !== WILL_BE_RESTORED) {\n if (prevEl) {\n prevStyle = prevEl.style;\n checkCache = !needDrawBg && cachedByMe && prevStyle;\n } // Prevent from using cache in `Style::bind`, because of the case:\n // ctx property is modified by other properties than `Style::bind`\n // used, and Style::bind is called next.\n\n\n ctx.__attrCachedBy = needDrawBg ? ContextCachedBy.NONE : ContextCachedBy.PLAIN_TEXT;\n } // Since this will be restored, prevent from using these props to check cache in the next\n // entering of this method. But do not need to clear other cache like `Style::bind`.\n else if (cachedByMe) {\n ctx.__attrCachedBy = ContextCachedBy.NONE;\n }\n\n var styleFont = style.font || DEFAULT_FONT; // PENDING\n // Only `Text` el set `font` and keep it (`RectText` will restore). So theoretically\n // we can make font cache on ctx, which can cache for text el that are discontinuous.\n // But layer save/restore needed to be considered.\n // if (styleFont !== ctx.__fontCache) {\n // ctx.font = styleFont;\n // if (prevEl !== WILL_BE_RESTORED) {\n // ctx.__fontCache = styleFont;\n // }\n // }\n\n if (!checkCache || styleFont !== (prevStyle.font || DEFAULT_FONT)) {\n ctx.font = styleFont;\n } // Use the final font from context-2d, because the final\n // font might not be the style.font when it is illegal.\n // But get `ctx.font` might be time consuming.\n\n\n var computedFont = hostEl.__computedFont;\n\n if (hostEl.__styleFont !== styleFont) {\n hostEl.__styleFont = styleFont;\n computedFont = hostEl.__computedFont = ctx.font;\n }\n\n var textPadding = style.textPadding;\n var textLineHeight = style.textLineHeight;\n var contentBlock = hostEl.__textCotentBlock;\n\n if (!contentBlock || hostEl.__dirtyText) {\n contentBlock = hostEl.__textCotentBlock = textContain.parsePlainText(text, computedFont, textPadding, textLineHeight, style.truncate);\n }\n\n var outerHeight = contentBlock.outerHeight;\n var textLines = contentBlock.lines;\n var lineHeight = contentBlock.lineHeight;\n var boxPos = getBoxPosition(_tmpBoxPositionResult, hostEl, style, rect);\n var baseX = boxPos.baseX;\n var baseY = boxPos.baseY;\n var textAlign = boxPos.textAlign || 'left';\n var textVerticalAlign = boxPos.textVerticalAlign; // Origin of textRotation should be the base point of text drawing.\n\n applyTextRotation(ctx, style, rect, baseX, baseY);\n var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n var textX = baseX;\n var textY = boxY;\n\n if (needDrawBg || textPadding) {\n // Consider performance, do not call getTextWidth util necessary.\n var textWidth = textContain.getWidth(text, computedFont);\n var outerWidth = textWidth;\n textPadding && (outerWidth += textPadding[1] + textPadding[3]);\n var boxX = textContain.adjustTextX(baseX, outerWidth, textAlign);\n needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);\n\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n textY += textPadding[0];\n }\n } // Always set textAlign and textBase line, because it is difficute to calculate\n // textAlign from prevEl, and we dont sure whether textAlign will be reset if\n // font set happened.\n\n\n ctx.textAlign = textAlign; // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n\n ctx.textBaseline = 'middle'; // Set text opacity\n\n ctx.globalAlpha = style.opacity || 1; // Always set shadowBlur and shadowOffset to avoid leak from displayable.\n\n for (var i = 0; i < SHADOW_STYLE_COMMON_PROPS.length; i++) {\n var propItem = SHADOW_STYLE_COMMON_PROPS[i];\n var styleProp = propItem[0];\n var ctxProp = propItem[1];\n var val = style[styleProp];\n\n if (!checkCache || val !== prevStyle[styleProp]) {\n ctx[ctxProp] = fixShadow(ctx, ctxProp, val || propItem[2]);\n }\n } // `textBaseline` is set as 'middle'.\n\n\n textY += lineHeight / 2;\n var textStrokeWidth = style.textStrokeWidth;\n var textStrokeWidthPrev = checkCache ? prevStyle.textStrokeWidth : null;\n var strokeWidthChanged = !checkCache || textStrokeWidth !== textStrokeWidthPrev;\n var strokeChanged = !checkCache || strokeWidthChanged || style.textStroke !== prevStyle.textStroke;\n var textStroke = getStroke(style.textStroke, textStrokeWidth);\n var textFill = getFill(style.textFill);\n\n if (textStroke) {\n if (strokeWidthChanged) {\n ctx.lineWidth = textStrokeWidth;\n }\n\n if (strokeChanged) {\n ctx.strokeStyle = textStroke;\n }\n }\n\n if (textFill) {\n if (!checkCache || style.textFill !== prevStyle.textFill) {\n ctx.fillStyle = textFill;\n }\n } // Optimize simply, in most cases only one line exists.\n\n\n if (textLines.length === 1) {\n // Fill after stroke so the outline will not cover the main part.\n textStroke && ctx.strokeText(textLines[0], textX, textY);\n textFill && ctx.fillText(textLines[0], textX, textY);\n } else {\n for (var i = 0; i < textLines.length; i++) {\n // Fill after stroke so the outline will not cover the main part.\n textStroke && ctx.strokeText(textLines[i], textX, textY);\n textFill && ctx.fillText(textLines[i], textX, textY);\n textY += lineHeight;\n }\n }\n}\n\nfunction renderRichText(hostEl, ctx, text, style, rect, prevEl) {\n // Do not do cache for rich text because of the complexity.\n // But `RectText` this will be restored, do not need to clear other cache like `Style::bind`.\n if (prevEl !== WILL_BE_RESTORED) {\n ctx.__attrCachedBy = ContextCachedBy.NONE;\n }\n\n var contentBlock = hostEl.__textCotentBlock;\n\n if (!contentBlock || hostEl.__dirtyText) {\n contentBlock = hostEl.__textCotentBlock = textContain.parseRichText(text, style);\n }\n\n drawRichText(hostEl, ctx, contentBlock, style, rect);\n}\n\nfunction drawRichText(hostEl, ctx, contentBlock, style, rect) {\n var contentWidth = contentBlock.width;\n var outerWidth = contentBlock.outerWidth;\n var outerHeight = contentBlock.outerHeight;\n var textPadding = style.textPadding;\n var boxPos = getBoxPosition(_tmpBoxPositionResult, hostEl, style, rect);\n var baseX = boxPos.baseX;\n var baseY = boxPos.baseY;\n var textAlign = boxPos.textAlign;\n var textVerticalAlign = boxPos.textVerticalAlign; // Origin of textRotation should be the base point of text drawing.\n\n applyTextRotation(ctx, style, rect, baseX, baseY);\n var boxX = textContain.adjustTextX(baseX, outerWidth, textAlign);\n var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n var xLeft = boxX;\n var lineTop = boxY;\n\n if (textPadding) {\n xLeft += textPadding[3];\n lineTop += textPadding[0];\n }\n\n var xRight = xLeft + contentWidth;\n needDrawBackground(style) && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);\n\n for (var i = 0; i < contentBlock.lines.length; i++) {\n var line = contentBlock.lines[i];\n var tokens = line.tokens;\n var tokenCount = tokens.length;\n var lineHeight = line.lineHeight;\n var usedWidth = line.width;\n var leftIndex = 0;\n var lineXLeft = xLeft;\n var lineXRight = xRight;\n var rightIndex = tokenCount - 1;\n var token;\n\n while (leftIndex < tokenCount && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left')) {\n placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left');\n usedWidth -= token.width;\n lineXLeft += token.width;\n leftIndex++;\n }\n\n while (rightIndex >= 0 && (token = tokens[rightIndex], token.textAlign === 'right')) {\n placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right');\n usedWidth -= token.width;\n lineXRight -= token.width;\n rightIndex--;\n } // The other tokens are placed as textAlign 'center' if there is enough space.\n\n\n lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2;\n\n while (leftIndex <= rightIndex) {\n token = tokens[leftIndex]; // Consider width specified by user, use 'center' rather than 'left'.\n\n placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center');\n lineXLeft += token.width;\n leftIndex++;\n }\n\n lineTop += lineHeight;\n }\n}\n\nfunction applyTextRotation(ctx, style, rect, x, y) {\n // textRotation only apply in RectText.\n if (rect && style.textRotation) {\n var origin = style.textOrigin;\n\n if (origin === 'center') {\n x = rect.width / 2 + rect.x;\n y = rect.height / 2 + rect.y;\n } else if (origin) {\n x = origin[0] + rect.x;\n y = origin[1] + rect.y;\n }\n\n ctx.translate(x, y); // Positive: anticlockwise\n\n ctx.rotate(-style.textRotation);\n ctx.translate(-x, -y);\n }\n}\n\nfunction placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) {\n var tokenStyle = style.rich[token.styleName] || {};\n tokenStyle.text = token.text; // 'ctx.textBaseline' is always set as 'middle', for sake of\n // the bias of \"Microsoft YaHei\".\n\n var textVerticalAlign = token.textVerticalAlign;\n var y = lineTop + lineHeight / 2;\n\n if (textVerticalAlign === 'top') {\n y = lineTop + token.height / 2;\n } else if (textVerticalAlign === 'bottom') {\n y = lineTop + lineHeight - token.height / 2;\n }\n\n !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground(hostEl, ctx, tokenStyle, textAlign === 'right' ? x - token.width : textAlign === 'center' ? x - token.width / 2 : x, y - token.height / 2, token.width, token.height);\n var textPadding = token.textPadding;\n\n if (textPadding) {\n x = getTextXForPadding(x, textAlign, textPadding);\n y -= token.height / 2 - textPadding[2] - token.textHeight / 2;\n }\n\n setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0));\n setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent');\n setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0));\n setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0));\n setCtx(ctx, 'textAlign', textAlign); // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n\n setCtx(ctx, 'textBaseline', 'middle');\n setCtx(ctx, 'font', token.font || DEFAULT_FONT);\n var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth);\n var textFill = getFill(tokenStyle.textFill || style.textFill);\n var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth); // Fill after stroke so the outline will not cover the main part.\n\n if (textStroke) {\n setCtx(ctx, 'lineWidth', textStrokeWidth);\n setCtx(ctx, 'strokeStyle', textStroke);\n ctx.strokeText(token.text, x, y);\n }\n\n if (textFill) {\n setCtx(ctx, 'fillStyle', textFill);\n ctx.fillText(token.text, x, y);\n }\n}\n\nfunction needDrawBackground(style) {\n return !!(style.textBackgroundColor || style.textBorderWidth && style.textBorderColor);\n} // style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius, text}\n// shape: {x, y, width, height}\n\n\nfunction drawBackground(hostEl, ctx, style, x, y, width, height) {\n var textBackgroundColor = style.textBackgroundColor;\n var textBorderWidth = style.textBorderWidth;\n var textBorderColor = style.textBorderColor;\n var isPlainBg = isString(textBackgroundColor);\n setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0);\n setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent');\n setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0);\n setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0);\n\n if (isPlainBg || textBorderWidth && textBorderColor) {\n ctx.beginPath();\n var textBorderRadius = style.textBorderRadius;\n\n if (!textBorderRadius) {\n ctx.rect(x, y, width, height);\n } else {\n roundRectHelper.buildPath(ctx, {\n x: x,\n y: y,\n width: width,\n height: height,\n r: textBorderRadius\n });\n }\n\n ctx.closePath();\n }\n\n if (isPlainBg) {\n setCtx(ctx, 'fillStyle', textBackgroundColor);\n\n if (style.fillOpacity != null) {\n var originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.fillOpacity * style.opacity;\n ctx.fill();\n ctx.globalAlpha = originalGlobalAlpha;\n } else {\n ctx.fill();\n }\n } else if (isObject(textBackgroundColor)) {\n var image = textBackgroundColor.image;\n image = imageHelper.createOrUpdateImage(image, null, hostEl, onBgImageLoaded, textBackgroundColor);\n\n if (image && imageHelper.isImageReady(image)) {\n ctx.drawImage(image, x, y, width, height);\n }\n }\n\n if (textBorderWidth && textBorderColor) {\n setCtx(ctx, 'lineWidth', textBorderWidth);\n setCtx(ctx, 'strokeStyle', textBorderColor);\n\n if (style.strokeOpacity != null) {\n var originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.strokeOpacity * style.opacity;\n ctx.stroke();\n ctx.globalAlpha = originalGlobalAlpha;\n } else {\n ctx.stroke();\n }\n }\n}\n\nfunction onBgImageLoaded(image, textBackgroundColor) {\n // Replace image, so that `contain/text.js#parseRichText`\n // will get correct result in next tick.\n textBackgroundColor.image = image;\n}\n\nfunction getBoxPosition(out, hostEl, style, rect) {\n var baseX = style.x || 0;\n var baseY = style.y || 0;\n var textAlign = style.textAlign;\n var textVerticalAlign = style.textVerticalAlign; // Text position represented by coord\n\n if (rect) {\n var textPosition = style.textPosition;\n\n if (textPosition instanceof Array) {\n // Percent\n baseX = rect.x + parsePercent(textPosition[0], rect.width);\n baseY = rect.y + parsePercent(textPosition[1], rect.height);\n } else {\n var res = hostEl && hostEl.calculateTextPosition ? hostEl.calculateTextPosition(_tmpTextPositionResult, style, rect) : textContain.calculateTextPosition(_tmpTextPositionResult, style, rect);\n baseX = res.x;\n baseY = res.y; // Default align and baseline when has textPosition\n\n textAlign = textAlign || res.textAlign;\n textVerticalAlign = textVerticalAlign || res.textVerticalAlign;\n } // textOffset is only support in RectText, otherwise\n // we have to adjust boundingRect for textOffset.\n\n\n var textOffset = style.textOffset;\n\n if (textOffset) {\n baseX += textOffset[0];\n baseY += textOffset[1];\n }\n }\n\n out = out || {};\n out.baseX = baseX;\n out.baseY = baseY;\n out.textAlign = textAlign;\n out.textVerticalAlign = textVerticalAlign;\n return out;\n}\n\nfunction setCtx(ctx, prop, value) {\n ctx[prop] = fixShadow(ctx, prop, value);\n return ctx[prop];\n}\n/**\n * @param {string} [stroke] If specified, do not check style.textStroke.\n * @param {string} [lineWidth] If specified, do not check style.textStroke.\n * @param {number} style\n */\n\n\nfunction getStroke(stroke, lineWidth) {\n return stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none' ? null // TODO pattern and gradient?\n : stroke.image || stroke.colorStops ? '#000' : stroke;\n}\n\nfunction getFill(fill) {\n return fill == null || fill === 'none' ? null // TODO pattern and gradient?\n : fill.image || fill.colorStops ? '#000' : fill;\n}\n\nfunction parsePercent(value, maxValue) {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n\n return parseFloat(value);\n }\n\n return value;\n}\n\nfunction getTextXForPadding(x, textAlign, textPadding) {\n return textAlign === 'right' ? x - textPadding[1] : textAlign === 'center' ? x + textPadding[3] / 2 - textPadding[1] / 2 : x + textPadding[3];\n}\n/**\n * @param {string} text\n * @param {module:zrender/Style} style\n * @return {boolean}\n */\n\n\nfunction needDrawText(text, style) {\n return text != null && (text || style.textBackgroundColor || style.textBorderWidth && style.textBorderColor || style.textPadding);\n}\n\nexports.normalizeTextStyle = normalizeTextStyle;\nexports.renderText = renderText;\nexports.getBoxPosition = getBoxPosition;\nexports.getStroke = getStroke;\nexports.getFill = getFill;\nexports.parsePercent = parsePercent;\nexports.needDrawText = needDrawText;","var textHelper = require(\"../helper/text\");\n\nvar BoundingRect = require(\"../../core/BoundingRect\");\n\nvar _constant = require(\"../constant\");\n\nvar WILL_BE_RESTORED = _constant.WILL_BE_RESTORED;\n\n/**\n * Mixin for drawing text in a element bounding rect\n * @module zrender/mixin/RectText\n */\nvar tmpRect = new BoundingRect();\n\nvar RectText = function () {};\n\nRectText.prototype = {\n constructor: RectText,\n\n /**\n * Draw text in a rect with specified position.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} rect Displayable rect\n */\n drawRectText: function (ctx, rect) {\n var style = this.style;\n rect = style.textRect || rect; // Optimize, avoid normalize every time.\n\n this.__dirty && textHelper.normalizeTextStyle(style, true);\n var text = style.text; // Convert to string\n\n text != null && (text += '');\n\n if (!textHelper.needDrawText(text, style)) {\n return;\n } // FIXME\n // Do not provide prevEl to `textHelper.renderText` for ctx prop cache,\n // but use `ctx.save()` and `ctx.restore()`. Because the cache for rect\n // text propably break the cache for its host elements.\n\n\n ctx.save(); // Transform rect to view space\n\n var transform = this.transform;\n\n if (!style.transformText) {\n if (transform) {\n tmpRect.copy(rect);\n tmpRect.applyTransform(transform);\n rect = tmpRect;\n }\n } else {\n this.setTransform(ctx);\n } // transformText and textRotation can not be used at the same time.\n\n\n textHelper.renderText(this, ctx, text, style, rect, WILL_BE_RESTORED);\n ctx.restore();\n }\n};\nvar _default = RectText;\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 圆弧\n * @module zrender/graphic/shape/Arc\n */\nvar _default = Path.extend({\n type: 'arc',\n shape: {\n cx: 0,\n cy: 0,\n r: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: true\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var r = Math.max(shape.r, 0);\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var clockwise = shape.clockwise;\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar vec2 = require(\"../../core/vector\");\n\nvar _curve = require(\"../../core/curve\");\n\nvar quadraticSubdivide = _curve.quadraticSubdivide;\nvar cubicSubdivide = _curve.cubicSubdivide;\nvar quadraticAt = _curve.quadraticAt;\nvar cubicAt = _curve.cubicAt;\nvar quadraticDerivativeAt = _curve.quadraticDerivativeAt;\nvar cubicDerivativeAt = _curve.cubicDerivativeAt;\n\n/**\n * 贝塞尔曲线\n * @module zrender/shape/BezierCurve\n */\nvar out = [];\n\nfunction someVectorAt(shape, t, isTangent) {\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n\n if (cpx2 === null || cpy2 === null) {\n return [(isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t), (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)];\n } else {\n return [(isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t), (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)];\n }\n}\n\nvar _default = Path.extend({\n type: 'bezier-curve',\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n cpx1: 0,\n cpy1: 0,\n // cpx2: 0,\n // cpy2: 0\n // Curve show percent, for animating\n percent: 1\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n var x1 = shape.x1;\n var y1 = shape.y1;\n var x2 = shape.x2;\n var y2 = shape.y2;\n var cpx1 = shape.cpx1;\n var cpy1 = shape.cpy1;\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n var percent = shape.percent;\n\n if (percent === 0) {\n return;\n }\n\n ctx.moveTo(x1, y1);\n\n if (cpx2 == null || cpy2 == null) {\n if (percent < 1) {\n quadraticSubdivide(x1, cpx1, x2, percent, out);\n cpx1 = out[1];\n x2 = out[2];\n quadraticSubdivide(y1, cpy1, y2, percent, out);\n cpy1 = out[1];\n y2 = out[2];\n }\n\n ctx.quadraticCurveTo(cpx1, cpy1, x2, y2);\n } else {\n if (percent < 1) {\n cubicSubdivide(x1, cpx1, cpx2, x2, percent, out);\n cpx1 = out[1];\n cpx2 = out[2];\n x2 = out[3];\n cubicSubdivide(y1, cpy1, cpy2, y2, percent, out);\n cpy1 = out[1];\n cpy2 = out[2];\n y2 = out[3];\n }\n\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n }\n },\n\n /**\n * Get point at percent\n * @param {number} t\n * @return {Array.}\n */\n pointAt: function (t) {\n return someVectorAt(this.shape, t, false);\n },\n\n /**\n * Get tangent at percent\n * @param {number} t\n * @return {Array.}\n */\n tangentAt: function (t) {\n var p = someVectorAt(this.shape, t, true);\n return vec2.normalize(p, p);\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 圆形\n * @module zrender/shape/Circle\n */\nvar _default = Path.extend({\n type: 'circle',\n shape: {\n cx: 0,\n cy: 0,\n r: 0\n },\n buildPath: function (ctx, shape, inBundle) {\n // Better stroking in ShapeBundle\n // Always do it may have performence issue ( fill may be 2x more cost)\n if (inBundle) {\n ctx.moveTo(shape.cx + shape.r, shape.cy);\n } // else {\n // if (ctx.allocate && !ctx.data.length) {\n // ctx.allocate(ctx.CMD_MEM_SIZE.A);\n // }\n // }\n // Better stroking in ShapeBundle\n // ctx.moveTo(shape.cx + shape.r, shape.cy);\n\n\n ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true);\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 椭圆形状\n * @module zrender/graphic/shape/Ellipse\n */\nvar _default = Path.extend({\n type: 'ellipse',\n shape: {\n cx: 0,\n cy: 0,\n rx: 0,\n ry: 0\n },\n buildPath: function (ctx, shape) {\n var k = 0.5522848;\n var x = shape.cx;\n var y = shape.cy;\n var a = shape.rx;\n var b = shape.ry;\n var ox = a * k; // 水平控制点偏移量\n\n var oy = b * k; // 垂直控制点偏移量\n // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线\n\n ctx.moveTo(x - a, y);\n ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);\n ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);\n ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);\n ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);\n ctx.closePath();\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar _subPixelOptimize = require(\"../helper/subPixelOptimize\");\n\nvar subPixelOptimizeLine = _subPixelOptimize.subPixelOptimizeLine;\n\n/**\n * 直线\n * @module zrender/graphic/shape/Line\n */\n// Avoid create repeatly.\nvar subPixelOptimizeOutputShape = {};\n\nvar _default = Path.extend({\n type: 'line',\n shape: {\n // Start point\n x1: 0,\n y1: 0,\n // End point\n x2: 0,\n y2: 0,\n percent: 1\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n var x1;\n var y1;\n var x2;\n var y2;\n\n if (this.subPixelOptimize) {\n subPixelOptimizeLine(subPixelOptimizeOutputShape, shape, this.style);\n x1 = subPixelOptimizeOutputShape.x1;\n y1 = subPixelOptimizeOutputShape.y1;\n x2 = subPixelOptimizeOutputShape.x2;\n y2 = subPixelOptimizeOutputShape.y2;\n } else {\n x1 = shape.x1;\n y1 = shape.y1;\n x2 = shape.x2;\n y2 = shape.y2;\n }\n\n var percent = shape.percent;\n\n if (percent === 0) {\n return;\n }\n\n ctx.moveTo(x1, y1);\n\n if (percent < 1) {\n x2 = x1 * (1 - percent) + x2 * percent;\n y2 = y1 * (1 - percent) + y2 * percent;\n }\n\n ctx.lineTo(x2, y2);\n },\n\n /**\n * Get point at percent\n * @param {number} percent\n * @return {Array.}\n */\n pointAt: function (p) {\n var shape = this.shape;\n return [shape.x1 * (1 - p) + shape.x2 * p, shape.y1 * (1 - p) + shape.y2 * p];\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar polyHelper = require(\"../helper/poly\");\n\n/**\n * 多边形\n * @module zrender/shape/Polygon\n */\nvar _default = Path.extend({\n type: 'polygon',\n shape: {\n points: null,\n smooth: false,\n smoothConstraint: null\n },\n buildPath: function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, true);\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar polyHelper = require(\"../helper/poly\");\n\n/**\n * @module zrender/graphic/shape/Polyline\n */\nvar _default = Path.extend({\n type: 'polyline',\n shape: {\n points: null,\n smooth: false,\n smoothConstraint: null\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, false);\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar roundRectHelper = require(\"../helper/roundRect\");\n\nvar _subPixelOptimize = require(\"../helper/subPixelOptimize\");\n\nvar subPixelOptimizeRect = _subPixelOptimize.subPixelOptimizeRect;\n\n/**\n * 矩形\n * @module zrender/graphic/shape/Rect\n */\n// Avoid create repeatly.\nvar subPixelOptimizeOutputShape = {};\n\nvar _default = Path.extend({\n type: 'rect',\n shape: {\n // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4\n // r缩写为1 相当于 [1, 1, 1, 1]\n // r缩写为[1] 相当于 [1, 1, 1, 1]\n // r缩写为[1, 2] 相当于 [1, 2, 1, 2]\n // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]\n r: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n buildPath: function (ctx, shape) {\n var x;\n var y;\n var width;\n var height;\n\n if (this.subPixelOptimize) {\n subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style);\n x = subPixelOptimizeOutputShape.x;\n y = subPixelOptimizeOutputShape.y;\n width = subPixelOptimizeOutputShape.width;\n height = subPixelOptimizeOutputShape.height;\n subPixelOptimizeOutputShape.r = shape.r;\n shape = subPixelOptimizeOutputShape;\n } else {\n x = shape.x;\n y = shape.y;\n width = shape.width;\n height = shape.height;\n }\n\n if (!shape.r) {\n ctx.rect(x, y, width, height);\n } else {\n roundRectHelper.buildPath(ctx, shape);\n }\n\n ctx.closePath();\n return;\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 圆环\n * @module zrender/graphic/shape/Ring\n */\nvar _default = Path.extend({\n type: 'ring',\n shape: {\n cx: 0,\n cy: 0,\n r: 0,\n r0: 0\n },\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var PI2 = Math.PI * 2;\n ctx.moveTo(x + shape.r, y);\n ctx.arc(x, y, shape.r, 0, PI2, false);\n ctx.moveTo(x + shape.r0, y);\n ctx.arc(x, y, shape.r0, 0, PI2, true);\n }\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar fixClipWithShadow = require(\"../helper/fixClipWithShadow\");\n\n/**\n * 扇形\n * @module zrender/graphic/shape/Sector\n */\nvar _default = Path.extend({\n type: 'sector',\n shape: {\n cx: 0,\n cy: 0,\n r0: 0,\n r: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: true\n },\n brush: fixClipWithShadow(Path.prototype.brush),\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var r0 = Math.max(shape.r0 || 0, 0);\n var r = Math.max(shape.r, 0);\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var clockwise = shape.clockwise;\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n ctx.moveTo(unitX * r0 + x, unitY * r0 + y);\n ctx.lineTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n ctx.lineTo(Math.cos(endAngle) * r0 + x, Math.sin(endAngle) * r0 + y);\n\n if (r0 !== 0) {\n ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n }\n\n ctx.closePath();\n }\n});\n\nmodule.exports = _default;","var Animator = require(\"../animation/Animator\");\n\nvar logError = require(\"../core/log\");\n\nvar _util = require(\"../core/util\");\n\nvar isString = _util.isString;\nvar isFunction = _util.isFunction;\nvar isObject = _util.isObject;\nvar isArrayLike = _util.isArrayLike;\nvar indexOf = _util.indexOf;\n\n/**\n * @alias module:zrender/mixin/Animatable\n * @constructor\n */\nvar Animatable = function () {\n /**\n * @type {Array.}\n * @readOnly\n */\n this.animators = [];\n};\n\nAnimatable.prototype = {\n constructor: Animatable,\n\n /**\n * 动画\n *\n * @param {string} path The path to fetch value from object, like 'a.b.c'.\n * @param {boolean} [loop] Whether to loop animation.\n * @return {module:zrender/animation/Animator}\n * @example:\n * el.animate('style', false)\n * .when(1000, {x: 10} )\n * .done(function(){ // Animation done })\n * .start()\n */\n animate: function (path, loop) {\n var target;\n var animatingShape = false;\n var el = this;\n var zr = this.__zr;\n\n if (path) {\n var pathSplitted = path.split('.');\n var prop = el; // If animating shape\n\n animatingShape = pathSplitted[0] === 'shape';\n\n for (var i = 0, l = pathSplitted.length; i < l; i++) {\n if (!prop) {\n continue;\n }\n\n prop = prop[pathSplitted[i]];\n }\n\n if (prop) {\n target = prop;\n }\n } else {\n target = el;\n }\n\n if (!target) {\n logError('Property \"' + path + '\" is not existed in element ' + el.id);\n return;\n }\n\n var animators = el.animators;\n var animator = new Animator(target, loop);\n animator.during(function (target) {\n el.dirty(animatingShape);\n }).done(function () {\n // FIXME Animator will not be removed if use `Animator#stop` to stop animation\n animators.splice(indexOf(animators, animator), 1);\n });\n animators.push(animator); // If animate after added to the zrender\n\n if (zr) {\n zr.animation.addAnimator(animator);\n }\n\n return animator;\n },\n\n /**\n * 停止动画\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stopAnimation: function (forwardToLast) {\n var animators = this.animators;\n var len = animators.length;\n\n for (var i = 0; i < len; i++) {\n animators[i].stop(forwardToLast);\n }\n\n animators.length = 0;\n return this;\n },\n\n /**\n * Caution: this method will stop previous animation.\n * So do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n * @param {Object} target\n * @param {number} [time=500] Time in ms\n * @param {string} [easing='linear']\n * @param {number} [delay=0]\n * @param {Function} [callback]\n * @param {Function} [forceAnimate] Prevent stop animation and callback\n * immediently when target values are the same as current values.\n *\n * @example\n * // Animate position\n * el.animateTo({\n * position: [10, 10]\n * }, function () { // done })\n *\n * // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing\n * el.animateTo({\n * shape: {\n * width: 500\n * },\n * style: {\n * fill: 'red'\n * }\n * position: [10, 10]\n * }, 100, 100, 'cubicOut', function () { // done })\n */\n // TODO Return animation key\n animateTo: function (target, time, delay, easing, callback, forceAnimate) {\n animateTo(this, target, time, delay, easing, callback, forceAnimate);\n },\n\n /**\n * Animate from the target state to current state.\n * The params and the return value are the same as `this.animateTo`.\n */\n animateFrom: function (target, time, delay, easing, callback, forceAnimate) {\n animateTo(this, target, time, delay, easing, callback, forceAnimate, true);\n }\n};\n\nfunction animateTo(animatable, target, time, delay, easing, callback, forceAnimate, reverse) {\n // animateTo(target, time, easing, callback);\n if (isString(delay)) {\n callback = easing;\n easing = delay;\n delay = 0;\n } // animateTo(target, time, delay, callback);\n else if (isFunction(easing)) {\n callback = easing;\n easing = 'linear';\n delay = 0;\n } // animateTo(target, time, callback);\n else if (isFunction(delay)) {\n callback = delay;\n delay = 0;\n } // animateTo(target, callback)\n else if (isFunction(time)) {\n callback = time;\n time = 500;\n } // animateTo(target)\n else if (!time) {\n time = 500;\n } // Stop all previous animations\n\n\n animatable.stopAnimation();\n animateToShallow(animatable, '', animatable, target, time, delay, reverse); // Animators may be removed immediately after start\n // if there is nothing to animate\n\n var animators = animatable.animators.slice();\n var count = animators.length;\n\n function done() {\n count--;\n\n if (!count) {\n callback && callback();\n }\n } // No animators. This should be checked before animators[i].start(),\n // because 'done' may be executed immediately if no need to animate.\n\n\n if (!count) {\n callback && callback();\n } // Start after all animators created\n // Incase any animator is done immediately when all animation properties are not changed\n\n\n for (var i = 0; i < animators.length; i++) {\n animators[i].done(done).start(easing, forceAnimate);\n }\n}\n/**\n * @param {string} path=''\n * @param {Object} source=animatable\n * @param {Object} target\n * @param {number} [time=500]\n * @param {number} [delay=0]\n * @param {boolean} [reverse] If `true`, animate\n * from the `target` to current state.\n *\n * @example\n * // Animate position\n * el._animateToShallow({\n * position: [10, 10]\n * })\n *\n * // Animate shape, style and position in 100ms, delayed 100ms\n * el._animateToShallow({\n * shape: {\n * width: 500\n * },\n * style: {\n * fill: 'red'\n * }\n * position: [10, 10]\n * }, 100, 100)\n */\n\n\nfunction animateToShallow(animatable, path, source, target, time, delay, reverse) {\n var objShallow = {};\n var propertyCount = 0;\n\n for (var name in target) {\n if (!target.hasOwnProperty(name)) {\n continue;\n }\n\n if (source[name] != null) {\n if (isObject(target[name]) && !isArrayLike(target[name])) {\n animateToShallow(animatable, path ? path + '.' + name : name, source[name], target[name], time, delay, reverse);\n } else {\n if (reverse) {\n objShallow[name] = source[name];\n setAttrByPath(animatable, path, name, target[name]);\n } else {\n objShallow[name] = target[name];\n }\n\n propertyCount++;\n }\n } else if (target[name] != null && !reverse) {\n setAttrByPath(animatable, path, name, target[name]);\n }\n }\n\n if (propertyCount > 0) {\n animatable.animate(path, false).when(time == null ? 500 : time, objShallow).delay(delay || 0);\n }\n}\n\nfunction setAttrByPath(el, path, name, value) {\n // Attr directly if not has property\n // FIXME, if some property not needed for element ?\n if (!path) {\n el.attr(name, value);\n } else {\n // Only support set shape or style\n var props = {};\n props[path] = {};\n props[path][name] = value;\n el.attr(props);\n }\n}\n\nvar _default = Animatable;\nmodule.exports = _default;","// TODO Draggable for group\n// FIXME Draggable on element which has parent rotation or scale\nfunction Draggable() {\n this.on('mousedown', this._dragStart, this);\n this.on('mousemove', this._drag, this);\n this.on('mouseup', this._dragEnd, this); // `mosuemove` and `mouseup` can be continue to fire when dragging.\n // See [Drag outside] in `Handler.js`. So we do not need to trigger\n // `_dragEnd` when globalout. That would brings better user experience.\n // this.on('globalout', this._dragEnd, this);\n // this._dropTarget = null;\n // this._draggingTarget = null;\n // this._x = 0;\n // this._y = 0;\n}\n\nDraggable.prototype = {\n constructor: Draggable,\n _dragStart: function (e) {\n var draggingTarget = e.target; // Find if there is draggable in the ancestor\n\n while (draggingTarget && !draggingTarget.draggable) {\n draggingTarget = draggingTarget.parent;\n }\n\n if (draggingTarget) {\n this._draggingTarget = draggingTarget;\n draggingTarget.dragging = true;\n this._x = e.offsetX;\n this._y = e.offsetY;\n this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event);\n }\n },\n _drag: function (e) {\n var draggingTarget = this._draggingTarget;\n\n if (draggingTarget) {\n var x = e.offsetX;\n var y = e.offsetY;\n var dx = x - this._x;\n var dy = y - this._y;\n this._x = x;\n this._y = y;\n draggingTarget.drift(dx, dy, e);\n this.dispatchToElement(param(draggingTarget, e), 'drag', e.event);\n var dropTarget = this.findHover(x, y, draggingTarget).target;\n var lastDropTarget = this._dropTarget;\n this._dropTarget = dropTarget;\n\n if (draggingTarget !== dropTarget) {\n if (lastDropTarget && dropTarget !== lastDropTarget) {\n this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event);\n }\n\n if (dropTarget && dropTarget !== lastDropTarget) {\n this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event);\n }\n }\n }\n },\n _dragEnd: function (e) {\n var draggingTarget = this._draggingTarget;\n\n if (draggingTarget) {\n draggingTarget.dragging = false;\n }\n\n this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event);\n\n if (this._dropTarget) {\n this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event);\n }\n\n this._draggingTarget = null;\n this._dropTarget = null;\n }\n};\n\nfunction param(target, e) {\n return {\n target: target,\n topTarget: e && e.topTarget\n };\n}\n\nvar _default = Draggable;\nmodule.exports = _default;","/**\n * Event Mixin\n * @module zrender/mixin/Eventful\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * pissang (https://www.github.com/pissang)\n */\nvar arrySlice = Array.prototype.slice;\n/**\n * Event dispatcher.\n *\n * @alias module:zrender/mixin/Eventful\n * @constructor\n * @param {Object} [eventProcessor] The object eventProcessor is the scope when\n * `eventProcessor.xxx` called.\n * @param {Function} [eventProcessor.normalizeQuery]\n * param: {string|Object} Raw query.\n * return: {string|Object} Normalized query.\n * @param {Function} [eventProcessor.filter] Event will be dispatched only\n * if it returns `true`.\n * param: {string} eventType\n * param: {string|Object} query\n * return: {boolean}\n * @param {Function} [eventProcessor.afterTrigger] Called after all handlers called.\n * param: {string} eventType\n */\n\nvar Eventful = function (eventProcessor) {\n this._$handlers = {};\n this._$eventProcessor = eventProcessor;\n};\n\nEventful.prototype = {\n constructor: Eventful,\n\n /**\n * The handler can only be triggered once, then removed.\n *\n * @param {string} event The event name.\n * @param {string|Object} [query] Condition used on event filter.\n * @param {Function} handler The event handler.\n * @param {Object} context\n */\n one: function (event, query, handler, context) {\n return on(this, event, query, handler, context, true);\n },\n\n /**\n * Bind a handler.\n *\n * @param {string} event The event name.\n * @param {string|Object} [query] Condition used on event filter.\n * @param {Function} handler The event handler.\n * @param {Object} [context]\n */\n on: function (event, query, handler, context) {\n return on(this, event, query, handler, context, false);\n },\n\n /**\n * Whether any handler has bound.\n *\n * @param {string} event\n * @return {boolean}\n */\n isSilent: function (event) {\n var _h = this._$handlers;\n return !_h[event] || !_h[event].length;\n },\n\n /**\n * Unbind a event.\n *\n * @param {string} [event] The event name.\n * If no `event` input, \"off\" all listeners.\n * @param {Function} [handler] The event handler.\n * If no `handler` input, \"off\" all listeners of the `event`.\n */\n off: function (event, handler) {\n var _h = this._$handlers;\n\n if (!event) {\n this._$handlers = {};\n return this;\n }\n\n if (handler) {\n if (_h[event]) {\n var newList = [];\n\n for (var i = 0, l = _h[event].length; i < l; i++) {\n if (_h[event][i].h !== handler) {\n newList.push(_h[event][i]);\n }\n }\n\n _h[event] = newList;\n }\n\n if (_h[event] && _h[event].length === 0) {\n delete _h[event];\n }\n } else {\n delete _h[event];\n }\n\n return this;\n },\n\n /**\n * Dispatch a event.\n *\n * @param {string} type The event name.\n */\n trigger: function (type) {\n var _h = this._$handlers[type];\n var eventProcessor = this._$eventProcessor;\n\n if (_h) {\n var args = arguments;\n var argLen = args.length;\n\n if (argLen > 3) {\n args = arrySlice.call(args, 1);\n }\n\n var len = _h.length;\n\n for (var i = 0; i < len;) {\n var hItem = _h[i];\n\n if (eventProcessor && eventProcessor.filter && hItem.query != null && !eventProcessor.filter(type, hItem.query)) {\n i++;\n continue;\n } // Optimize advise from backbone\n\n\n switch (argLen) {\n case 1:\n hItem.h.call(hItem.ctx);\n break;\n\n case 2:\n hItem.h.call(hItem.ctx, args[1]);\n break;\n\n case 3:\n hItem.h.call(hItem.ctx, args[1], args[2]);\n break;\n\n default:\n // have more than 2 given arguments\n hItem.h.apply(hItem.ctx, args);\n break;\n }\n\n if (hItem.one) {\n _h.splice(i, 1);\n\n len--;\n } else {\n i++;\n }\n }\n }\n\n eventProcessor && eventProcessor.afterTrigger && eventProcessor.afterTrigger(type);\n return this;\n },\n\n /**\n * Dispatch a event with context, which is specified at the last parameter.\n *\n * @param {string} type The event name.\n */\n triggerWithContext: function (type) {\n var _h = this._$handlers[type];\n var eventProcessor = this._$eventProcessor;\n\n if (_h) {\n var args = arguments;\n var argLen = args.length;\n\n if (argLen > 4) {\n args = arrySlice.call(args, 1, args.length - 1);\n }\n\n var ctx = args[args.length - 1];\n var len = _h.length;\n\n for (var i = 0; i < len;) {\n var hItem = _h[i];\n\n if (eventProcessor && eventProcessor.filter && hItem.query != null && !eventProcessor.filter(type, hItem.query)) {\n i++;\n continue;\n } // Optimize advise from backbone\n\n\n switch (argLen) {\n case 1:\n hItem.h.call(ctx);\n break;\n\n case 2:\n hItem.h.call(ctx, args[1]);\n break;\n\n case 3:\n hItem.h.call(ctx, args[1], args[2]);\n break;\n\n default:\n // have more than 2 given arguments\n hItem.h.apply(ctx, args);\n break;\n }\n\n if (hItem.one) {\n _h.splice(i, 1);\n\n len--;\n } else {\n i++;\n }\n }\n }\n\n eventProcessor && eventProcessor.afterTrigger && eventProcessor.afterTrigger(type);\n return this;\n }\n};\n\nfunction normalizeQuery(host, query) {\n var eventProcessor = host._$eventProcessor;\n\n if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\n query = eventProcessor.normalizeQuery(query);\n }\n\n return query;\n}\n\nfunction on(eventful, event, query, handler, context, isOnce) {\n var _h = eventful._$handlers;\n\n if (typeof query === 'function') {\n context = handler;\n handler = query;\n query = null;\n }\n\n if (!handler || !event) {\n return eventful;\n }\n\n query = normalizeQuery(eventful, query);\n\n if (!_h[event]) {\n _h[event] = [];\n }\n\n for (var i = 0; i < _h[event].length; i++) {\n if (_h[event][i].h === handler) {\n return eventful;\n }\n }\n\n var wrap = {\n h: handler,\n one: isOnce,\n query: query,\n ctx: context || eventful,\n // FIXME\n // Do not publish this feature util it is proved that it makes sense.\n callAtLast: handler.zrEventfulCallAtLast\n };\n var lastIndex = _h[event].length - 1;\n var lastWrap = _h[event][lastIndex];\n lastWrap && lastWrap.callAtLast ? _h[event].splice(lastIndex, 0, wrap) : _h[event].push(wrap);\n return eventful;\n} // ----------------------\n// The events in zrender\n// ----------------------\n\n/**\n * @event module:zrender/mixin/Eventful#onclick\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmouseover\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmouseout\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousemove\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousewheel\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousedown\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmouseup\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondrag\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragstart\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragend\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragenter\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragleave\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragover\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondrop\n * @type {Function}\n * @default null\n */\n\n\nvar _default = Eventful;\nmodule.exports = _default;","var matrix = require(\"../core/matrix\");\n\nvar vector = require(\"../core/vector\");\n\n/**\n * 提供变换扩展\n * @module zrender/mixin/Transformable\n * @author pissang (https://www.github.com/pissang)\n */\nvar mIdentity = matrix.identity;\nvar EPSILON = 5e-5;\n\nfunction isNotAroundZero(val) {\n return val > EPSILON || val < -EPSILON;\n}\n/**\n * @alias module:zrender/mixin/Transformable\n * @constructor\n */\n\n\nvar Transformable = function (opts) {\n opts = opts || {}; // If there are no given position, rotation, scale\n\n if (!opts.position) {\n /**\n * 平移\n * @type {Array.}\n * @default [0, 0]\n */\n this.position = [0, 0];\n }\n\n if (opts.rotation == null) {\n /**\n * 旋转\n * @type {Array.}\n * @default 0\n */\n this.rotation = 0;\n }\n\n if (!opts.scale) {\n /**\n * 缩放\n * @type {Array.}\n * @default [1, 1]\n */\n this.scale = [1, 1];\n }\n /**\n * 旋转和缩放的原点\n * @type {Array.}\n * @default null\n */\n\n\n this.origin = this.origin || null;\n};\n\nvar transformableProto = Transformable.prototype;\ntransformableProto.transform = null;\n/**\n * 判断是否需要有坐标变换\n * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵\n */\n\ntransformableProto.needLocalTransform = function () {\n return isNotAroundZero(this.rotation) || isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1]) || isNotAroundZero(this.scale[0] - 1) || isNotAroundZero(this.scale[1] - 1);\n};\n\nvar scaleTmp = [];\n\ntransformableProto.updateTransform = function () {\n var parent = this.parent;\n var parentHasTransform = parent && parent.transform;\n var needLocalTransform = this.needLocalTransform();\n var m = this.transform;\n\n if (!(needLocalTransform || parentHasTransform)) {\n m && mIdentity(m);\n return;\n }\n\n m = m || matrix.create();\n\n if (needLocalTransform) {\n this.getLocalTransform(m);\n } else {\n mIdentity(m);\n } // 应用父节点变换\n\n\n if (parentHasTransform) {\n if (needLocalTransform) {\n matrix.mul(m, parent.transform, m);\n } else {\n matrix.copy(m, parent.transform);\n }\n } // 保存这个变换矩阵\n\n\n this.transform = m;\n var globalScaleRatio = this.globalScaleRatio;\n\n if (globalScaleRatio != null && globalScaleRatio !== 1) {\n this.getGlobalScale(scaleTmp);\n var relX = scaleTmp[0] < 0 ? -1 : 1;\n var relY = scaleTmp[1] < 0 ? -1 : 1;\n var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0;\n var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0;\n m[0] *= sx;\n m[1] *= sx;\n m[2] *= sy;\n m[3] *= sy;\n }\n\n this.invTransform = this.invTransform || matrix.create();\n matrix.invert(this.invTransform, m);\n};\n\ntransformableProto.getLocalTransform = function (m) {\n return Transformable.getLocalTransform(this, m);\n};\n/**\n * 将自己的transform应用到context上\n * @param {CanvasRenderingContext2D} ctx\n */\n\n\ntransformableProto.setTransform = function (ctx) {\n var m = this.transform;\n var dpr = ctx.dpr || 1;\n\n if (m) {\n ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n } else {\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n};\n\ntransformableProto.restoreTransform = function (ctx) {\n var dpr = ctx.dpr || 1;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n};\n\nvar tmpTransform = [];\nvar originTransform = matrix.create();\n\ntransformableProto.setLocalTransform = function (m) {\n if (!m) {\n // TODO return or set identity?\n return;\n }\n\n var sx = m[0] * m[0] + m[1] * m[1];\n var sy = m[2] * m[2] + m[3] * m[3];\n var position = this.position;\n var scale = this.scale;\n\n if (isNotAroundZero(sx - 1)) {\n sx = Math.sqrt(sx);\n }\n\n if (isNotAroundZero(sy - 1)) {\n sy = Math.sqrt(sy);\n }\n\n if (m[0] < 0) {\n sx = -sx;\n }\n\n if (m[3] < 0) {\n sy = -sy;\n }\n\n position[0] = m[4];\n position[1] = m[5];\n scale[0] = sx;\n scale[1] = sy;\n this.rotation = Math.atan2(-m[1] / sy, m[0] / sx);\n};\n/**\n * 分解`transform`矩阵到`position`, `rotation`, `scale`\n */\n\n\ntransformableProto.decomposeTransform = function () {\n if (!this.transform) {\n return;\n }\n\n var parent = this.parent;\n var m = this.transform;\n\n if (parent && parent.transform) {\n // Get local transform and decompose them to position, scale, rotation\n matrix.mul(tmpTransform, parent.invTransform, m);\n m = tmpTransform;\n }\n\n var origin = this.origin;\n\n if (origin && (origin[0] || origin[1])) {\n originTransform[4] = origin[0];\n originTransform[5] = origin[1];\n matrix.mul(tmpTransform, m, originTransform);\n tmpTransform[4] -= origin[0];\n tmpTransform[5] -= origin[1];\n m = tmpTransform;\n }\n\n this.setLocalTransform(m);\n};\n/**\n * Get global scale\n * @return {Array.}\n */\n\n\ntransformableProto.getGlobalScale = function (out) {\n var m = this.transform;\n out = out || [];\n\n if (!m) {\n out[0] = 1;\n out[1] = 1;\n return out;\n }\n\n out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n\n if (m[0] < 0) {\n out[0] = -out[0];\n }\n\n if (m[3] < 0) {\n out[1] = -out[1];\n }\n\n return out;\n};\n/**\n * 变换坐标位置到 shape 的局部坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.}\n */\n\n\ntransformableProto.transformCoordToLocal = function (x, y) {\n var v2 = [x, y];\n var invTransform = this.invTransform;\n\n if (invTransform) {\n vector.applyTransform(v2, v2, invTransform);\n }\n\n return v2;\n};\n/**\n * 变换局部坐标位置到全局坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.}\n */\n\n\ntransformableProto.transformCoordToGlobal = function (x, y) {\n var v2 = [x, y];\n var transform = this.transform;\n\n if (transform) {\n vector.applyTransform(v2, v2, transform);\n }\n\n return v2;\n};\n/**\n * @static\n * @param {Object} target\n * @param {Array.} target.origin\n * @param {number} target.rotation\n * @param {Array.} target.position\n * @param {Array.} [m]\n */\n\n\nTransformable.getLocalTransform = function (target, m) {\n m = m || [];\n mIdentity(m);\n var origin = target.origin;\n var scale = target.scale || [1, 1];\n var rotation = target.rotation || 0;\n var position = target.position || [0, 0];\n\n if (origin) {\n // Translate to origin\n m[4] -= origin[0];\n m[5] -= origin[1];\n }\n\n matrix.scale(m, m, scale);\n\n if (rotation) {\n matrix.rotate(m, m, rotation);\n }\n\n if (origin) {\n // Translate back from origin\n m[4] += origin[0];\n m[5] += origin[1];\n }\n\n m[4] += position[0];\n m[5] += position[1];\n return m;\n};\n\nvar _default = Transformable;\nmodule.exports = _default;"],"names":["env","shadowTemp","_default","orignalBrush","browser","ie","version","modified","clipPaths","this","__clipPaths","style","i","length","clipPath","shape","type","startAngle","endAngle","width","height","j","apply","arguments","module","exports","SHADOW_PROPS","ctx","propName","value","hasOwnProperty","dpr","LRU","globalImageCache","findExistImage","newImageOrSrc","cachedImgObj","get","image","createOrUpdateImage","hostEl","cb","cbPayload","__zrImageSrc","pendingWrap","isImageReady","pending","push","Image","onload","onerror","imageOnLoad","put","__cachedImgObj","src","dirty","smoothSpline","smoothBezier","buildPath","closePath","points","smooth","controlPoints","smoothConstraint","moveTo","len","cp1","cp2","p","bezierCurveTo","l","lineTo","r1","r2","r3","r4","total","x","y","r","Array","arc","Math","PI","_vector","v2Min","min","v2Max","max","v2Scale","scale","v2Distance","distance","v2Add","add","v2Clone","clone","v2Sub","sub","isLoop","constraint","prevPoint","nextPoint","cps","v","v1","v2","Infinity","point","d0","d1","sum","cp0","shift","interpolate","p0","p1","p2","p3","t","t2","t3","v0","ret","segs","pos","idx","floor","w","w2","w3","round","subPixelOptimizeLine","outputShape","inputShape","x1","x2","y1","y2","lineWidth","subPixelOptimize","subPixelOptimizeRect","originX","originY","originWidth","originHeight","position","positiveOrNegative","doubledPosition","_util","retrieve2","retrieve3","each","normalizeCssArray","isString","isObject","textContain","roundRectHelper","imageHelper","fixShadow","_constant","ContextCachedBy","WILL_BE_RESTORED","DEFAULT_FONT","VALID_TEXT_ALIGN","left","right","center","VALID_TEXT_VERTICAL_ALIGN","top","bottom","middle","SHADOW_STYLE_COMMON_PROPS","_tmpTextPositionResult","_tmpBoxPositionResult","normalizeTextStyle","normalizeStyle","rich","font","makeFont","textAlign","textVerticalAlign","textBaseline","textPadding","renderText","text","rect","prevEl","renderRichText","renderPlainText","prevStyle","needDrawBg","needDrawBackground","checkCache","cachedByMe","__attrCachedBy","PLAIN_TEXT","NONE","styleFont","computedFont","__computedFont","__styleFont","textLineHeight","contentBlock","__textCotentBlock","__dirtyText","parsePlainText","truncate","outerHeight","textLines","lines","lineHeight","boxPos","getBoxPosition","baseX","baseY","applyTextRotation","boxY","adjustTextY","textX","textY","textWidth","getWidth","outerWidth","boxX","adjustTextX","drawBackground","getTextXForPadding","globalAlpha","opacity","propItem","styleProp","ctxProp","val","textStrokeWidth","textStrokeWidthPrev","strokeWidthChanged","strokeChanged","textStroke","getStroke","textFill","getFill","strokeStyle","fillStyle","strokeText","fillText","parseRichText","drawRichText","contentWidth","xLeft","lineTop","xRight","token","line","tokens","tokenCount","usedWidth","leftIndex","lineXLeft","lineXRight","rightIndex","placeToken","textRotation","origin","textOrigin","translate","rotate","tokenStyle","styleName","isLineHolder","textHeight","setCtx","textShadowBlur","textShadowColor","textShadowOffsetX","textShadowOffsetY","textBackgroundColor","textBorderWidth","textBorderColor","isPlainBg","textBoxShadowBlur","textBoxShadowColor","textBoxShadowOffsetX","textBoxShadowOffsetY","beginPath","textBorderRadius","fillOpacity","originalGlobalAlpha","fill","onBgImageLoaded","drawImage","strokeOpacity","stroke","out","textPosition","parsePercent","res","calculateTextPosition","textOffset","prop","colorStops","maxValue","lastIndexOf","parseFloat","needDrawText","textHelper","BoundingRect","tmpRect","RectText","prototype","constructor","drawRectText","textRect","__dirty","save","transform","transformText","setTransform","copy","applyTransform","restore","Path","extend","cx","cy","clockwise","unitX","cos","unitY","sin","vec2","_curve","quadraticSubdivide","cubicSubdivide","quadraticAt","cubicAt","quadraticDerivativeAt","cubicDerivativeAt","someVectorAt","isTangent","cpx2","cpy2","cpx1","cpy1","percent","quadraticCurveTo","pointAt","tangentAt","normalize","inBundle","rx","ry","k","a","b","ox","oy","_subPixelOptimize","subPixelOptimizeOutputShape","polyHelper","r0","PI2","fixClipWithShadow","brush","Animator","logError","isFunction","isArrayLike","indexOf","Animatable","animators","animateTo","animatable","target","time","delay","easing","callback","forceAnimate","reverse","stopAnimation","animateToShallow","slice","count","done","start","path","source","objShallow","propertyCount","name","setAttrByPath","animate","when","el","props","attr","loop","animatingShape","zr","__zr","pathSplitted","split","animator","during","splice","animation","addAnimator","id","forwardToLast","stop","animateFrom","Draggable","on","_dragStart","_drag","_dragEnd","param","e","topTarget","draggingTarget","draggable","parent","_draggingTarget","dragging","_x","offsetX","_y","offsetY","dispatchToElement","event","dx","dy","drift","dropTarget","findHover","lastDropTarget","_dropTarget","arrySlice","Eventful","eventProcessor","_$handlers","_$eventProcessor","normalizeQuery","host","query","eventful","handler","context","isOnce","_h","h","wrap","one","callAtLast","zrEventfulCallAtLast","lastIndex","lastWrap","isSilent","off","newList","trigger","args","argLen","call","hItem","filter","afterTrigger","triggerWithContext","matrix","vector","mIdentity","identity","EPSILON","isNotAroundZero","Transformable","opts","rotation","transformableProto","needLocalTransform","scaleTmp","updateTransform","parentHasTransform","m","create","getLocalTransform","mul","globalScaleRatio","getGlobalScale","relX","relY","sx","sy","invTransform","invert","restoreTransform","tmpTransform","originTransform","setLocalTransform","sqrt","atan2","decomposeTransform","transformCoordToLocal","transformCoordToGlobal"],"sourceRoot":""}