diff --git a/dist/zrender.js b/dist/zrender.js index c0c91515a..cae472604 100644 --- a/dist/zrender.js +++ b/dist/zrender.js @@ -1,20395 +1,14556 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (factory((global.zrender = {}))); + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.zrender = {})); }(this, (function (exports) { 'use strict'; -/** - * zrender: 生成唯一id - * - * @author errorrik (errorrik@gmail.com) - */ - -var idStart = 0x0907; - -var guid = function () { - return idStart++; -}; - -/** - * echarts设备环境识别 - * - * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。 - * @author firede[firede@firede.us] - * @desc thanks zepto. - */ - -/* global wx */ - -var env = {}; - -if (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') { - // In Weixin Application - env = { - browser: {}, - os: {}, - node: false, - wxa: true, // Weixin Application - canvasSupported: true, - svgSupported: false, - touchEventsSupported: true, - domSupported: false - }; -} -else if (typeof document === 'undefined' && typeof self !== 'undefined') { - // In worker - env = { - browser: {}, - os: {}, - node: false, - worker: true, - canvasSupported: true, - domSupported: false - }; -} -else if (typeof navigator === 'undefined') { - // In node - env = { - browser: {}, - os: {}, - node: true, - worker: false, - // Assume canvas is supported - canvasSupported: true, - svgSupported: true, - domSupported: false - }; -} -else { - env = detect(navigator.userAgent); -} - -var env$1 = env; - -// Zepto.js -// (c) 2010-2013 Thomas Fuchs -// Zepto.js may be freely distributed under the MIT license. - -function detect(ua) { - var os = {}; - var browser = {}; - // var webkit = ua.match(/Web[kK]it[\/]{0,1}([\d.]+)/); - // var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); - // var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); - // var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); - // var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/); - // var webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/); - // var touchpad = webos && ua.match(/TouchPad/); - // var kindle = ua.match(/Kindle\/([\d.]+)/); - // var silk = ua.match(/Silk\/([\d._]+)/); - // var blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/); - // var bb10 = ua.match(/(BB10).*Version\/([\d.]+)/); - // var rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/); - // var playbook = ua.match(/PlayBook/); - // var chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/); - var firefox = ua.match(/Firefox\/([\d.]+)/); - // var safari = webkit && ua.match(/Mobile\//) && !chrome; - // var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome; - var ie = ua.match(/MSIE\s([\d.]+)/) - // IE 11 Trident/7.0; rv:11.0 - || ua.match(/Trident\/.+?rv:(([\d.]+))/); - var edge = ua.match(/Edge\/([\d.]+)/); // IE 12 and 12+ - - var weChat = (/micromessenger/i).test(ua); - - // Todo: clean this up with a better OS/browser seperation: - // - discern (more) between multiple browsers on android - // - decide if kindle fire in silk mode is android or not - // - Firefox on Android doesn't specify the Android version - // - possibly devide in os, device and browser hashes - - // if (browser.webkit = !!webkit) browser.version = webkit[1]; - - // if (android) os.android = true, os.version = android[2]; - // if (iphone && !ipod) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.'); - // if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.'); - // if (ipod) os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null; - // if (webos) os.webos = true, os.version = webos[2]; - // if (touchpad) os.touchpad = true; - // if (blackberry) os.blackberry = true, os.version = blackberry[2]; - // if (bb10) os.bb10 = true, os.version = bb10[2]; - // if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2]; - // if (playbook) browser.playbook = true; - // if (kindle) os.kindle = true, os.version = kindle[1]; - // if (silk) browser.silk = true, browser.version = silk[1]; - // if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true; - // if (chrome) browser.chrome = true, browser.version = chrome[1]; - if (firefox) { - browser.firefox = true; - browser.version = firefox[1]; - } - // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true; - // if (webview) browser.webview = true; - - if (ie) { - browser.ie = true; - browser.version = ie[1]; - } - - if (edge) { - browser.edge = true; - browser.version = edge[1]; - } - - // It is difficult to detect WeChat in Win Phone precisely, because ua can - // not be set on win phone. So we do not consider Win Phone. - if (weChat) { - browser.weChat = true; - } - - // os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) || - // (firefox && ua.match(/Tablet/)) || (ie && !ua.match(/Phone/) && ua.match(/Touch/))); - // os.phone = !!(!os.tablet && !os.ipod && (android || iphone || webos || - // (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\/([\d.]+)/)) || - // (firefox && ua.match(/Mobile/)) || (ie && ua.match(/Touch/)))); - - return { - browser: browser, - os: os, - node: false, - // 原生canvas支持,改极端点了 - // canvasSupported : !(browser.ie && parseFloat(browser.version) < 9) - canvasSupported: !!document.createElement('canvas').getContext, - svgSupported: typeof SVGRect !== 'undefined', - // works on most browsers - // IE10/11 does not support touch event, and MS Edge supports them but not by - // default, so we dont check navigator.maxTouchPoints for them here. - touchEventsSupported: 'ontouchstart' in window && !browser.ie && !browser.edge, - // . - pointerEventsSupported: - // (1) Firefox supports pointer but not by default, only MS browsers are reliable on pointer - // events currently. So we dont use that on other browsers unless tested sufficiently. - // For example, in iOS 13 Mobile Chromium 78, if the touching behavior starts page - // scroll, the `pointermove` event can not be fired any more. That will break some - // features like "pan horizontally to move something and pan vertically to page scroll". - // The horizontal pan probably be interrupted by the casually triggered page scroll. - // (2) Although IE 10 supports pointer event, it use old style and is different from the - // standard. So we exclude that. (IE 10 is hardly used on touch device) - 'onpointerdown' in window - && (browser.edge || (browser.ie && browser.version >= 11)), - // passiveSupported: detectPassiveSupport() - domSupported: typeof document !== 'undefined' - }; -} - -// See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection -// function detectPassiveSupport() { -// // Test via a getter in the options object to see if the passive property is accessed -// var supportsPassive = false; -// try { -// var opts = Object.defineProperty({}, 'passive', { -// get: function() { -// supportsPassive = true; -// } -// }); -// window.addEventListener('testPassive', function() {}, opts); -// } catch (e) { -// } -// return supportsPassive; -// } - -/** - * @module zrender/core/util - */ - -// 用于处理merge时无法遍历Date等对象的问题 -var BUILTIN_OBJECT = { - '[object Function]': 1, - '[object RegExp]': 1, - '[object Date]': 1, - '[object Error]': 1, - '[object CanvasGradient]': 1, - '[object CanvasPattern]': 1, - // For node-canvas - '[object Image]': 1, - '[object Canvas]': 1 -}; - -var TYPED_ARRAY = { - '[object Int8Array]': 1, - '[object Uint8Array]': 1, - '[object Uint8ClampedArray]': 1, - '[object Int16Array]': 1, - '[object Uint16Array]': 1, - '[object Int32Array]': 1, - '[object Uint32Array]': 1, - '[object Float32Array]': 1, - '[object Float64Array]': 1 -}; - -var objToString = Object.prototype.toString; - -var arrayProto = Array.prototype; -var nativeForEach = arrayProto.forEach; -var nativeFilter = arrayProto.filter; -var nativeSlice = arrayProto.slice; -var nativeMap = arrayProto.map; -var nativeReduce = arrayProto.reduce; - -// Avoid assign to an exported variable, for transforming to cjs. -var methods = {}; - -function $override(name, fn) { - // Clear ctx instance for different environment - if (name === 'createCanvas') { - _ctx = null; - } - - methods[name] = fn; -} - -/** - * Those data types can be cloned: - * Plain object, Array, TypedArray, number, string, null, undefined. - * Those data types will be assgined using the orginal data: - * BUILTIN_OBJECT - * Instance of user defined class will be cloned to a plain object, without - * properties in prototype. - * Other data types is not supported (not sure what will happen). - * - * Caution: do not support clone Date, for performance consideration. - * (There might be a large number of date in `series.data`). - * So date should not be modified in and out of echarts. - * - * @param {*} source - * @return {*} new - */ -function clone(source) { - if (source == null || typeof source !== 'object') { - return source; - } - - var result = source; - var typeStr = objToString.call(source); - - if (typeStr === '[object Array]') { - if (!isPrimitive(source)) { - result = []; - for (var i = 0, len = source.length; i < len; i++) { - result[i] = clone(source[i]); - } - } - } - else if (TYPED_ARRAY[typeStr]) { - if (!isPrimitive(source)) { - var Ctor = source.constructor; - if (source.constructor.from) { - result = Ctor.from(source); - } - else { - result = new Ctor(source.length); - for (var i = 0, len = source.length; i < len; i++) { - result[i] = clone(source[i]); - } - } - } - } - else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) { - result = {}; - for (var key in source) { - if (source.hasOwnProperty(key)) { - result[key] = clone(source[key]); - } - } - } - - return result; -} - -/** - * @memberOf module:zrender/core/util - * @param {*} target - * @param {*} source - * @param {boolean} [overwrite=false] - */ -function merge(target, source, overwrite) { - // We should escapse that source is string - // and enter for ... in ... - if (!isObject(source) || !isObject(target)) { - return overwrite ? clone(source) : target; - } - - for (var key in source) { - if (source.hasOwnProperty(key)) { - var targetProp = target[key]; - var sourceProp = source[key]; - - if (isObject(sourceProp) - && isObject(targetProp) - && !isArray(sourceProp) - && !isArray(targetProp) - && !isDom(sourceProp) - && !isDom(targetProp) - && !isBuiltInObject(sourceProp) - && !isBuiltInObject(targetProp) - && !isPrimitive(sourceProp) - && !isPrimitive(targetProp) - ) { - // 如果需要递归覆盖,就递归调用merge - merge(targetProp, sourceProp, overwrite); - } - else if (overwrite || !(key in target)) { - // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况 - // NOTE,在 target[key] 不存在的时候也是直接覆盖 - target[key] = clone(source[key], true); - } - } - } - - return target; -} - -/** - * @param {Array} targetAndSources The first item is target, and the rests are source. - * @param {boolean} [overwrite=false] - * @return {*} target - */ -function mergeAll(targetAndSources, overwrite) { - var result = targetAndSources[0]; - for (var i = 1, len = targetAndSources.length; i < len; i++) { - result = merge(result, targetAndSources[i], overwrite); - } - return result; -} - -/** - * @param {*} target - * @param {*} source - * @memberOf module:zrender/core/util - */ -function extend(target, source) { - for (var key in source) { - if (source.hasOwnProperty(key)) { - target[key] = source[key]; - } - } - return target; -} - -/** - * @param {*} target - * @param {*} source - * @param {boolean} [overlay=false] - * @memberOf module:zrender/core/util - */ -function defaults(target, source, overlay) { - for (var key in source) { - if (source.hasOwnProperty(key) - && (overlay ? source[key] != null : target[key] == null) - ) { - target[key] = source[key]; - } - } - return target; -} - -var createCanvas = function () { - return methods.createCanvas(); -}; - -methods.createCanvas = function () { - return document.createElement('canvas'); -}; - -// FIXME -var _ctx; - -function getContext() { - if (!_ctx) { - // Use util.createCanvas instead of createCanvas - // because createCanvas may be overwritten in different environment - _ctx = createCanvas().getContext('2d'); - } - return _ctx; -} - -/** - * 查询数组中元素的index - * @memberOf module:zrender/core/util - */ -function indexOf(array, value) { - if (array) { - if (array.indexOf) { - return array.indexOf(value); - } - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === value) { - return i; - } - } - } - return -1; -} - -/** - * 构造类继承关系 - * - * @memberOf module:zrender/core/util - * @param {Function} clazz 源类 - * @param {Function} baseClazz 基类 - */ -function inherits(clazz, baseClazz) { - var clazzPrototype = clazz.prototype; - function F() {} - F.prototype = baseClazz.prototype; - clazz.prototype = new F(); - - for (var prop in clazzPrototype) { - if (clazzPrototype.hasOwnProperty(prop)) { - clazz.prototype[prop] = clazzPrototype[prop]; - } - } - clazz.prototype.constructor = clazz; - clazz.superClass = baseClazz; -} - -/** - * @memberOf module:zrender/core/util - * @param {Object|Function} target - * @param {Object|Function} sorce - * @param {boolean} overlay - */ -function mixin(target, source, overlay) { - target = 'prototype' in target ? target.prototype : target; - source = 'prototype' in source ? source.prototype : source; - - defaults(target, source, overlay); -} - -/** - * Consider typed array. - * @param {Array|TypedArray} data - */ -function isArrayLike(data) { - if (!data) { - return; - } - if (typeof data === 'string') { - return false; - } - return typeof data.length === 'number'; -} - -/** - * 数组或对象遍历 - * @memberOf module:zrender/core/util - * @param {Object|Array} obj - * @param {Function} cb - * @param {*} [context] - */ -function each(obj, cb, context) { - if (!(obj && cb)) { - return; - } - if (obj.forEach && obj.forEach === nativeForEach) { - obj.forEach(cb, context); - } - else if (obj.length === +obj.length) { - for (var i = 0, len = obj.length; i < len; i++) { - cb.call(context, obj[i], i, obj); - } - } - else { - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - cb.call(context, obj[key], key, obj); - } - } - } -} - -/** - * 数组映射 - * @memberOf module:zrender/core/util - * @param {Array} obj - * @param {Function} cb - * @param {*} [context] - * @return {Array} - */ -function map(obj, cb, context) { - if (!(obj && cb)) { - return; - } - if (obj.map && obj.map === nativeMap) { - return obj.map(cb, context); - } - else { - var result = []; - for (var i = 0, len = obj.length; i < len; i++) { - result.push(cb.call(context, obj[i], i, obj)); - } - return result; - } -} - -/** - * @memberOf module:zrender/core/util - * @param {Array} obj - * @param {Function} cb - * @param {Object} [memo] - * @param {*} [context] - * @return {Array} - */ -function reduce(obj, cb, memo, context) { - if (!(obj && cb)) { - return; - } - if (obj.reduce && obj.reduce === nativeReduce) { - return obj.reduce(cb, memo, context); - } - else { - for (var i = 0, len = obj.length; i < len; i++) { - memo = cb.call(context, memo, obj[i], i, obj); - } - return memo; - } -} - -/** - * 数组过滤 - * @memberOf module:zrender/core/util - * @param {Array} obj - * @param {Function} cb - * @param {*} [context] - * @return {Array} - */ -function filter(obj, cb, context) { - if (!(obj && cb)) { - return; - } - if (obj.filter && obj.filter === nativeFilter) { - return obj.filter(cb, context); - } - else { - var result = []; - for (var i = 0, len = obj.length; i < len; i++) { - if (cb.call(context, obj[i], i, obj)) { - result.push(obj[i]); - } - } - return result; - } -} - -/** - * 数组项查找 - * @memberOf module:zrender/core/util - * @param {Array} obj - * @param {Function} cb - * @param {*} [context] - * @return {*} - */ -function find(obj, cb, context) { - if (!(obj && cb)) { - return; - } - for (var i = 0, len = obj.length; i < len; i++) { - if (cb.call(context, obj[i], i, obj)) { - return obj[i]; - } - } -} - -/** - * @memberOf module:zrender/core/util - * @param {Function} func - * @param {*} context - * @return {Function} - */ -function bind(func, context) { - var args = nativeSlice.call(arguments, 2); - return function () { - return func.apply(context, args.concat(nativeSlice.call(arguments))); - }; -} - -/** - * @memberOf module:zrender/core/util - * @param {Function} func - * @return {Function} - */ -function curry(func) { - var args = nativeSlice.call(arguments, 1); - return function () { - return func.apply(this, args.concat(nativeSlice.call(arguments))); - }; -} - -/** - * @memberOf module:zrender/core/util - * @param {*} value - * @return {boolean} - */ -function isArray(value) { - return objToString.call(value) === '[object Array]'; -} - -/** - * @memberOf module:zrender/core/util - * @param {*} value - * @return {boolean} - */ -function isFunction(value) { - return typeof value === 'function'; -} - -/** - * @memberOf module:zrender/core/util - * @param {*} value - * @return {boolean} - */ -function isString(value) { - return objToString.call(value) === '[object String]'; -} - -/** - * @memberOf module:zrender/core/util - * @param {*} value - * @return {boolean} - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return type === 'function' || (!!value && type === 'object'); -} - -/** - * @memberOf module:zrender/core/util - * @param {*} value - * @return {boolean} - */ -function isBuiltInObject(value) { - return !!BUILTIN_OBJECT[objToString.call(value)]; -} - -/** - * @memberOf module:zrender/core/util - * @param {*} value - * @return {boolean} - */ -function isTypedArray(value) { - return !!TYPED_ARRAY[objToString.call(value)]; -} - -/** - * @memberOf module:zrender/core/util - * @param {*} value - * @return {boolean} - */ -function isDom(value) { - return typeof value === 'object' - && typeof value.nodeType === 'number' - && typeof value.ownerDocument === 'object'; -} - -/** - * Whether is exactly NaN. Notice isNaN('a') returns true. - * @param {*} value - * @return {boolean} - */ -function eqNaN(value) { - /* eslint-disable-next-line no-self-compare */ - return value !== value; -} - -/** - * If value1 is not null, then return value1, otherwise judget rest of values. - * Low performance. - * @memberOf module:zrender/core/util - * @return {*} Final value - */ -function retrieve(values) { - for (var i = 0, len = arguments.length; i < len; i++) { - if (arguments[i] != null) { - return arguments[i]; - } - } -} - -function retrieve2(value0, value1) { - return value0 != null - ? value0 - : value1; -} - -function retrieve3(value0, value1, value2) { - return value0 != null - ? value0 - : value1 != null - ? value1 - : value2; -} - -/** - * @memberOf module:zrender/core/util - * @param {Array} arr - * @param {number} startIndex - * @param {number} endIndex - * @return {Array} - */ -function slice() { - return Function.call.apply(nativeSlice, arguments); -} - -/** - * Normalize css liked array configuration - * e.g. - * 3 => [3, 3, 3, 3] - * [4, 2] => [4, 2, 4, 2] - * [4, 3, 2] => [4, 3, 2, 3] - * @param {number|Array.} val - * @return {Array.} - */ -function normalizeCssArray(val) { - if (typeof (val) === 'number') { - return [val, val, val, val]; - } - var len = val.length; - if (len === 2) { - // vertical | horizontal - return [val[0], val[1], val[0], val[1]]; - } - else if (len === 3) { - // top | horizontal | bottom - return [val[0], val[1], val[2], val[1]]; - } - return val; -} - -/** - * @memberOf module:zrender/core/util - * @param {boolean} condition - * @param {string} message - */ -function assert(condition, message) { - if (!condition) { - throw new Error(message); - } -} - -/** - * @memberOf module:zrender/core/util - * @param {string} str string to be trimed - * @return {string} trimed string - */ -function trim(str) { - if (str == null) { - return null; - } - else if (typeof str.trim === 'function') { - return str.trim(); - } - else { - return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - } -} - -var primitiveKey = '__ec_primitive__'; -/** - * Set an object as primitive to be ignored traversing children in clone or merge - */ -function setAsPrimitive(obj) { - obj[primitiveKey] = true; -} - -function isPrimitive(obj) { - return obj[primitiveKey]; -} - -/** - * @constructor - * @param {Object} obj Only apply `ownProperty`. - */ -function HashMap(obj) { - var isArr = isArray(obj); - // Key should not be set on this, otherwise - // methods get/set/... may be overrided. - this.data = {}; - var thisMap = this; - - (obj instanceof HashMap) - ? obj.each(visit) - : (obj && each(obj, visit)); - - function visit(value, key) { - isArr ? thisMap.set(value, key) : thisMap.set(key, value); - } -} - -HashMap.prototype = { - constructor: HashMap, - // Do not provide `has` method to avoid defining what is `has`. - // (We usually treat `null` and `undefined` as the same, different - // from ES6 Map). - get: function (key) { - return this.data.hasOwnProperty(key) ? this.data[key] : null; - }, - set: function (key, value) { - // Comparing with invocation chaining, `return value` is more commonly - // used in this case: `var someVal = map.set('a', genVal());` - return (this.data[key] = value); - }, - // Although util.each can be performed on this hashMap directly, user - // should not use the exposed keys, who are prefixed. - each: function (cb, context) { - context !== void 0 && (cb = bind(cb, context)); - /* eslint-disable guard-for-in */ - for (var key in this.data) { - this.data.hasOwnProperty(key) && cb(this.data[key], key); - } - /* eslint-enable guard-for-in */ - }, - // Do not use this method if performance sensitive. - removeKey: function (key) { - delete this.data[key]; - } -}; - -function createHashMap(obj) { - return new HashMap(obj); -} - -function concatArray(a, b) { - var newArray = new a.constructor(a.length + b.length); - for (var i = 0; i < a.length; i++) { - newArray[i] = a[i]; - } - var offset = a.length; - for (i = 0; i < b.length; i++) { - newArray[i + offset] = b[i]; - } - return newArray; -} - - -function noop() {} - - -var util = (Object.freeze || Object)({ - $override: $override, - clone: clone, - merge: merge, - mergeAll: mergeAll, - extend: extend, - defaults: defaults, - createCanvas: createCanvas, - getContext: getContext, - indexOf: indexOf, - inherits: inherits, - mixin: mixin, - isArrayLike: isArrayLike, - each: each, - map: map, - reduce: reduce, - filter: filter, - find: find, - bind: bind, - curry: curry, - isArray: isArray, - isFunction: isFunction, - isString: isString, - isObject: isObject, - isBuiltInObject: isBuiltInObject, - isTypedArray: isTypedArray, - isDom: isDom, - eqNaN: eqNaN, - retrieve: retrieve, - retrieve2: retrieve2, - retrieve3: retrieve3, - slice: slice, - normalizeCssArray: normalizeCssArray, - assert: assert, - trim: trim, - setAsPrimitive: setAsPrimitive, - isPrimitive: isPrimitive, - createHashMap: createHashMap, - concatArray: concatArray, - noop: noop -}); - -/* global Float32Array */ - -var ArrayCtor = typeof Float32Array === 'undefined' - ? Array - : Float32Array; - -/** - * 创建一个向量 - * @param {number} [x=0] - * @param {number} [y=0] - * @return {Vector2} - */ -function create(x, y) { - var out = new ArrayCtor(2); - if (x == null) { - x = 0; - } - if (y == null) { - y = 0; - } - out[0] = x; - out[1] = y; - return out; -} - -/** - * 复制向量数据 - * @param {Vector2} out - * @param {Vector2} v - * @return {Vector2} - */ -function copy(out, v) { - out[0] = v[0]; - out[1] = v[1]; - return out; -} - -/** - * 克隆一个向量 - * @param {Vector2} v - * @return {Vector2} - */ -function clone$1(v) { - var out = new ArrayCtor(2); - out[0] = v[0]; - out[1] = v[1]; - return out; -} - -/** - * 设置向量的两个项 - * @param {Vector2} out - * @param {number} a - * @param {number} b - * @return {Vector2} 结果 - */ -function set(out, a, b) { - out[0] = a; - out[1] = b; - return out; -} - -/** - * 向量相加 - * @param {Vector2} out - * @param {Vector2} v1 - * @param {Vector2} v2 - */ -function add(out, v1, v2) { - out[0] = v1[0] + v2[0]; - out[1] = v1[1] + v2[1]; - return out; -} - -/** - * 向量缩放后相加 - * @param {Vector2} out - * @param {Vector2} v1 - * @param {Vector2} v2 - * @param {number} a - */ -function scaleAndAdd(out, v1, v2, a) { - out[0] = v1[0] + v2[0] * a; - out[1] = v1[1] + v2[1] * a; - return out; -} - -/** - * 向量相减 - * @param {Vector2} out - * @param {Vector2} v1 - * @param {Vector2} v2 - */ -function sub(out, v1, v2) { - out[0] = v1[0] - v2[0]; - out[1] = v1[1] - v2[1]; - return out; -} - -/** - * 向量长度 - * @param {Vector2} v - * @return {number} - */ -function len(v) { - return Math.sqrt(lenSquare(v)); -} -var length = len; // jshint ignore:line - -/** - * 向量长度平方 - * @param {Vector2} v - * @return {number} - */ -function lenSquare(v) { - return v[0] * v[0] + v[1] * v[1]; -} -var lengthSquare = lenSquare; - -/** - * 向量乘法 - * @param {Vector2} out - * @param {Vector2} v1 - * @param {Vector2} v2 - */ -function mul(out, v1, v2) { - out[0] = v1[0] * v2[0]; - out[1] = v1[1] * v2[1]; - return out; -} - -/** - * 向量除法 - * @param {Vector2} out - * @param {Vector2} v1 - * @param {Vector2} v2 - */ -function div(out, v1, v2) { - out[0] = v1[0] / v2[0]; - out[1] = v1[1] / v2[1]; - return out; -} - -/** - * 向量点乘 - * @param {Vector2} v1 - * @param {Vector2} v2 - * @return {number} - */ -function dot(v1, v2) { - return v1[0] * v2[0] + v1[1] * v2[1]; -} - -/** - * 向量缩放 - * @param {Vector2} out - * @param {Vector2} v - * @param {number} s - */ -function scale(out, v, s) { - out[0] = v[0] * s; - out[1] = v[1] * s; - return out; -} - -/** - * 向量归一化 - * @param {Vector2} out - * @param {Vector2} v - */ -function normalize(out, v) { - var d = len(v); - if (d === 0) { - out[0] = 0; - out[1] = 0; - } - else { - out[0] = v[0] / d; - out[1] = v[1] / d; - } - return out; -} - -/** - * 计算向量间距离 - * @param {Vector2} v1 - * @param {Vector2} v2 - * @return {number} - */ -function distance(v1, v2) { - return Math.sqrt( - (v1[0] - v2[0]) * (v1[0] - v2[0]) - + (v1[1] - v2[1]) * (v1[1] - v2[1]) - ); -} -var dist = distance; - -/** - * 向量距离平方 - * @param {Vector2} v1 - * @param {Vector2} v2 - * @return {number} - */ -function distanceSquare(v1, v2) { - return (v1[0] - v2[0]) * (v1[0] - v2[0]) - + (v1[1] - v2[1]) * (v1[1] - v2[1]); -} -var distSquare = distanceSquare; - -/** - * 求负向量 - * @param {Vector2} out - * @param {Vector2} v - */ -function negate(out, v) { - out[0] = -v[0]; - out[1] = -v[1]; - return out; -} - -/** - * 插值两个点 - * @param {Vector2} out - * @param {Vector2} v1 - * @param {Vector2} v2 - * @param {number} t - */ -function lerp(out, v1, v2, t) { - out[0] = v1[0] + t * (v2[0] - v1[0]); - out[1] = v1[1] + t * (v2[1] - v1[1]); - return out; -} - -/** - * 矩阵左乘向量 - * @param {Vector2} out - * @param {Vector2} v - * @param {Vector2} m - */ -function applyTransform(out, v, m) { - var x = v[0]; - var y = v[1]; - out[0] = m[0] * x + m[2] * y + m[4]; - out[1] = m[1] * x + m[3] * y + m[5]; - return out; -} - -/** - * 求两个向量最小值 - * @param {Vector2} out - * @param {Vector2} v1 - * @param {Vector2} v2 - */ -function min(out, v1, v2) { - out[0] = Math.min(v1[0], v2[0]); - out[1] = Math.min(v1[1], v2[1]); - return out; -} - -/** - * 求两个向量最大值 - * @param {Vector2} out - * @param {Vector2} v1 - * @param {Vector2} v2 - */ -function max(out, v1, v2) { - out[0] = Math.max(v1[0], v2[0]); - out[1] = Math.max(v1[1], v2[1]); - return out; -} - - -var vector = (Object.freeze || Object)({ - create: create, - copy: copy, - clone: clone$1, - set: set, - add: add, - scaleAndAdd: scaleAndAdd, - sub: sub, - len: len, - length: length, - lenSquare: lenSquare, - lengthSquare: lengthSquare, - mul: mul, - div: div, - dot: dot, - scale: scale, - normalize: normalize, - distance: distance, - dist: dist, - distanceSquare: distanceSquare, - distSquare: distSquare, - negate: negate, - lerp: lerp, - applyTransform: applyTransform, - min: min, - max: max -}); - -// TODO Draggable for group -// FIXME Draggable on element which has parent rotation or scale -function Draggable() { - - this.on('mousedown', this._dragStart, this); - this.on('mousemove', this._drag, this); - this.on('mouseup', this._dragEnd, this); - // `mosuemove` and `mouseup` can be continue to fire when dragging. - // See [Drag outside] in `Handler.js`. So we do not need to trigger - // `_dragEnd` when globalout. That would brings better user experience. - // this.on('globalout', this._dragEnd, this); - - // this._dropTarget = null; - // this._draggingTarget = null; - - // this._x = 0; - // this._y = 0; -} - -Draggable.prototype = { - - constructor: Draggable, - - _dragStart: function (e) { - var draggingTarget = e.target; - if (draggingTarget && draggingTarget.draggable) { - this._draggingTarget = draggingTarget; - draggingTarget.dragging = true; - this._x = e.offsetX; - this._y = e.offsetY; - - this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event); - } - }, - - _drag: function (e) { - var draggingTarget = this._draggingTarget; - if (draggingTarget) { - - var x = e.offsetX; - var y = e.offsetY; - - var dx = x - this._x; - var dy = y - this._y; - this._x = x; - this._y = y; - - draggingTarget.drift(dx, dy, e); - this.dispatchToElement(param(draggingTarget, e), 'drag', e.event); - - var dropTarget = this.findHover(x, y, draggingTarget).target; - var lastDropTarget = this._dropTarget; - this._dropTarget = dropTarget; - - if (draggingTarget !== dropTarget) { - if (lastDropTarget && dropTarget !== lastDropTarget) { - this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event); - } - if (dropTarget && dropTarget !== lastDropTarget) { - this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event); - } - } - } - }, - - _dragEnd: function (e) { - var draggingTarget = this._draggingTarget; - - if (draggingTarget) { - draggingTarget.dragging = false; - } - - this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event); - - if (this._dropTarget) { - this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event); - } - - this._draggingTarget = null; - this._dropTarget = null; - } - -}; - -function param(target, e) { - return {target: target, topTarget: e && e.topTarget}; -} - -/** - * Event Mixin - * @module zrender/mixin/Eventful - * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) - * pissang (https://www.github.com/pissang) - */ - -var arrySlice = Array.prototype.slice; - -/** - * Event dispatcher. - * - * @alias module:zrender/mixin/Eventful - * @constructor - * @param {Object} [eventProcessor] The object eventProcessor is the scope when - * `eventProcessor.xxx` called. - * @param {Function} [eventProcessor.normalizeQuery] - * param: {string|Object} Raw query. - * return: {string|Object} Normalized query. - * @param {Function} [eventProcessor.filter] Event will be dispatched only - * if it returns `true`. - * param: {string} eventType - * param: {string|Object} query - * return: {boolean} - * @param {Function} [eventProcessor.afterTrigger] Called after all handlers called. - * param: {string} eventType - */ -var Eventful = function (eventProcessor) { - this._$handlers = {}; - this._$eventProcessor = eventProcessor; -}; - -Eventful.prototype = { - - constructor: Eventful, - - /** - * The handler can only be triggered once, then removed. - * - * @param {string} event The event name. - * @param {string|Object} [query] Condition used on event filter. - * @param {Function} handler The event handler. - * @param {Object} context - */ - one: function (event, query, handler, context) { - return on(this, event, query, handler, context, true); - }, - - /** - * Bind a handler. - * - * @param {string} event The event name. - * @param {string|Object} [query] Condition used on event filter. - * @param {Function} handler The event handler. - * @param {Object} [context] - */ - on: function (event, query, handler, context) { - return on(this, event, query, handler, context, false); - }, - - /** - * Whether any handler has bound. - * - * @param {string} event - * @return {boolean} - */ - isSilent: function (event) { - var _h = this._$handlers; - return !_h[event] || !_h[event].length; - }, - - /** - * Unbind a event. - * - * @param {string} [event] The event name. - * If no `event` input, "off" all listeners. - * @param {Function} [handler] The event handler. - * If no `handler` input, "off" all listeners of the `event`. - */ - off: function (event, handler) { - var _h = this._$handlers; - - if (!event) { - this._$handlers = {}; - return this; - } - - if (handler) { - if (_h[event]) { - var newList = []; - for (var i = 0, l = _h[event].length; i < l; i++) { - if (_h[event][i].h !== handler) { - newList.push(_h[event][i]); - } - } - _h[event] = newList; - } - - if (_h[event] && _h[event].length === 0) { - delete _h[event]; - } - } - else { - delete _h[event]; - } - - return this; - }, - - /** - * Dispatch a event. - * - * @param {string} type The event name. - */ - trigger: function (type) { - var _h = this._$handlers[type]; - var eventProcessor = this._$eventProcessor; - - if (_h) { - var args = arguments; - var argLen = args.length; - - if (argLen > 3) { - args = arrySlice.call(args, 1); - } - - var len = _h.length; - for (var i = 0; i < len;) { - var hItem = _h[i]; - if (eventProcessor - && eventProcessor.filter - && hItem.query != null - && !eventProcessor.filter(type, hItem.query) - ) { - i++; - continue; - } - - // Optimize advise from backbone - switch (argLen) { - case 1: - hItem.h.call(hItem.ctx); - break; - case 2: - hItem.h.call(hItem.ctx, args[1]); - break; - case 3: - hItem.h.call(hItem.ctx, args[1], args[2]); - break; - default: - // have more than 2 given arguments - hItem.h.apply(hItem.ctx, args); - break; - } - - if (hItem.one) { - _h.splice(i, 1); - len--; - } - else { - i++; - } - } - } - - eventProcessor && eventProcessor.afterTrigger - && eventProcessor.afterTrigger(type); - - return this; - }, - - /** - * Dispatch a event with context, which is specified at the last parameter. - * - * @param {string} type The event name. - */ - triggerWithContext: function (type) { - var _h = this._$handlers[type]; - var eventProcessor = this._$eventProcessor; - - if (_h) { - var args = arguments; - var argLen = args.length; - - if (argLen > 4) { - args = arrySlice.call(args, 1, args.length - 1); - } - var ctx = args[args.length - 1]; - - var len = _h.length; - for (var i = 0; i < len;) { - var hItem = _h[i]; - if (eventProcessor - && eventProcessor.filter - && hItem.query != null - && !eventProcessor.filter(type, hItem.query) - ) { - i++; - continue; - } - - // Optimize advise from backbone - switch (argLen) { - case 1: - hItem.h.call(ctx); - break; - case 2: - hItem.h.call(ctx, args[1]); - break; - case 3: - hItem.h.call(ctx, args[1], args[2]); - break; - default: - // have more than 2 given arguments - hItem.h.apply(ctx, args); - break; - } - - if (hItem.one) { - _h.splice(i, 1); - len--; - } - else { - i++; - } - } - } - - eventProcessor && eventProcessor.afterTrigger - && eventProcessor.afterTrigger(type); - - return this; - } -}; - - -function normalizeQuery(host, query) { - var eventProcessor = host._$eventProcessor; - if (query != null && eventProcessor && eventProcessor.normalizeQuery) { - query = eventProcessor.normalizeQuery(query); - } - return query; -} - -function on(eventful, event, query, handler, context, isOnce) { - var _h = eventful._$handlers; - - if (typeof query === 'function') { - context = handler; - handler = query; - query = null; - } - - if (!handler || !event) { - return eventful; - } - - query = normalizeQuery(eventful, query); - - if (!_h[event]) { - _h[event] = []; - } - - for (var i = 0; i < _h[event].length; i++) { - if (_h[event][i].h === handler) { - return eventful; - } - } - - var wrap = { - h: handler, - one: isOnce, - query: query, - ctx: context || eventful, - // FIXME - // Do not publish this feature util it is proved that it makes sense. - callAtLast: handler.zrEventfulCallAtLast - }; - - var lastIndex = _h[event].length - 1; - var lastWrap = _h[event][lastIndex]; - (lastWrap && lastWrap.callAtLast) - ? _h[event].splice(lastIndex, 0, wrap) - : _h[event].push(wrap); - - return eventful; -} - -/** - * The algoritm is learnt from - * https://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - * And we made some optimization for matrix inversion. - * Other similar approaches: - * "cv::getPerspectiveTransform", "Direct Linear Transformation". - */ - -var LN2 = Math.log(2); - -function determinant(rows, rank, rowStart, rowMask, colMask, detCache) { - var cacheKey = rowMask + '-' + colMask; - var fullRank = rows.length; - - if (detCache.hasOwnProperty(cacheKey)) { - return detCache[cacheKey]; - } - - if (rank === 1) { - // In this case the colMask must be like: `11101111`. We can find the place of `0`. - var colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2); - return rows[rowStart][colStart]; - } - - var subRowMask = rowMask | (1 << rowStart); - var subRowStart = rowStart + 1; - while (rowMask & (1 << subRowStart)) { - subRowStart++; - } - - var sum = 0; - for (var j = 0, colLocalIdx = 0; j < fullRank; j++) { - var colTag = 1 << j; - if (!(colTag & colMask)) { - sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j] - // det(subMatrix(0, j)) - * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache); - colLocalIdx++; - } - } - - detCache[cacheKey] = sum; - - return sum; -} - -/** - * Usage: - * ```js - * var transformer = buildTransformer( - * [10, 44, 100, 44, 100, 300, 10, 300], - * [50, 54, 130, 14, 140, 330, 14, 220] - * ); - * var out = []; - * transformer && transformer([11, 33], out); - * ``` - * - * Notice: `buildTransformer` may take more than 10ms in some Android device. - * - * @param {Array.} src source four points, [x0, y0, x1, y1, x2, y2, x3, y3] - * @param {Array.} dest destination four points, [x0, y0, x1, y1, x2, y2, x3, y3] - * @return {Function} transformer If fail, return null/undefined. - */ -function buildTransformer(src, dest) { - var mA = [ - [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]], - [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]], - [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]], - [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]], - [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]], - [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]], - [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]], - [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]] - ]; - - var detCache = {}; - var det = determinant(mA, 8, 0, 0, 0, detCache); - if (det === 0) { - return; - } - - // `invert(mA) * dest`, that is, `adj(mA) / det * dest`. - var vh = []; - for (var i = 0; i < 8; i++) { - for (var j = 0; j < 8; j++) { - vh[j] == null && (vh[j] = 0); - vh[j] += ((i + j) % 2 ? -1 : 1) - // det(subMatrix(i, j)) - * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache) - / det * dest[i]; - } - } - - return function (out, srcPointX, srcPointY) { - var pk = srcPointX * vh[6] + srcPointY * vh[7] + 1; - out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk; - out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk; - }; -} - -/** - * Utilities for mouse or touch events. - */ - -var isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener; - -var MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/; -var EVENT_SAVED_PROP = '___zrEVENTSAVED'; -var _calcOut = []; - -/** - * Get the `zrX` and `zrY`, which are relative to the top-left of - * the input `el`. - * CSS transform (2D & 3D) is supported. - * - * The strategy to fetch the coords: - * + If `calculate` is not set as `true`, users of this method should - * ensure that `el` is the same or the same size & location as `e.target`. - * Otherwise the result coords are probably not expected. Because we - * firstly try to get coords from e.offsetX/e.offsetY. - * + If `calculate` is set as `true`, the input `el` can be any element - * and we force to calculate the coords based on `el`. - * + The input `el` should be positionable (not position:static). - * - * The force `calculate` can be used in case like: - * When mousemove event triggered on ec tooltip, `e.target` is not `el`(zr painter.dom). - * - * @param {HTMLElement} el DOM element. - * @param {Event} e Mouse event or touch event. - * @param {Object} out Get `out.zrX` and `out.zrY` as the result. - * @param {boolean} [calculate=false] Whether to force calculate - * the coordinates but not use ones provided by browser. - */ -function clientToLocal(el, e, out, calculate) { - out = out || {}; - - // According to the W3C Working Draft, offsetX and offsetY should be relative - // to the padding edge of the target element. The only browser using this convention - // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does - // not support the properties. - // (see http://www.jacklmoore.com/notes/mouse-position/) - // In zr painter.dom, padding edge equals to border edge. - - if (calculate || !env$1.canvasSupported) { - calculateZrXY(el, e, out); - } - // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned - // ancestor element, so we should make sure el is positioned (e.g., not position:static). - // BTW1, Webkit don't return the same results as FF in non-simple cases (like add - // zoom-factor, overflow / opacity layers, transforms ...) - // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d. - // - // BTW3, In ff, offsetX/offsetY is always 0. - else if (env$1.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) { - out.zrX = e.layerX; - out.zrY = e.layerY; - } - // For IE6+, chrome, safari, opera. (When will ff support offsetX?) - else if (e.offsetX != null) { - out.zrX = e.offsetX; - out.zrY = e.offsetY; - } - // For some other device, e.g., IOS safari. - else { - calculateZrXY(el, e, out); - } - - return out; -} - -function calculateZrXY(el, e, out) { - // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect. - if (el.getBoundingClientRect && env$1.domSupported) { - var ex = e.clientX; - var ey = e.clientY; - - if (el.nodeName.toUpperCase() === 'CANVAS') { - // Original approach, which do not support CSS transform. - // marker can not be locationed in a canvas container - // (getBoundingClientRect is always 0). We do not support - // that input a pre-created canvas to zr while using css - // transform in iOS. - var box = el.getBoundingClientRect(); - out.zrX = ex - box.left; - out.zrY = ey - box.top; - return; - } - else { - var saved = el[EVENT_SAVED_PROP] || (el[EVENT_SAVED_PROP] = {}); - var transformer = preparePointerTransformer(prepareCoordMarkers(el, saved), saved); - if (transformer) { - transformer(_calcOut, ex, ey); - out.zrX = _calcOut[0]; - out.zrY = _calcOut[1]; - return; - } - } - } - out.zrX = out.zrY = 0; -} - -function prepareCoordMarkers(el, saved) { - var markers = saved.markers; - if (markers) { - return markers; - } - - markers = saved.markers = []; - var propLR = ['left', 'right']; - var propTB = ['top', 'bottom']; - - for (var i = 0; i < 4; i++) { - var marker = document.createElement('div'); - var stl = marker.style; - var idxLR = i % 2; - var idxTB = (i >> 1) % 2; - stl.cssText = [ - 'position:absolute', - 'visibility: hidden', - 'padding: 0', - 'margin: 0', - 'border-width: 0', - 'width:0', - 'height:0', - // 'width: 5px', - // 'height: 5px', - propLR[idxLR] + ':0', - propTB[idxTB] + ':0', - propLR[1 - idxLR] + ':auto', - propTB[1 - idxTB] + ':auto', - '' - ].join('!important;'); - el.appendChild(marker); - markers.push(marker); - } - - return markers; -} - -function preparePointerTransformer(markers, saved) { - var transformer = saved.transformer; - var oldSrcCoords = saved.srcCoords; - var useOld = true; - var srcCoords = []; - var destCoords = []; - - for (var i = 0; i < 4; i++) { - var rect = markers[i].getBoundingClientRect(); - var ii = 2 * i; - var x = rect.left; - var y = rect.top; - srcCoords.push(x, y); - useOld &= oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1]; - destCoords.push(markers[i].offsetLeft, markers[i].offsetTop); - } - - // Cache to avoid time consuming of `buildTransformer`. - return useOld - ? transformer - : ( - saved.srcCoords = srcCoords, - saved.transformer = buildTransformer(srcCoords, destCoords) - ); -} - -/** - * Find native event compat for legency IE. - * Should be called at the begining of a native event listener. - * - * @param {Event} [e] Mouse event or touch event or pointer event. - * For lagency IE, we use `window.event` is used. - * @return {Event} The native event. - */ -function getNativeEvent(e) { - return e || window.event; -} - -/** - * Normalize the coordinates of the input event. - * - * Get the `e.zrX` and `e.zrY`, which are relative to the top-left of - * the input `el`. - * Get `e.zrDelta` if using mouse wheel. - * Get `e.which`, see the comment inside this function. - * - * Do not calculate repeatly if `zrX` and `zrY` already exist. - * - * Notice: see comments in `clientToLocal`. check the relationship - * between the result coords and the parameters `el` and `calculate`. - * - * @param {HTMLElement} el DOM element. - * @param {Event} [e] See `getNativeEvent`. - * @param {boolean} [calculate=false] Whether to force calculate - * the coordinates but not use ones provided by browser. - * @return {UIEvent} The normalized native UIEvent. - */ -function normalizeEvent(el, e, calculate) { - - e = getNativeEvent(e); - - if (e.zrX != null) { - return e; - } - - var eventType = e.type; - var isTouch = eventType && eventType.indexOf('touch') >= 0; - - if (!isTouch) { - clientToLocal(el, e, e, calculate); - e.zrDelta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3; - } - else { - var touch = eventType !== 'touchend' - ? e.targetTouches[0] - : e.changedTouches[0]; - touch && clientToLocal(el, touch, e, calculate); - } - - // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0; - // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js - // If e.which has been defined, it may be readonly, - // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which - var button = e.button; - if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) { - e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0))); - } - // [Caution]: `e.which` from browser is not always reliable. For example, - // when press left button and `mousemove (pointermove)` in Edge, the `e.which` - // is 65536 and the `e.button` is -1. But the `mouseup (pointerup)` and - // `mousedown (pointerdown)` is the same as Chrome does. - - return e; -} - -/** - * @param {HTMLElement} el - * @param {string} name - * @param {Function} handler - * @param {Object|boolean} opt If boolean, means `opt.capture` - * @param {boolean} [opt.capture=false] - * @param {boolean} [opt.passive=false] - */ -function addEventListener(el, name, handler, opt) { - if (isDomLevel2) { - // Reproduct the console warning: - // [Violation] Added non-passive event listener to a scroll-blocking event. - // Consider marking event handler as 'passive' to make the page more responsive. - // Just set console log level: verbose in chrome dev tool. - // then the warning log will be printed when addEventListener called. - // See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md - // We have not yet found a neat way to using passive. Because in zrender the dom event - // listener delegate all of the upper events of element. Some of those events need - // to prevent default. For example, the feature `preventDefaultMouseMove` of echarts. - // Before passive can be adopted, these issues should be considered: - // (1) Whether and how a zrender user specifies an event listener passive. And by default, - // passive or not. - // (2) How to tread that some zrender event listener is passive, and some is not. If - // we use other way but not preventDefault of mousewheel and touchmove, browser - // compatibility should be handled. - - // var opts = (env.passiveSupported && name === 'mousewheel') - // ? {passive: true} - // // By default, the third param of el.addEventListener is `capture: false`. - // : void 0; - // el.addEventListener(name, handler /* , opts */); - el.addEventListener(name, handler, opt); - } - else { - // For simplicity, do not implement `setCapture` for IE9-. - el.attachEvent('on' + name, handler); - } -} - -/** - * Parameter are the same as `addEventListener`. - * - * Notice that if a listener is registered twice, one with capture and one without, - * remove each one separately. Removal of a capturing listener does not affect a - * non-capturing version of the same listener, and vice versa. - */ -function removeEventListener(el, name, handler, opt) { - if (isDomLevel2) { - el.removeEventListener(name, handler, opt); - } - else { - el.detachEvent('on' + name, handler); - } -} - -/** - * preventDefault and stopPropagation. - * Notice: do not use this method in zrender. It can only be - * used by upper applications if necessary. - * - * @param {Event} e A mouse or touch event. - */ -var stop = isDomLevel2 - ? function (e) { - e.preventDefault(); - e.stopPropagation(); - e.cancelBubble = true; - } - : function (e) { - e.returnValue = false; - e.cancelBubble = true; - }; - -/** - * This method only works for mouseup and mousedown. The functionality is restricted - * for fault tolerance, See the `e.which` compatibility above. - * - * @param {MouseEvent} e - * @return {boolean} - */ - - -/** - * To be removed. - * @deprecated - */ - -/** - * Only implements needed gestures for mobile. - */ - -var GestureMgr = function () { - - /** - * @private - * @type {Array.} - */ - this._track = []; -}; - -GestureMgr.prototype = { - - constructor: GestureMgr, - - recognize: function (event, target, root) { - this._doTrack(event, target, root); - return this._recognize(event); - }, - - clear: function () { - this._track.length = 0; - return this; - }, - - _doTrack: function (event, target, root) { - var touches = event.touches; - - if (!touches) { - return; - } - - var trackItem = { - points: [], - touches: [], - target: target, - event: event - }; - - for (var i = 0, len = touches.length; i < len; i++) { - var touch = touches[i]; - var pos = clientToLocal(root, touch, {}); - trackItem.points.push([pos.zrX, pos.zrY]); - trackItem.touches.push(touch); - } - - this._track.push(trackItem); - }, - - _recognize: function (event) { - for (var eventName in recognizers) { - if (recognizers.hasOwnProperty(eventName)) { - var gestureInfo = recognizers[eventName](this._track, event); - if (gestureInfo) { - return gestureInfo; - } - } - } - } -}; - -function dist$1(pointPair) { - var dx = pointPair[1][0] - pointPair[0][0]; - var dy = pointPair[1][1] - pointPair[0][1]; - - return Math.sqrt(dx * dx + dy * dy); -} - -function center(pointPair) { - return [ - (pointPair[0][0] + pointPair[1][0]) / 2, - (pointPair[0][1] + pointPair[1][1]) / 2 - ]; -} - -var recognizers = { - - pinch: function (track, event) { - var trackLen = track.length; - - if (!trackLen) { - return; - } - - var pinchEnd = (track[trackLen - 1] || {}).points; - var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd; - - if (pinchPre - && pinchPre.length > 1 - && pinchEnd - && pinchEnd.length > 1 - ) { - var pinchScale = dist$1(pinchEnd) / dist$1(pinchPre); - !isFinite(pinchScale) && (pinchScale = 1); - - event.pinchScale = pinchScale; - - var pinchCenter = center(pinchEnd); - event.pinchX = pinchCenter[0]; - event.pinchY = pinchCenter[1]; - - return { - type: 'pinch', - target: track[0].target, - event: event - }; - } - } - - // Only pinch currently. -}; - -/** - * [The interface between `Handler` and `HandlerProxy`]: - * - * The default `HandlerProxy` only support the common standard web environment - * (e.g., standalone browser, headless browser, embed browser in mobild APP, ...). - * But `HandlerProxy` can be replaced to support more non-standard environment - * (e.g., mini app), or to support more feature that the default `HandlerProxy` - * not provided (like echarts-gl did). - * So the interface between `Handler` and `HandlerProxy` should be stable. Do not - * make break changes util inevitable. The interface include the public methods - * of `Handler` and the events listed in `handlerNames` below, by which `HandlerProxy` - * drives `Handler`. - */ - -/** - * [Drag outside]: - * - * That is, triggering `mousemove` and `mouseup` event when the pointer is out of the - * zrender area when dragging. That is important for the improvement of the user experience - * when dragging something near the boundary without being terminated unexpectedly. - * - * We originally consider to introduce new events like `pagemovemove` and `pagemouseup` - * to resolve this issue. But some drawbacks of it is described in - * https://github.com/ecomfe/zrender/pull/536#issuecomment-560286899 - * - * Instead, we referenced the specifications: - * https://www.w3.org/TR/touch-events/#the-touchmove-event - * https://www.w3.org/TR/2014/WD-DOM-Level-3-Events-20140925/#event-type-mousemove - * where the the mousemove/touchmove can be continue to fire if the user began a drag - * operation and the pointer has left the boundary. (for the mouse event, browsers - * only do it on `document` and when the pointer has left the boundary of the browser.) - * - * So the default `HandlerProxy` supports this feature similarly: if it is in the dragging - * state (see `pointerCapture` in `HandlerProxy`), the `mousemove` and `mouseup` continue - * to fire until release the pointer. That is implemented by listen to those event on - * `document`. - * If we implement some other `HandlerProxy` only for touch device, that would be easier. - * The touch event support this feature by default. - * - * Note: - * There might be some cases that the mouse event can not be - * received on `document`. For example, - * (A) `useCapture` is not supported and some user defined event listeners on the ancestor - * of zr dom throw Error . - * (B) `useCapture` is not supported Some user defined event listeners on the ancestor of - * zr dom call `stopPropagation`. - * In these cases, the `mousemove` event might be keep triggered event - * if the mouse is released. We try to reduce the side-effect in those cases. - * That is, do nothing (especially, `findHover`) in those cases. See `isOutsideBoundary`. - * - * Note: - * If `HandlerProxy` listens to `document` with `useCapture`, `HandlerProxy` needs to - * make sure `stopPropagation` and `preventDefault` doing nothing if and only if the event - * target is not zrender dom. Becuase it is dangerous to enable users to call them in - * `document` capture phase to prevent the propagation to any listener of the webpage. - * But they are needed to work when the pointer inside the zrender dom. - */ - - -var SILENT = 'silent'; - -function makeEventPacket(eveType, targetInfo, event) { - return { - type: eveType, - event: event, - // target can only be an element that is not silent. - target: targetInfo.target, - // topTarget can be a silent element. - topTarget: targetInfo.topTarget, - cancelBubble: false, - offsetX: event.zrX, - offsetY: event.zrY, - gestureEvent: event.gestureEvent, - pinchX: event.pinchX, - pinchY: event.pinchY, - pinchScale: event.pinchScale, - wheelDelta: event.zrDelta, - zrByTouch: event.zrByTouch, - which: event.which, - stop: stopEvent - }; -} - -function stopEvent() { - stop(this.event); -} - -function EmptyProxy() {} -EmptyProxy.prototype.dispose = function () {}; - - -var handlerNames = [ - 'click', 'dblclick', 'mousewheel', 'mouseout', - 'mouseup', 'mousedown', 'mousemove', 'contextmenu' -]; - -/** - * @alias module:zrender/Handler - * @constructor - * @extends module:zrender/mixin/Eventful - * @param {module:zrender/Storage} storage Storage instance. - * @param {module:zrender/Painter} painter Painter instance. - * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance. - * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()). - */ -var Handler = function (storage, painter, proxy, painterRoot) { - Eventful.call(this); - - this.storage = storage; - - this.painter = painter; - - this.painterRoot = painterRoot; - - proxy = proxy || new EmptyProxy(); - - /** - * Proxy of event. can be Dom, WebGLSurface, etc. - */ - this.proxy = null; - - /** - * {target, topTarget, x, y} - * @private - * @type {Object} - */ - this._hovered = {}; - - /** - * @private - * @type {Date} - */ - this._lastTouchMoment; - - /** - * @private - * @type {number} - */ - this._lastX; - - /** - * @private - * @type {number} - */ - this._lastY; - - /** - * @private - * @type {module:zrender/core/GestureMgr} - */ - this._gestureMgr; - - Draggable.call(this); - - this.setHandlerProxy(proxy); -}; - -Handler.prototype = { - - constructor: Handler, - - setHandlerProxy: function (proxy) { - if (this.proxy) { - this.proxy.dispose(); - } - - if (proxy) { - each(handlerNames, function (name) { - proxy.on && proxy.on(name, this[name], this); - }, this); - // Attach handler - proxy.handler = this; - } - this.proxy = proxy; - }, - - mousemove: function (event) { - var x = event.zrX; - var y = event.zrY; - - var isOutside = isOutsideBoundary(this, x, y); - - var lastHovered = this._hovered; - var lastHoveredTarget = lastHovered.target; - - // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call - // (like 'setOption' or 'dispatchAction') in event handlers, we should find - // lastHovered again here. Otherwise 'mouseout' can not be triggered normally. - // See #6198. - if (lastHoveredTarget && !lastHoveredTarget.__zr) { - lastHovered = this.findHover(lastHovered.x, lastHovered.y); - lastHoveredTarget = lastHovered.target; - } - - var hovered = this._hovered = isOutside ? {x: x, y: y} : this.findHover(x, y); - var hoveredTarget = hovered.target; - - var proxy = this.proxy; - proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default'); - - // Mouse out on previous hovered element - if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) { - this.dispatchToElement(lastHovered, 'mouseout', event); - } - - // Mouse moving on one element - this.dispatchToElement(hovered, 'mousemove', event); - - // Mouse over on a new element - if (hoveredTarget && hoveredTarget !== lastHoveredTarget) { - this.dispatchToElement(hovered, 'mouseover', event); - } - }, - - mouseout: function (event) { - var eventControl = event.zrEventControl; - var zrIsToLocalDOM = event.zrIsToLocalDOM; - - if (eventControl !== 'only_globalout') { - this.dispatchToElement(this._hovered, 'mouseout', event); - } - - if (eventControl !== 'no_globalout') { - // FIXME: if the pointer moving from the extra doms to realy "outside", - // the `globalout` should have been triggered. But currently not. - !zrIsToLocalDOM && this.trigger('globalout', {type: 'globalout', event: event}); - } - }, - - /** - * Resize - */ - resize: function (event) { - this._hovered = {}; - }, - - /** - * Dispatch event - * @param {string} eventName - * @param {event=} eventArgs - */ - dispatch: function (eventName, eventArgs) { - var handler = this[eventName]; - handler && handler.call(this, eventArgs); - }, - - /** - * Dispose - */ - dispose: function () { - - this.proxy.dispose(); - - this.storage = - this.proxy = - this.painter = null; - }, - - /** - * 设置默认的cursor style - * @param {string} [cursorStyle='default'] 例如 crosshair - */ - setCursorStyle: function (cursorStyle) { - var proxy = this.proxy; - proxy.setCursor && proxy.setCursor(cursorStyle); - }, - - /** - * 事件分发代理 - * - * @private - * @param {Object} targetInfo {target, topTarget} 目标图形元素 - * @param {string} eventName 事件名称 - * @param {Object} event 事件对象 - */ - dispatchToElement: function (targetInfo, eventName, event) { - targetInfo = targetInfo || {}; - var el = targetInfo.target; - if (el && el.silent) { - return; - } - var eventHandler = 'on' + eventName; - var eventPacket = makeEventPacket(eventName, targetInfo, event); - - while (el) { - el[eventHandler] - && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket)); - - el.trigger(eventName, eventPacket); - - el = el.parent; - - if (eventPacket.cancelBubble) { - break; - } - } - - if (!eventPacket.cancelBubble) { - // 冒泡到顶级 zrender 对象 - this.trigger(eventName, eventPacket); - // 分发事件到用户自定义层 - // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在 - this.painter && this.painter.eachOtherLayer(function (layer) { - if (typeof (layer[eventHandler]) === 'function') { - layer[eventHandler].call(layer, eventPacket); - } - if (layer.trigger) { - layer.trigger(eventName, eventPacket); - } - }); - } - }, - - /** - * @private - * @param {number} x - * @param {number} y - * @param {module:zrender/graphic/Displayable} exclude - * @return {model:zrender/Element} - * @method - */ - findHover: function (x, y, exclude) { - var list = this.storage.getDisplayList(); - var out = {x: x, y: y}; - - for (var i = list.length - 1; i >= 0; i--) { - var hoverCheckResult; - if (list[i] !== exclude - // getDisplayList may include ignored item in VML mode - && !list[i].ignore - && (hoverCheckResult = isHover(list[i], x, y)) - ) { - !out.topTarget && (out.topTarget = list[i]); - if (hoverCheckResult !== SILENT) { - out.target = list[i]; - break; - } - } - } - - return out; - }, - - processGesture: function (event, stage) { - if (!this._gestureMgr) { - this._gestureMgr = new GestureMgr(); - } - var gestureMgr = this._gestureMgr; - - stage === 'start' && gestureMgr.clear(); - - var gestureInfo = gestureMgr.recognize( - event, - this.findHover(event.zrX, event.zrY, null).target, - this.proxy.dom - ); - - stage === 'end' && gestureMgr.clear(); - - // Do not do any preventDefault here. Upper application do that if necessary. - if (gestureInfo) { - var type = gestureInfo.type; - event.gestureEvent = type; - - this.dispatchToElement({target: gestureInfo.target}, type, gestureInfo.event); - } - } -}; - -// Common handlers -each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) { - Handler.prototype[name] = function (event) { - var x = event.zrX; - var y = event.zrY; - var isOutside = isOutsideBoundary(this, x, y); - - var hovered; - var hoveredTarget; - - if (name !== 'mouseup' || !isOutside) { - // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover - hovered = this.findHover(x, y); - hoveredTarget = hovered.target; - } - - if (name === 'mousedown') { - this._downEl = hoveredTarget; - this._downPoint = [event.zrX, event.zrY]; - // In case click triggered before mouseup - this._upEl = hoveredTarget; - } - else if (name === 'mouseup') { - this._upEl = hoveredTarget; - } - else if (name === 'click') { - if (this._downEl !== this._upEl - // Original click event is triggered on the whole canvas element, - // including the case that `mousedown` - `mousemove` - `mouseup`, - // which should be filtered, otherwise it will bring trouble to - // pan and zoom. - || !this._downPoint - // Arbitrary value - || dist(this._downPoint, [event.zrX, event.zrY]) > 4 - ) { - return; - } - this._downPoint = null; - } - - this.dispatchToElement(hovered, name, event); - }; -}); - -function isHover(displayable, x, y) { - if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) { - var el = displayable; - var isSilent; - while (el) { - // If clipped by ancestor. - // FIXME: If clipPath has neither stroke nor fill, - // el.clipPath.contain(x, y) will always return false. - if (el.clipPath && !el.clipPath.contain(x, y)) { - return false; - } - if (el.silent) { - isSilent = true; - } - el = el.parent; - } - return isSilent ? SILENT : true; - } - - return false; -} - -/** - * See [Drag outside]. - */ -function isOutsideBoundary(handlerInstance, x, y) { - var painter = handlerInstance.painter; - return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight(); -} - -mixin(Handler, Eventful); -mixin(Handler, Draggable); - -/** - * 3x2矩阵操作类 - * @exports zrender/tool/matrix - */ - -/* global Float32Array */ - -var ArrayCtor$1 = typeof Float32Array === 'undefined' - ? Array - : Float32Array; - -/** - * Create a identity matrix. - * @return {Float32Array|Array.} - */ -function create$1() { - var out = new ArrayCtor$1(6); - identity(out); - - return out; -} - -/** - * 设置矩阵为单位矩阵 - * @param {Float32Array|Array.} out - */ -function identity(out) { - out[0] = 1; - out[1] = 0; - out[2] = 0; - out[3] = 1; - out[4] = 0; - out[5] = 0; - return out; -} - -/** - * 复制矩阵 - * @param {Float32Array|Array.} out - * @param {Float32Array|Array.} m - */ -function copy$1(out, m) { - out[0] = m[0]; - out[1] = m[1]; - out[2] = m[2]; - out[3] = m[3]; - out[4] = m[4]; - out[5] = m[5]; - return out; -} - -/** - * 矩阵相乘 - * @param {Float32Array|Array.} out - * @param {Float32Array|Array.} m1 - * @param {Float32Array|Array.} m2 - */ -function mul$1(out, m1, m2) { - // Consider matrix.mul(m, m2, m); - // where out is the same as m2. - // So use temp variable to escape error. - var out0 = m1[0] * m2[0] + m1[2] * m2[1]; - var out1 = m1[1] * m2[0] + m1[3] * m2[1]; - var out2 = m1[0] * m2[2] + m1[2] * m2[3]; - var out3 = m1[1] * m2[2] + m1[3] * m2[3]; - var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4]; - var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5]; - out[0] = out0; - out[1] = out1; - out[2] = out2; - out[3] = out3; - out[4] = out4; - out[5] = out5; - return out; -} - -/** - * 平移变换 - * @param {Float32Array|Array.} out - * @param {Float32Array|Array.} a - * @param {Float32Array|Array.} v - */ -function translate(out, a, v) { - out[0] = a[0]; - out[1] = a[1]; - out[2] = a[2]; - out[3] = a[3]; - out[4] = a[4] + v[0]; - out[5] = a[5] + v[1]; - return out; -} - -/** - * 旋转变换 - * @param {Float32Array|Array.} out - * @param {Float32Array|Array.} a - * @param {number} rad - */ -function rotate(out, a, rad) { - var aa = a[0]; - var ac = a[2]; - var atx = a[4]; - var ab = a[1]; - var ad = a[3]; - var aty = a[5]; - var st = Math.sin(rad); - var ct = Math.cos(rad); - - out[0] = aa * ct + ab * st; - out[1] = -aa * st + ab * ct; - out[2] = ac * ct + ad * st; - out[3] = -ac * st + ct * ad; - out[4] = ct * atx + st * aty; - out[5] = ct * aty - st * atx; - return out; -} - -/** - * 缩放变换 - * @param {Float32Array|Array.} out - * @param {Float32Array|Array.} a - * @param {Float32Array|Array.} v - */ -function scale$1(out, a, v) { - var vx = v[0]; - var vy = v[1]; - out[0] = a[0] * vx; - out[1] = a[1] * vy; - out[2] = a[2] * vx; - out[3] = a[3] * vy; - out[4] = a[4] * vx; - out[5] = a[5] * vy; - return out; -} - -/** - * 求逆矩阵 - * @param {Float32Array|Array.} out - * @param {Float32Array|Array.} a - */ -function invert(out, a) { - - var aa = a[0]; - var ac = a[2]; - var atx = a[4]; - var ab = a[1]; - var ad = a[3]; - var aty = a[5]; - - var det = aa * ad - ab * ac; - if (!det) { - return null; - } - det = 1.0 / det; - - out[0] = ad * det; - out[1] = -ab * det; - out[2] = -ac * det; - out[3] = aa * det; - out[4] = (ac * aty - ad * atx) * det; - out[5] = (ab * atx - aa * aty) * det; - return out; -} - -/** - * Clone a new matrix. - * @param {Float32Array|Array.} a - */ -function clone$2(a) { - var b = create$1(); - copy$1(b, a); - return b; -} - -var matrix = (Object.freeze || Object)({ - create: create$1, - identity: identity, - copy: copy$1, - mul: mul$1, - translate: translate, - rotate: rotate, - scale: scale$1, - invert: invert, - clone: clone$2 -}); - -/** - * 提供变换扩展 - * @module zrender/mixin/Transformable - * @author pissang (https://www.github.com/pissang) - */ - -var mIdentity = identity; - -var EPSILON = 5e-5; - -function isNotAroundZero(val) { - return val > EPSILON || val < -EPSILON; -} - -/** - * @alias module:zrender/mixin/Transformable - * @constructor - */ -var Transformable = function (opts) { - opts = opts || {}; - // If there are no given position, rotation, scale - if (!opts.position) { - /** - * 平移 - * @type {Array.} - * @default [0, 0] - */ - this.position = [0, 0]; - } - if (opts.rotation == null) { - /** - * 旋转 - * @type {Array.} - * @default 0 - */ - this.rotation = 0; - } - if (!opts.scale) { - /** - * 缩放 - * @type {Array.} - * @default [1, 1] - */ - this.scale = [1, 1]; - } - /** - * 旋转和缩放的原点 - * @type {Array.} - * @default null - */ - this.origin = this.origin || null; -}; - -var transformableProto = Transformable.prototype; -transformableProto.transform = null; - -/** - * 判断是否需要有坐标变换 - * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵 - */ -transformableProto.needLocalTransform = function () { - return isNotAroundZero(this.rotation) - || isNotAroundZero(this.position[0]) - || isNotAroundZero(this.position[1]) - || isNotAroundZero(this.scale[0] - 1) - || isNotAroundZero(this.scale[1] - 1); -}; - -var scaleTmp = []; -transformableProto.updateTransform = function () { - var parent = this.parent; - var parentHasTransform = parent && parent.transform; - var needLocalTransform = this.needLocalTransform(); - - var m = this.transform; - if (!(needLocalTransform || parentHasTransform)) { - m && mIdentity(m); - return; - } - - m = m || create$1(); - - if (needLocalTransform) { - this.getLocalTransform(m); - } - else { - mIdentity(m); - } - - // 应用父节点变换 - if (parentHasTransform) { - if (needLocalTransform) { - mul$1(m, parent.transform, m); - } - else { - copy$1(m, parent.transform); - } - } - // 保存这个变换矩阵 - this.transform = m; - - var globalScaleRatio = this.globalScaleRatio; - if (globalScaleRatio != null && globalScaleRatio !== 1) { - this.getGlobalScale(scaleTmp); - var relX = scaleTmp[0] < 0 ? -1 : 1; - var relY = scaleTmp[1] < 0 ? -1 : 1; - var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0; - var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0; - - m[0] *= sx; - m[1] *= sx; - m[2] *= sy; - m[3] *= sy; - } - - this.invTransform = this.invTransform || create$1(); - invert(this.invTransform, m); -}; - -transformableProto.getLocalTransform = function (m) { - return Transformable.getLocalTransform(this, m); -}; - -/** - * 将自己的transform应用到context上 - * @param {CanvasRenderingContext2D} ctx - */ -transformableProto.setTransform = function (ctx) { - var m = this.transform; - var dpr = ctx.dpr || 1; - if (m) { - ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]); - } - else { - ctx.setTransform(dpr, 0, 0, dpr, 0, 0); - } -}; - -transformableProto.restoreTransform = function (ctx) { - var dpr = ctx.dpr || 1; - ctx.setTransform(dpr, 0, 0, dpr, 0, 0); -}; - -var tmpTransform = []; -var originTransform = create$1(); - -transformableProto.setLocalTransform = function (m) { - if (!m) { - // TODO return or set identity? - return; - } - var sx = m[0] * m[0] + m[1] * m[1]; - var sy = m[2] * m[2] + m[3] * m[3]; - var position = this.position; - var scale$$1 = this.scale; - if (isNotAroundZero(sx - 1)) { - sx = Math.sqrt(sx); - } - if (isNotAroundZero(sy - 1)) { - sy = Math.sqrt(sy); - } - if (m[0] < 0) { - sx = -sx; - } - if (m[3] < 0) { - sy = -sy; - } - - position[0] = m[4]; - position[1] = m[5]; - scale$$1[0] = sx; - scale$$1[1] = sy; - this.rotation = Math.atan2(-m[1] / sy, m[0] / sx); -}; -/** - * 分解`transform`矩阵到`position`, `rotation`, `scale` - */ -transformableProto.decomposeTransform = function () { - if (!this.transform) { - return; - } - var parent = this.parent; - var m = this.transform; - if (parent && parent.transform) { - // Get local transform and decompose them to position, scale, rotation - mul$1(tmpTransform, parent.invTransform, m); - m = tmpTransform; - } - var origin = this.origin; - if (origin && (origin[0] || origin[1])) { - originTransform[4] = origin[0]; - originTransform[5] = origin[1]; - mul$1(tmpTransform, m, originTransform); - tmpTransform[4] -= origin[0]; - tmpTransform[5] -= origin[1]; - m = tmpTransform; - } - - this.setLocalTransform(m); -}; - -/** - * Get global scale - * @return {Array.} - */ -transformableProto.getGlobalScale = function (out) { - var m = this.transform; - out = out || []; - if (!m) { - out[0] = 1; - out[1] = 1; - return out; - } - out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]); - out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]); - if (m[0] < 0) { - out[0] = -out[0]; - } - if (m[3] < 0) { - out[1] = -out[1]; - } - return out; -}; -/** - * 变换坐标位置到 shape 的局部坐标空间 - * @method - * @param {number} x - * @param {number} y - * @return {Array.} - */ -transformableProto.transformCoordToLocal = function (x, y) { - var v2 = [x, y]; - var invTransform = this.invTransform; - if (invTransform) { - applyTransform(v2, v2, invTransform); - } - return v2; -}; - -/** - * 变换局部坐标位置到全局坐标空间 - * @method - * @param {number} x - * @param {number} y - * @return {Array.} - */ -transformableProto.transformCoordToGlobal = function (x, y) { - var v2 = [x, y]; - var transform = this.transform; - if (transform) { - applyTransform(v2, v2, transform); - } - return v2; -}; - -/** - * @static - * @param {Object} target - * @param {Array.} target.origin - * @param {number} target.rotation - * @param {Array.} target.position - * @param {Array.} [m] - */ -Transformable.getLocalTransform = function (target, m) { - m = m || []; - mIdentity(m); - - var origin = target.origin; - var scale$$1 = target.scale || [1, 1]; - var rotation = target.rotation || 0; - var position = target.position || [0, 0]; - - if (origin) { - // Translate to origin - m[4] -= origin[0]; - m[5] -= origin[1]; - } - scale$1(m, m, scale$$1); - if (rotation) { - rotate(m, m, rotation); - } - if (origin) { - // Translate back from origin - m[4] += origin[0]; - m[5] += origin[1]; - } - - m[4] += position[0]; - m[5] += position[1]; - - return m; -}; - -/** - * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js - * @see http://sole.github.io/tween.js/examples/03_graphs.html - * @exports zrender/animation/easing - */ -var easing = { - /** - * @param {number} k - * @return {number} - */ - linear: function (k) { - return k; - }, - - /** - * @param {number} k - * @return {number} - */ - quadraticIn: function (k) { - return k * k; - }, - /** - * @param {number} k - * @return {number} - */ - quadraticOut: function (k) { - return k * (2 - k); - }, - /** - * @param {number} k - * @return {number} - */ - quadraticInOut: function (k) { - if ((k *= 2) < 1) { - return 0.5 * k * k; - } - return -0.5 * (--k * (k - 2) - 1); - }, - - // 三次方的缓动(t^3) - /** - * @param {number} k - * @return {number} - */ - cubicIn: function (k) { - return k * k * k; - }, - /** - * @param {number} k - * @return {number} - */ - cubicOut: function (k) { - return --k * k * k + 1; - }, - /** - * @param {number} k - * @return {number} - */ - cubicInOut: function (k) { - if ((k *= 2) < 1) { - return 0.5 * k * k * k; - } - return 0.5 * ((k -= 2) * k * k + 2); - }, - - // 四次方的缓动(t^4) - /** - * @param {number} k - * @return {number} - */ - quarticIn: function (k) { - return k * k * k * k; - }, - /** - * @param {number} k - * @return {number} - */ - quarticOut: function (k) { - return 1 - (--k * k * k * k); - }, - /** - * @param {number} k - * @return {number} - */ - quarticInOut: function (k) { - if ((k *= 2) < 1) { - return 0.5 * k * k * k * k; - } - return -0.5 * ((k -= 2) * k * k * k - 2); - }, - - // 五次方的缓动(t^5) - /** - * @param {number} k - * @return {number} - */ - quinticIn: function (k) { - return k * k * k * k * k; - }, - /** - * @param {number} k - * @return {number} - */ - quinticOut: function (k) { - return --k * k * k * k * k + 1; - }, - /** - * @param {number} k - * @return {number} - */ - quinticInOut: function (k) { - if ((k *= 2) < 1) { - return 0.5 * k * k * k * k * k; - } - return 0.5 * ((k -= 2) * k * k * k * k + 2); - }, - - // 正弦曲线的缓动(sin(t)) - /** - * @param {number} k - * @return {number} - */ - sinusoidalIn: function (k) { - return 1 - Math.cos(k * Math.PI / 2); - }, - /** - * @param {number} k - * @return {number} - */ - sinusoidalOut: function (k) { - return Math.sin(k * Math.PI / 2); - }, - /** - * @param {number} k - * @return {number} - */ - sinusoidalInOut: function (k) { - return 0.5 * (1 - Math.cos(Math.PI * k)); - }, - - // 指数曲线的缓动(2^t) - /** - * @param {number} k - * @return {number} - */ - exponentialIn: function (k) { - return k === 0 ? 0 : Math.pow(1024, k - 1); - }, - /** - * @param {number} k - * @return {number} - */ - exponentialOut: function (k) { - return k === 1 ? 1 : 1 - Math.pow(2, -10 * k); - }, - /** - * @param {number} k - * @return {number} - */ - exponentialInOut: function (k) { - if (k === 0) { - return 0; - } - if (k === 1) { - return 1; - } - if ((k *= 2) < 1) { - return 0.5 * Math.pow(1024, k - 1); - } - return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2); - }, - - // 圆形曲线的缓动(sqrt(1-t^2)) - /** - * @param {number} k - * @return {number} - */ - circularIn: function (k) { - return 1 - Math.sqrt(1 - k * k); - }, - /** - * @param {number} k - * @return {number} - */ - circularOut: function (k) { - return Math.sqrt(1 - (--k * k)); - }, - /** - * @param {number} k - * @return {number} - */ - circularInOut: function (k) { - if ((k *= 2) < 1) { - return -0.5 * (Math.sqrt(1 - k * k) - 1); - } - return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1); - }, - - // 创建类似于弹簧在停止前来回振荡的动画 - /** - * @param {number} k - * @return {number} - */ - elasticIn: function (k) { - var s; - var a = 0.1; - var p = 0.4; - if (k === 0) { - return 0; - } - if (k === 1) { - return 1; - } - if (!a || a < 1) { - a = 1; - s = p / 4; - } - else { - s = p * Math.asin(1 / a) / (2 * Math.PI); - } - return -(a * Math.pow(2, 10 * (k -= 1)) - * Math.sin((k - s) * (2 * Math.PI) / p)); - }, - /** - * @param {number} k - * @return {number} - */ - elasticOut: function (k) { - var s; - var a = 0.1; - var p = 0.4; - if (k === 0) { - return 0; - } - if (k === 1) { - return 1; - } - if (!a || a < 1) { - a = 1; - s = p / 4; - } - else { - s = p * Math.asin(1 / a) / (2 * Math.PI); - } - return (a * Math.pow(2, -10 * k) - * Math.sin((k - s) * (2 * Math.PI) / p) + 1); - }, - /** - * @param {number} k - * @return {number} - */ - elasticInOut: function (k) { - var s; - var a = 0.1; - var p = 0.4; - if (k === 0) { - return 0; - } - if (k === 1) { - return 1; - } - if (!a || a < 1) { - a = 1; - s = p / 4; - } - else { - s = p * Math.asin(1 / a) / (2 * Math.PI); - } - if ((k *= 2) < 1) { - return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) - * Math.sin((k - s) * (2 * Math.PI) / p)); - } - return a * Math.pow(2, -10 * (k -= 1)) - * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1; - - }, - - // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动 - /** - * @param {number} k - * @return {number} - */ - backIn: function (k) { - var s = 1.70158; - return k * k * ((s + 1) * k - s); - }, - /** - * @param {number} k - * @return {number} - */ - backOut: function (k) { - var s = 1.70158; - return --k * k * ((s + 1) * k + s) + 1; - }, - /** - * @param {number} k - * @return {number} - */ - backInOut: function (k) { - var s = 1.70158 * 1.525; - if ((k *= 2) < 1) { - return 0.5 * (k * k * ((s + 1) * k - s)); - } - return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); - }, - - // 创建弹跳效果 - /** - * @param {number} k - * @return {number} - */ - bounceIn: function (k) { - return 1 - easing.bounceOut(1 - k); - }, - /** - * @param {number} k - * @return {number} - */ - bounceOut: function (k) { - if (k < (1 / 2.75)) { - return 7.5625 * k * k; - } - else if (k < (2 / 2.75)) { - return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75; - } - else if (k < (2.5 / 2.75)) { - return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375; - } - else { - return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375; - } - }, - /** - * @param {number} k - * @return {number} - */ - bounceInOut: function (k) { - if (k < 0.5) { - return easing.bounceIn(k * 2) * 0.5; - } - return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5; - } -}; - -/** - * 动画主控制器 - * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件 - * @config life(1000) 动画时长 - * @config delay(0) 动画延迟时间 - * @config loop(true) - * @config gap(0) 循环的间隔时间 - * @config onframe - * @config easing(optional) - * @config ondestroy(optional) - * @config onrestart(optional) - * - * TODO pause - */ - -function Clip(options) { - - this._target = options.target; - - // 生命周期 - this._life = options.life || 1000; - // 延时 - this._delay = options.delay || 0; - // 开始时间 - // this._startTime = new Date().getTime() + this._delay;// 单位毫秒 - this._initialized = false; - - // 是否循环 - this.loop = options.loop == null ? false : options.loop; - - this.gap = options.gap || 0; - - this.easing = options.easing || 'Linear'; - - this.onframe = options.onframe; - this.ondestroy = options.ondestroy; - this.onrestart = options.onrestart; - - this._pausedTime = 0; - this._paused = false; -} - -Clip.prototype = { - - constructor: Clip, - - step: function (globalTime, deltaTime) { - // Set startTime on first step, or _startTime may has milleseconds different between clips - // PENDING - if (!this._initialized) { - this._startTime = globalTime + this._delay; - this._initialized = true; - } - - if (this._paused) { - this._pausedTime += deltaTime; - return; - } - - var percent = (globalTime - this._startTime - this._pausedTime) / this._life; - - // 还没开始 - if (percent < 0) { - return; - } - - percent = Math.min(percent, 1); - - var easing$$1 = this.easing; - var easingFunc = typeof easing$$1 === 'string' ? easing[easing$$1] : easing$$1; - var schedule = typeof easingFunc === 'function' - ? easingFunc(percent) - : percent; - - this.fire('frame', schedule); - - // 结束 - if (percent === 1) { - if (this.loop) { - this.restart(globalTime); - // 重新开始周期 - // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件 - return 'restart'; - } - - // 动画完成将这个控制器标识为待删除 - // 在Animation.update中进行批量删除 - this._needsRemove = true; - return 'destroy'; - } - - return null; - }, - - restart: function (globalTime) { - var remainder = (globalTime - this._startTime - this._pausedTime) % this._life; - this._startTime = globalTime - remainder + this.gap; - this._pausedTime = 0; - - this._needsRemove = false; - }, - - fire: function (eventType, arg) { - eventType = 'on' + eventType; - if (this[eventType]) { - this[eventType](this._target, arg); - } - }, - - pause: function () { - this._paused = true; - }, - - resume: function () { - this._paused = false; - } -}; - -// Simple LRU cache use doubly linked list -// @module zrender/core/LRU - -/** - * Simple double linked list. Compared with array, it has O(1) remove operation. - * @constructor - */ -var LinkedList = function () { - - /** - * @type {module:zrender/core/LRU~Entry} - */ - this.head = null; - - /** - * @type {module:zrender/core/LRU~Entry} - */ - this.tail = null; - - this._len = 0; -}; - -var linkedListProto = LinkedList.prototype; -/** - * Insert a new value at the tail - * @param {} val - * @return {module:zrender/core/LRU~Entry} - */ -linkedListProto.insert = function (val) { - var entry = new Entry(val); - this.insertEntry(entry); - return entry; -}; - -/** - * Insert an entry at the tail - * @param {module:zrender/core/LRU~Entry} entry - */ -linkedListProto.insertEntry = function (entry) { - if (!this.head) { - this.head = this.tail = entry; - } - else { - this.tail.next = entry; - entry.prev = this.tail; - entry.next = null; - this.tail = entry; - } - this._len++; -}; - -/** - * Remove entry. - * @param {module:zrender/core/LRU~Entry} entry - */ -linkedListProto.remove = function (entry) { - var prev = entry.prev; - var next = entry.next; - if (prev) { - prev.next = next; - } - else { - // Is head - this.head = next; - } - if (next) { - next.prev = prev; - } - else { - // Is tail - this.tail = prev; - } - entry.next = entry.prev = null; - this._len--; -}; - -/** - * @return {number} - */ -linkedListProto.len = function () { - return this._len; -}; - -/** - * Clear list - */ -linkedListProto.clear = function () { - this.head = this.tail = null; - this._len = 0; -}; - -/** - * @constructor - * @param {} val - */ -var Entry = function (val) { - /** - * @type {} - */ - this.value = val; - - /** - * @type {module:zrender/core/LRU~Entry} - */ - this.next; - - /** - * @type {module:zrender/core/LRU~Entry} - */ - this.prev; -}; - -/** - * LRU Cache - * @constructor - * @alias module:zrender/core/LRU - */ -var LRU = function (maxSize) { - - this._list = new LinkedList(); - - this._map = {}; - - this._maxSize = maxSize || 10; - - this._lastRemovedEntry = null; -}; - -var LRUProto = LRU.prototype; - -/** - * @param {string} key - * @param {} value - * @return {} Removed value - */ -LRUProto.put = function (key, value) { - var list = this._list; - var map = this._map; - var removed = null; - if (map[key] == null) { - var len = list.len(); - // Reuse last removed entry - var entry = this._lastRemovedEntry; - - if (len >= this._maxSize && len > 0) { - // Remove the least recently used - var leastUsedEntry = list.head; - list.remove(leastUsedEntry); - delete map[leastUsedEntry.key]; - - removed = leastUsedEntry.value; - this._lastRemovedEntry = leastUsedEntry; - } - - if (entry) { - entry.value = value; - } - else { - entry = new Entry(value); - } - entry.key = key; - list.insertEntry(entry); - map[key] = entry; - } - - return removed; -}; - -/** - * @param {string} key - * @return {} - */ -LRUProto.get = function (key) { - var entry = this._map[key]; - var list = this._list; - if (entry != null) { - // Put the latest used entry in the tail - if (entry !== list.tail) { - list.remove(entry); - list.insertEntry(entry); - } - - return entry.value; - } -}; - -/** - * Clear the cache - */ -LRUProto.clear = function () { - this._list.clear(); - this._map = {}; -}; - -var kCSSColorTable = { - 'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1], - 'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1], - 'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1], - 'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1], - 'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1], - 'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1], - 'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1], - 'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1], - 'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1], - 'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1], - 'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1], - 'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1], - 'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1], - 'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1], - 'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1], - 'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1], - 'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1], - 'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1], - 'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1], - 'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1], - 'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1], - 'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1], - 'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1], - 'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1], - 'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1], - 'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1], - 'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1], - 'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1], - 'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1], - 'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1], - 'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1], - 'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1], - 'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1], - 'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1], - 'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1], - 'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1], - 'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1], - 'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1], - 'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1], - 'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1], - 'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1], - 'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1], - 'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1], - 'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1], - 'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1], - 'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1], - 'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1], - 'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1], - 'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1], - 'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1], - 'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1], - 'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1], - 'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1], - 'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1], - 'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1], - 'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1], - 'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1], - 'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1], - 'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1], - 'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1], - 'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1], - 'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1], - 'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1], - 'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1], - 'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1], - 'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1], - 'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1], - 'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1], - 'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1], - 'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1], - 'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1], - 'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1], - 'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1], - 'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1] -}; - -function clampCssByte(i) { // Clamp to integer 0 .. 255. - i = Math.round(i); // Seems to be what Chrome does (vs truncation). - return i < 0 ? 0 : i > 255 ? 255 : i; -} - -function clampCssAngle(i) { // Clamp to integer 0 .. 360. - i = Math.round(i); // Seems to be what Chrome does (vs truncation). - return i < 0 ? 0 : i > 360 ? 360 : i; -} - -function clampCssFloat(f) { // Clamp to float 0.0 .. 1.0. - return f < 0 ? 0 : f > 1 ? 1 : f; -} - -function parseCssInt(str) { // int or percentage. - if (str.length && str.charAt(str.length - 1) === '%') { - return clampCssByte(parseFloat(str) / 100 * 255); - } - return clampCssByte(parseInt(str, 10)); -} - -function parseCssFloat(str) { // float or percentage. - if (str.length && str.charAt(str.length - 1) === '%') { - return clampCssFloat(parseFloat(str) / 100); - } - return clampCssFloat(parseFloat(str)); -} - -function cssHueToRgb(m1, m2, h) { - if (h < 0) { - h += 1; - } - else if (h > 1) { - h -= 1; - } - - if (h * 6 < 1) { - return m1 + (m2 - m1) * h * 6; - } - if (h * 2 < 1) { - return m2; - } - if (h * 3 < 2) { - return m1 + (m2 - m1) * (2 / 3 - h) * 6; - } - return m1; -} - -function lerpNumber(a, b, p) { - return a + (b - a) * p; -} - -function setRgba(out, r, g, b, a) { - out[0] = r; - out[1] = g; - out[2] = b; - out[3] = a; - return out; -} -function copyRgba(out, a) { - out[0] = a[0]; - out[1] = a[1]; - out[2] = a[2]; - out[3] = a[3]; - return out; -} - -var colorCache = new LRU(20); -var lastRemovedArr = null; - -function putToCache(colorStr, rgbaArr) { - // Reuse removed array - if (lastRemovedArr) { - copyRgba(lastRemovedArr, rgbaArr); - } - lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice())); -} - -/** - * @param {string} colorStr - * @param {Array.} out - * @return {Array.} - * @memberOf module:zrender/util/color - */ -function parse(colorStr, rgbaArr) { - if (!colorStr) { - return; - } - rgbaArr = rgbaArr || []; - - var cached = colorCache.get(colorStr); - if (cached) { - return copyRgba(rgbaArr, cached); - } - - // colorStr may be not string - colorStr = colorStr + ''; - // Remove all whitespace, not compliant, but should just be more accepting. - var str = colorStr.replace(/ /g, '').toLowerCase(); - - // Color keywords (and transparent) lookup. - if (str in kCSSColorTable) { - copyRgba(rgbaArr, kCSSColorTable[str]); - putToCache(colorStr, rgbaArr); - return rgbaArr; - } - - // #abc and #abc123 syntax. - if (str.charAt(0) === '#') { - if (str.length === 4) { - var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing. - if (!(iv >= 0 && iv <= 0xfff)) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; // Covers NaN. - } - setRgba(rgbaArr, - ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), - (iv & 0xf0) | ((iv & 0xf0) >> 4), - (iv & 0xf) | ((iv & 0xf) << 4), - 1 - ); - putToCache(colorStr, rgbaArr); - return rgbaArr; - } - else if (str.length === 7) { - var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing. - if (!(iv >= 0 && iv <= 0xffffff)) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; // Covers NaN. - } - setRgba(rgbaArr, - (iv & 0xff0000) >> 16, - (iv & 0xff00) >> 8, - iv & 0xff, - 1 - ); - putToCache(colorStr, rgbaArr); - return rgbaArr; - } - - return; - } - var op = str.indexOf('('); - var ep = str.indexOf(')'); - if (op !== -1 && ep + 1 === str.length) { - var fname = str.substr(0, op); - var params = str.substr(op + 1, ep - (op + 1)).split(','); - var alpha = 1; // To allow case fallthrough. - switch (fname) { - case 'rgba': - if (params.length !== 4) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - alpha = parseCssFloat(params.pop()); // jshint ignore:line - // Fall through. - case 'rgb': - if (params.length !== 3) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - setRgba(rgbaArr, - parseCssInt(params[0]), - parseCssInt(params[1]), - parseCssInt(params[2]), - alpha - ); - putToCache(colorStr, rgbaArr); - return rgbaArr; - case 'hsla': - if (params.length !== 4) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - params[3] = parseCssFloat(params[3]); - hsla2rgba(params, rgbaArr); - putToCache(colorStr, rgbaArr); - return rgbaArr; - case 'hsl': - if (params.length !== 3) { - setRgba(rgbaArr, 0, 0, 0, 1); - return; - } - hsla2rgba(params, rgbaArr); - putToCache(colorStr, rgbaArr); - return rgbaArr; - default: - return; - } - } - - setRgba(rgbaArr, 0, 0, 0, 1); - return; -} - -/** - * @param {Array.} hsla - * @param {Array.} rgba - * @return {Array.} rgba - */ -function hsla2rgba(hsla, rgba) { - var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360; // 0 .. 1 - // NOTE(deanm): According to the CSS spec s/l should only be - // percentages, but we don't bother and let float or percentage. - var s = parseCssFloat(hsla[1]); - var l = parseCssFloat(hsla[2]); - var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; - var m1 = l * 2 - m2; - - rgba = rgba || []; - setRgba(rgba, - clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), - clampCssByte(cssHueToRgb(m1, m2, h) * 255), - clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), - 1 - ); - - if (hsla.length === 4) { - rgba[3] = hsla[3]; - } - - return rgba; -} - -/** - * @param {Array.} rgba - * @return {Array.} hsla - */ -function rgba2hsla(rgba) { - if (!rgba) { - return; - } - - // RGB from 0 to 255 - var R = rgba[0] / 255; - var G = rgba[1] / 255; - var B = rgba[2] / 255; - - var vMin = Math.min(R, G, B); // Min. value of RGB - var vMax = Math.max(R, G, B); // Max. value of RGB - var delta = vMax - vMin; // Delta RGB value - - var L = (vMax + vMin) / 2; - var H; - var S; - // HSL results from 0 to 1 - if (delta === 0) { - H = 0; - S = 0; - } - else { - if (L < 0.5) { - S = delta / (vMax + vMin); - } - else { - S = delta / (2 - vMax - vMin); - } - - var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta; - var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta; - var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta; - - if (R === vMax) { - H = deltaB - deltaG; - } - else if (G === vMax) { - H = (1 / 3) + deltaR - deltaB; - } - else if (B === vMax) { - H = (2 / 3) + deltaG - deltaR; - } - - if (H < 0) { - H += 1; - } - - if (H > 1) { - H -= 1; - } - } - - var hsla = [H * 360, S, L]; - - if (rgba[3] != null) { - hsla.push(rgba[3]); - } - - return hsla; -} - -/** - * @param {string} color - * @param {number} level - * @return {string} - * @memberOf module:zrender/util/color - */ -function lift(color, level) { - var colorArr = parse(color); - if (colorArr) { - for (var i = 0; i < 3; i++) { - if (level < 0) { - colorArr[i] = colorArr[i] * (1 - level) | 0; - } - else { - colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0; - } - if (colorArr[i] > 255) { - colorArr[i] = 255; - } - else if (color[i] < 0) { - colorArr[i] = 0; - } - } - return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb'); - } -} - -/** - * @param {string} color - * @return {string} - * @memberOf module:zrender/util/color - */ -function toHex(color) { - var colorArr = parse(color); - if (colorArr) { - return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1); - } -} - -/** - * Map value to color. Faster than lerp methods because color is represented by rgba array. - * @param {number} normalizedValue A float between 0 and 1. - * @param {Array.>} colors List of rgba color array - * @param {Array.} [out] Mapped gba color array - * @return {Array.} will be null/undefined if input illegal. - */ -function fastLerp(normalizedValue, colors, out) { - if (!(colors && colors.length) - || !(normalizedValue >= 0 && normalizedValue <= 1) - ) { - return; - } - - out = out || []; - - var value = normalizedValue * (colors.length - 1); - var leftIndex = Math.floor(value); - var rightIndex = Math.ceil(value); - var leftColor = colors[leftIndex]; - var rightColor = colors[rightIndex]; - var dv = value - leftIndex; - out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)); - out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)); - out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)); - out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)); - - return out; -} - -/** - * @deprecated - */ -var fastMapToColor = fastLerp; - -/** - * @param {number} normalizedValue A float between 0 and 1. - * @param {Array.} colors Color list. - * @param {boolean=} fullOutput Default false. - * @return {(string|Object)} Result color. If fullOutput, - * return {color: ..., leftIndex: ..., rightIndex: ..., value: ...}, - * @memberOf module:zrender/util/color - */ -function lerp$1(normalizedValue, colors, fullOutput) { - if (!(colors && colors.length) - || !(normalizedValue >= 0 && normalizedValue <= 1) - ) { - return; - } - - var value = normalizedValue * (colors.length - 1); - var leftIndex = Math.floor(value); - var rightIndex = Math.ceil(value); - var leftColor = parse(colors[leftIndex]); - var rightColor = parse(colors[rightIndex]); - var dv = value - leftIndex; - - var color = stringify( - [ - clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)), - clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)), - clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)), - clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)) - ], - 'rgba' - ); - - return fullOutput - ? { - color: color, - leftIndex: leftIndex, - rightIndex: rightIndex, - value: value - } - : color; -} - -/** - * @deprecated - */ -var mapToColor = lerp$1; - -/** - * @param {string} color - * @param {number=} h 0 ~ 360, ignore when null. - * @param {number=} s 0 ~ 1, ignore when null. - * @param {number=} l 0 ~ 1, ignore when null. - * @return {string} Color string in rgba format. - * @memberOf module:zrender/util/color - */ -function modifyHSL(color, h, s, l) { - color = parse(color); - - if (color) { - color = rgba2hsla(color); - h != null && (color[0] = clampCssAngle(h)); - s != null && (color[1] = parseCssFloat(s)); - l != null && (color[2] = parseCssFloat(l)); - - return stringify(hsla2rgba(color), 'rgba'); - } -} - -/** - * @param {string} color - * @param {number=} alpha 0 ~ 1 - * @return {string} Color string in rgba format. - * @memberOf module:zrender/util/color - */ -function modifyAlpha(color, alpha) { - color = parse(color); - - if (color && alpha != null) { - color[3] = clampCssFloat(alpha); - return stringify(color, 'rgba'); - } -} - -/** - * @param {Array.} arrColor like [12,33,44,0.4] - * @param {string} type 'rgba', 'hsva', ... - * @return {string} Result color. (If input illegal, return undefined). - */ -function stringify(arrColor, type) { - if (!arrColor || !arrColor.length) { - return; - } - var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2]; - if (type === 'rgba' || type === 'hsva' || type === 'hsla') { - colorStr += ',' + arrColor[3]; - } - return type + '(' + colorStr + ')'; -} - - -var color = (Object.freeze || Object)({ - parse: parse, - lift: lift, - toHex: toHex, - fastLerp: fastLerp, - fastMapToColor: fastMapToColor, - lerp: lerp$1, - mapToColor: mapToColor, - modifyHSL: modifyHSL, - modifyAlpha: modifyAlpha, - stringify: stringify -}); - -/** - * @module echarts/animation/Animator - */ - -var arraySlice = Array.prototype.slice; - -function defaultGetter(target, key) { - return target[key]; -} - -function defaultSetter(target, key, value) { - target[key] = value; -} - -/** - * @param {number} p0 - * @param {number} p1 - * @param {number} percent - * @return {number} - */ -function interpolateNumber(p0, p1, percent) { - return (p1 - p0) * percent + p0; -} - -/** - * @param {string} p0 - * @param {string} p1 - * @param {number} percent - * @return {string} - */ -function interpolateString(p0, p1, percent) { - return percent > 0.5 ? p1 : p0; -} - -/** - * @param {Array} p0 - * @param {Array} p1 - * @param {number} percent - * @param {Array} out - * @param {number} arrDim - */ -function interpolateArray(p0, p1, percent, out, arrDim) { - var len = p0.length; - if (arrDim === 1) { - for (var i = 0; i < len; i++) { - out[i] = interpolateNumber(p0[i], p1[i], percent); - } - } - else { - var len2 = len && p0[0].length; - for (var i = 0; i < len; i++) { - for (var j = 0; j < len2; j++) { - out[i][j] = interpolateNumber( - p0[i][j], p1[i][j], percent - ); - } - } - } -} - -// arr0 is source array, arr1 is target array. -// Do some preprocess to avoid error happened when interpolating from arr0 to arr1 -function fillArr(arr0, arr1, arrDim) { - var arr0Len = arr0.length; - var arr1Len = arr1.length; - if (arr0Len !== arr1Len) { - // FIXME Not work for TypedArray - var isPreviousLarger = arr0Len > arr1Len; - if (isPreviousLarger) { - // Cut the previous - arr0.length = arr1Len; - } - else { - // Fill the previous - for (var i = arr0Len; i < arr1Len; i++) { - arr0.push( - arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]) - ); - } - } - } - // Handling NaN value - var len2 = arr0[0] && arr0[0].length; - for (var i = 0; i < arr0.length; i++) { - if (arrDim === 1) { - if (isNaN(arr0[i])) { - arr0[i] = arr1[i]; - } - } - else { - for (var j = 0; j < len2; j++) { - if (isNaN(arr0[i][j])) { - arr0[i][j] = arr1[i][j]; - } - } - } - } -} - -/** - * @param {Array} arr0 - * @param {Array} arr1 - * @param {number} arrDim - * @return {boolean} - */ -function isArraySame(arr0, arr1, arrDim) { - if (arr0 === arr1) { - return true; - } - var len = arr0.length; - if (len !== arr1.length) { - return false; - } - if (arrDim === 1) { - for (var i = 0; i < len; i++) { - if (arr0[i] !== arr1[i]) { - return false; - } - } - } - else { - var len2 = arr0[0].length; - for (var i = 0; i < len; i++) { - for (var j = 0; j < len2; j++) { - if (arr0[i][j] !== arr1[i][j]) { - return false; - } - } - } - } - return true; -} - -/** - * Catmull Rom interpolate array - * @param {Array} p0 - * @param {Array} p1 - * @param {Array} p2 - * @param {Array} p3 - * @param {number} t - * @param {number} t2 - * @param {number} t3 - * @param {Array} out - * @param {number} arrDim - */ -function catmullRomInterpolateArray( - p0, p1, p2, p3, t, t2, t3, out, arrDim -) { - var len = p0.length; - if (arrDim === 1) { - for (var i = 0; i < len; i++) { - out[i] = catmullRomInterpolate( - p0[i], p1[i], p2[i], p3[i], t, t2, t3 - ); - } - } - else { - var len2 = p0[0].length; - for (var i = 0; i < len; i++) { - for (var j = 0; j < len2; j++) { - out[i][j] = catmullRomInterpolate( - p0[i][j], p1[i][j], p2[i][j], p3[i][j], - t, t2, t3 - ); - } - } - } -} - -/** - * Catmull Rom interpolate number - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} p3 - * @param {number} t - * @param {number} t2 - * @param {number} t3 - * @return {number} - */ -function catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) { - var v0 = (p2 - p0) * 0.5; - var v1 = (p3 - p1) * 0.5; - return (2 * (p1 - p2) + v0 + v1) * t3 - + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 - + v0 * t + p1; -} - -function cloneValue(value) { - if (isArrayLike(value)) { - var len = value.length; - if (isArrayLike(value[0])) { - var ret = []; - for (var i = 0; i < len; i++) { - ret.push(arraySlice.call(value[i])); - } - return ret; - } - - return arraySlice.call(value); - } - - return value; -} - -function rgba2String(rgba) { - rgba[0] = Math.floor(rgba[0]); - rgba[1] = Math.floor(rgba[1]); - rgba[2] = Math.floor(rgba[2]); - - return 'rgba(' + rgba.join(',') + ')'; -} - -function getArrayDim(keyframes) { - var lastValue = keyframes[keyframes.length - 1].value; - return isArrayLike(lastValue && lastValue[0]) ? 2 : 1; -} - -function createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) { - var getter = animator._getter; - var setter = animator._setter; - var useSpline = easing === 'spline'; - - var trackLen = keyframes.length; - if (!trackLen) { - return; - } - // Guess data type - var firstVal = keyframes[0].value; - var isValueArray = isArrayLike(firstVal); - var isValueColor = false; - var isValueString = false; - - // For vertices morphing - var arrDim = isValueArray ? getArrayDim(keyframes) : 0; - - var trackMaxTime; - // Sort keyframe as ascending - keyframes.sort(function (a, b) { - return a.time - b.time; - }); - - trackMaxTime = keyframes[trackLen - 1].time; - // Percents of each keyframe - var kfPercents = []; - // Value of each keyframe - var kfValues = []; - var prevValue = keyframes[0].value; - var isAllValueEqual = true; - for (var i = 0; i < trackLen; i++) { - kfPercents.push(keyframes[i].time / trackMaxTime); - // Assume value is a color when it is a string - var value = keyframes[i].value; - - // Check if value is equal, deep check if value is array - if (!((isValueArray && isArraySame(value, prevValue, arrDim)) - || (!isValueArray && value === prevValue))) { - isAllValueEqual = false; - } - prevValue = value; - - // Try converting a string to a color array - if (typeof value === 'string') { - var colorArray = parse(value); - if (colorArray) { - value = colorArray; - isValueColor = true; - } - else { - isValueString = true; - } - } - kfValues.push(value); - } - if (!forceAnimate && isAllValueEqual) { - return; - } - - var lastValue = kfValues[trackLen - 1]; - // Polyfill array and NaN value - for (var i = 0; i < trackLen - 1; i++) { - if (isValueArray) { - fillArr(kfValues[i], lastValue, arrDim); - } - else { - if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) { - kfValues[i] = lastValue; - } - } - } - isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim); - - // Cache the key of last frame to speed up when - // animation playback is sequency - var lastFrame = 0; - var lastFramePercent = 0; - var start; - var w; - var p0; - var p1; - var p2; - var p3; - - if (isValueColor) { - var rgba = [0, 0, 0, 0]; - } - - var onframe = function (target, percent) { - // Find the range keyframes - // kf1-----kf2---------current--------kf3 - // find kf2 and kf3 and do interpolation - var frame; - // In the easing function like elasticOut, percent may less than 0 - if (percent < 0) { - frame = 0; - } - else if (percent < lastFramePercent) { - // Start from next key - // PENDING start from lastFrame ? - start = Math.min(lastFrame + 1, trackLen - 1); - for (frame = start; frame >= 0; frame--) { - if (kfPercents[frame] <= percent) { - break; - } - } - // PENDING really need to do this ? - frame = Math.min(frame, trackLen - 2); - } - else { - for (frame = lastFrame; frame < trackLen; frame++) { - if (kfPercents[frame] > percent) { - break; - } - } - frame = Math.min(frame - 1, trackLen - 2); - } - lastFrame = frame; - lastFramePercent = percent; - - var range = (kfPercents[frame + 1] - kfPercents[frame]); - if (range === 0) { - return; - } - else { - w = (percent - kfPercents[frame]) / range; - } - if (useSpline) { - p1 = kfValues[frame]; - p0 = kfValues[frame === 0 ? frame : frame - 1]; - p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1]; - p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2]; - if (isValueArray) { - catmullRomInterpolateArray( - p0, p1, p2, p3, w, w * w, w * w * w, - getter(target, propName), - arrDim - ); - } - else { - var value; - if (isValueColor) { - value = catmullRomInterpolateArray( - p0, p1, p2, p3, w, w * w, w * w * w, - rgba, 1 - ); - value = rgba2String(rgba); - } - else if (isValueString) { - // String is step(0.5) - return interpolateString(p1, p2, w); - } - else { - value = catmullRomInterpolate( - p0, p1, p2, p3, w, w * w, w * w * w - ); - } - setter( - target, - propName, - value - ); - } - } - else { - if (isValueArray) { - interpolateArray( - kfValues[frame], kfValues[frame + 1], w, - getter(target, propName), - arrDim - ); - } - else { - var value; - if (isValueColor) { - interpolateArray( - kfValues[frame], kfValues[frame + 1], w, - rgba, 1 - ); - value = rgba2String(rgba); - } - else if (isValueString) { - // String is step(0.5) - return interpolateString(kfValues[frame], kfValues[frame + 1], w); - } - else { - value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w); - } - setter( - target, - propName, - value - ); - } - } - }; - - var clip = new Clip({ - target: animator._target, - life: trackMaxTime, - loop: animator._loop, - delay: animator._delay, - onframe: onframe, - ondestroy: oneTrackDone - }); - - if (easing && easing !== 'spline') { - clip.easing = easing; - } - - return clip; -} - -/** - * @alias module:zrender/animation/Animator - * @constructor - * @param {Object} target - * @param {boolean} loop - * @param {Function} getter - * @param {Function} setter - */ -var Animator = function (target, loop, getter, setter) { - this._tracks = {}; - this._target = target; - - this._loop = loop || false; - - this._getter = getter || defaultGetter; - this._setter = setter || defaultSetter; - - this._clipCount = 0; - - this._delay = 0; - - this._doneList = []; - - this._onframeList = []; - - this._clipList = []; -}; - -Animator.prototype = { - /** - * 设置动画关键帧 - * @param {number} time 关键帧时间,单位是ms - * @param {Object} props 关键帧的属性值,key-value表示 - * @return {module:zrender/animation/Animator} - */ - when: function (time /* ms */, props) { - var tracks = this._tracks; - for (var propName in props) { - if (!props.hasOwnProperty(propName)) { - continue; - } - - if (!tracks[propName]) { - tracks[propName] = []; - // Invalid value - var value = this._getter(this._target, propName); - if (value == null) { - // zrLog('Invalid property ' + propName); - continue; - } - // If time is 0 - // Then props is given initialize value - // Else - // Initialize value from current prop value - if (time !== 0) { - tracks[propName].push({ - time: 0, - value: cloneValue(value) - }); - } - } - tracks[propName].push({ - time: time, - value: props[propName] - }); - } - return this; - }, - /** - * 添加动画每一帧的回调函数 - * @param {Function} callback - * @return {module:zrender/animation/Animator} - */ - during: function (callback) { - this._onframeList.push(callback); - return this; - }, - - pause: function () { - for (var i = 0; i < this._clipList.length; i++) { - this._clipList[i].pause(); - } - this._paused = true; - }, - - resume: function () { - for (var i = 0; i < this._clipList.length; i++) { - this._clipList[i].resume(); - } - this._paused = false; - }, - - isPaused: function () { - return !!this._paused; - }, - - _doneCallback: function () { - // Clear all tracks - this._tracks = {}; - // Clear all clips - this._clipList.length = 0; - - var doneList = this._doneList; - var len = doneList.length; - for (var i = 0; i < len; i++) { - doneList[i].call(this); - } - }, - /** - * 开始执行动画 - * @param {string|Function} [easing] - * 动画缓动函数,详见{@link module:zrender/animation/easing} - * @param {boolean} forceAnimate - * @return {module:zrender/animation/Animator} - */ - start: function (easing, forceAnimate) { - - var self = this; - var clipCount = 0; - - var oneTrackDone = function () { - clipCount--; - if (!clipCount) { - self._doneCallback(); - } - }; - - var lastClip; - for (var propName in this._tracks) { - if (!this._tracks.hasOwnProperty(propName)) { - continue; - } - var clip = createTrackClip( - this, easing, oneTrackDone, - this._tracks[propName], propName, forceAnimate - ); - if (clip) { - this._clipList.push(clip); - clipCount++; - - // If start after added to animation - if (this.animation) { - this.animation.addClip(clip); - } - - lastClip = clip; - } - } - - // Add during callback on the last clip - if (lastClip) { - var oldOnFrame = lastClip.onframe; - lastClip.onframe = function (target, percent) { - oldOnFrame(target, percent); - - for (var i = 0; i < self._onframeList.length; i++) { - self._onframeList[i](target, percent); - } - }; - } - - // This optimization will help the case that in the upper application - // the view may be refreshed frequently, where animation will be - // called repeatly but nothing changed. - if (!clipCount) { - this._doneCallback(); - } - return this; - }, - /** - * 停止动画 - * @param {boolean} forwardToLast If move to last frame before stop - */ - stop: function (forwardToLast) { - var clipList = this._clipList; - var animation = this.animation; - for (var i = 0; i < clipList.length; i++) { - var clip = clipList[i]; - if (forwardToLast) { - // Move to last frame before stop - clip.onframe(this._target, 1); - } - animation && animation.removeClip(clip); - } - clipList.length = 0; - }, - /** - * 设置动画延迟开始的时间 - * @param {number} time 单位ms - * @return {module:zrender/animation/Animator} - */ - delay: function (time) { - this._delay = time; - return this; - }, - /** - * 添加动画结束的回调 - * @param {Function} cb - * @return {module:zrender/animation/Animator} - */ - done: function (cb) { - if (cb) { - this._doneList.push(cb); - } - return this; - }, - - /** - * @return {Array.} - */ - getClips: function () { - return this._clipList; - } -}; - -var dpr = 1; - -// If in browser environment -if (typeof window !== 'undefined') { - dpr = Math.max(window.devicePixelRatio || 1, 1); -} - -/** - * config默认配置项 - * @exports zrender/config - * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) - */ - -/** - * Debug log mode: - * 0: Do nothing, for release. - * 1: console.error, for debug. - */ -var debugMode = 0; - -// retina 屏幕优化 -var devicePixelRatio = dpr; - -var logError = function () { -}; - -if (debugMode === 1) { - logError = console.error; -} - -var logError$1 = logError; - -/** - * @alias modue:zrender/mixin/Animatable - * @constructor - */ -var Animatable = function () { - - /** - * @type {Array.} - * @readOnly - */ - this.animators = []; -}; - -Animatable.prototype = { - - constructor: Animatable, - - /** - * 动画 - * - * @param {string} path The path to fetch value from object, like 'a.b.c'. - * @param {boolean} [loop] Whether to loop animation. - * @return {module:zrender/animation/Animator} - * @example: - * el.animate('style', false) - * .when(1000, {x: 10} ) - * .done(function(){ // Animation done }) - * .start() - */ - animate: function (path, loop) { - var target; - var animatingShape = false; - var el = this; - var zr = this.__zr; - if (path) { - var pathSplitted = path.split('.'); - var prop = el; - // If animating shape - animatingShape = pathSplitted[0] === 'shape'; - for (var i = 0, l = pathSplitted.length; i < l; i++) { - if (!prop) { - continue; - } - prop = prop[pathSplitted[i]]; - } - if (prop) { - target = prop; - } - } - else { - target = el; - } - - if (!target) { - logError$1( - 'Property "' - + path - + '" is not existed in element ' - + el.id - ); - return; - } - - var animators = el.animators; - - var animator = new Animator(target, loop); - - animator.during(function (target) { - el.dirty(animatingShape); - }) - .done(function () { - // FIXME Animator will not be removed if use `Animator#stop` to stop animation - animators.splice(indexOf(animators, animator), 1); - }); - - animators.push(animator); - - // If animate after added to the zrender - if (zr) { - zr.animation.addAnimator(animator); - } - - return animator; - }, - - /** - * 停止动画 - * @param {boolean} forwardToLast If move to last frame before stop - */ - stopAnimation: function (forwardToLast) { - var animators = this.animators; - var len = animators.length; - for (var i = 0; i < len; i++) { - animators[i].stop(forwardToLast); - } - animators.length = 0; - - return this; - }, - - /** - * Caution: this method will stop previous animation. - * So do not use this method to one element twice before - * animation starts, unless you know what you are doing. - * @param {Object} target - * @param {number} [time=500] Time in ms - * @param {string} [easing='linear'] - * @param {number} [delay=0] - * @param {Function} [callback] - * @param {Function} [forceAnimate] Prevent stop animation and callback - * immediently when target values are the same as current values. - * - * @example - * // Animate position - * el.animateTo({ - * position: [10, 10] - * }, function () { // done }) - * - * // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing - * el.animateTo({ - * shape: { - * width: 500 - * }, - * style: { - * fill: 'red' - * } - * position: [10, 10] - * }, 100, 100, 'cubicOut', function () { // done }) - */ - // TODO Return animation key - animateTo: function (target, time, delay, easing, callback, forceAnimate) { - animateTo(this, target, time, delay, easing, callback, forceAnimate); - }, - - /** - * Animate from the target state to current state. - * The params and the return value are the same as `this.animateTo`. - */ - animateFrom: function (target, time, delay, easing, callback, forceAnimate) { - animateTo(this, target, time, delay, easing, callback, forceAnimate, true); - } -}; - -function animateTo(animatable, target, time, delay, easing, callback, forceAnimate, reverse) { - // animateTo(target, time, easing, callback); - if (isString(delay)) { - callback = easing; - easing = delay; - delay = 0; - } - // animateTo(target, time, delay, callback); - else if (isFunction(easing)) { - callback = easing; - easing = 'linear'; - delay = 0; - } - // animateTo(target, time, callback); - else if (isFunction(delay)) { - callback = delay; - delay = 0; - } - // animateTo(target, callback) - else if (isFunction(time)) { - callback = time; - time = 500; - } - // animateTo(target) - else if (!time) { - time = 500; - } - // Stop all previous animations - animatable.stopAnimation(); - animateToShallow(animatable, '', animatable, target, time, delay, reverse); - - // Animators may be removed immediately after start - // if there is nothing to animate - var animators = animatable.animators.slice(); - var count = animators.length; - function done() { - count--; - if (!count) { - callback && callback(); - } - } - - // No animators. This should be checked before animators[i].start(), - // because 'done' may be executed immediately if no need to animate. - if (!count) { - callback && callback(); - } - // Start after all animators created - // Incase any animator is done immediately when all animation properties are not changed - for (var i = 0; i < animators.length; i++) { - animators[i] - .done(done) - .start(easing, forceAnimate); - } -} - -/** - * @param {string} path='' - * @param {Object} source=animatable - * @param {Object} target - * @param {number} [time=500] - * @param {number} [delay=0] - * @param {boolean} [reverse] If `true`, animate - * from the `target` to current state. - * - * @example - * // Animate position - * el._animateToShallow({ - * position: [10, 10] - * }) - * - * // Animate shape, style and position in 100ms, delayed 100ms - * el._animateToShallow({ - * shape: { - * width: 500 - * }, - * style: { - * fill: 'red' - * } - * position: [10, 10] - * }, 100, 100) - */ -function animateToShallow(animatable, path, source, target, time, delay, reverse) { - var objShallow = {}; - var propertyCount = 0; - for (var name in target) { - if (!target.hasOwnProperty(name)) { - continue; - } - - if (source[name] != null) { - if (isObject(target[name]) && !isArrayLike(target[name])) { - animateToShallow( - animatable, - path ? path + '.' + name : name, - source[name], - target[name], - time, - delay, - reverse - ); - } - else { - if (reverse) { - objShallow[name] = source[name]; - setAttrByPath(animatable, path, name, target[name]); - } - else { - objShallow[name] = target[name]; - } - propertyCount++; - } - } - else if (target[name] != null && !reverse) { - setAttrByPath(animatable, path, name, target[name]); - } - } - - if (propertyCount > 0) { - animatable.animate(path, false) - .when(time == null ? 500 : time, objShallow) - .delay(delay || 0); - } -} - -function setAttrByPath(el, path, name, value) { - // Attr directly if not has property - // FIXME, if some property not needed for element ? - if (!path) { - el.attr(name, value); - } - else { - // Only support set shape or style - var props = {}; - props[path] = {}; - props[path][name] = value; - el.attr(props); - } -} - -/** - * @alias module:zrender/Element - * @constructor - * @extends {module:zrender/mixin/Animatable} - * @extends {module:zrender/mixin/Transformable} - * @extends {module:zrender/mixin/Eventful} - */ -var Element = function (opts) { // jshint ignore:line - - Transformable.call(this, opts); - Eventful.call(this, opts); - Animatable.call(this, opts); - - /** - * 画布元素ID - * @type {string} - */ - this.id = opts.id || guid(); -}; - -Element.prototype = { - - /** - * 元素类型 - * Element type - * @type {string} - */ - type: 'element', - - /** - * 元素名字 - * Element name - * @type {string} - */ - name: '', - - /** - * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值 - * ZRender instance will be assigned when element is associated with zrender - * @name module:/zrender/Element#__zr - * @type {module:zrender/ZRender} - */ - __zr: null, - - /** - * 图形是否忽略,为true时忽略图形的绘制以及事件触发 - * If ignore drawing and events of the element object - * @name module:/zrender/Element#ignore - * @type {boolean} - * @default false - */ - ignore: false, - - /** - * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪 - * 该路径会继承被裁减对象的变换 - * @type {module:zrender/graphic/Path} - * @see http://www.w3.org/TR/2dcontext/#clipping-region - * @readOnly - */ - clipPath: null, - - /** - * 是否是 Group - * @type {boolean} - */ - isGroup: false, - - /** - * Drift element - * @param {number} dx dx on the global space - * @param {number} dy dy on the global space - */ - drift: function (dx, dy) { - switch (this.draggable) { - case 'horizontal': - dy = 0; - break; - case 'vertical': - dx = 0; - break; - } - - var m = this.transform; - if (!m) { - m = this.transform = [1, 0, 0, 1, 0, 0]; - } - m[4] += dx; - m[5] += dy; - - this.decomposeTransform(); - this.dirty(false); - }, - - /** - * Hook before update - */ - beforeUpdate: function () {}, - /** - * Hook after update - */ - afterUpdate: function () {}, - /** - * Update each frame - */ - update: function () { - this.updateTransform(); - }, - - /** - * @param {Function} cb - * @param {} context - */ - traverse: function (cb, context) {}, - - /** - * @protected - */ - attrKV: function (key, value) { - if (key === 'position' || key === 'scale' || key === 'origin') { - // Copy the array - if (value) { - var target = this[key]; - if (!target) { - target = this[key] = []; - } - target[0] = value[0]; - target[1] = value[1]; - } - } - else { - this[key] = value; - } - }, - - /** - * Hide the element - */ - hide: function () { - this.ignore = true; - this.__zr && this.__zr.refresh(); - }, - - /** - * Show the element - */ - show: function () { - this.ignore = false; - this.__zr && this.__zr.refresh(); - }, - - /** - * @param {string|Object} key - * @param {*} value - */ - attr: function (key, value) { - if (typeof key === 'string') { - this.attrKV(key, value); - } - else if (isObject(key)) { - for (var name in key) { - if (key.hasOwnProperty(name)) { - this.attrKV(name, key[name]); - } - } - } - - this.dirty(false); - - return this; - }, - - /** - * @param {module:zrender/graphic/Path} clipPath - */ - setClipPath: function (clipPath) { - var zr = this.__zr; - if (zr) { - clipPath.addSelfToZr(zr); - } - - // Remove previous clip path - if (this.clipPath && this.clipPath !== clipPath) { - this.removeClipPath(); - } - - this.clipPath = clipPath; - clipPath.__zr = zr; - clipPath.__clipTarget = this; - - this.dirty(false); - }, - - /** - */ - removeClipPath: function () { - var clipPath = this.clipPath; - if (clipPath) { - if (clipPath.__zr) { - clipPath.removeSelfFromZr(clipPath.__zr); - } - - clipPath.__zr = null; - clipPath.__clipTarget = null; - this.clipPath = null; - - this.dirty(false); - } - }, - - /** - * Add self from zrender instance. - * Not recursively because it will be invoked when element added to storage. - * @param {module:zrender/ZRender} zr - */ - addSelfToZr: function (zr) { - this.__zr = zr; - // 添加动画 - var animators = this.animators; - if (animators) { - for (var i = 0; i < animators.length; i++) { - zr.animation.addAnimator(animators[i]); - } - } - - if (this.clipPath) { - this.clipPath.addSelfToZr(zr); - } - }, - - /** - * Remove self from zrender instance. - * Not recursively because it will be invoked when element added to storage. - * @param {module:zrender/ZRender} zr - */ - removeSelfFromZr: function (zr) { - this.__zr = null; - // 移除动画 - var animators = this.animators; - if (animators) { - for (var i = 0; i < animators.length; i++) { - zr.animation.removeAnimator(animators[i]); - } - } - - if (this.clipPath) { - this.clipPath.removeSelfFromZr(zr); - } - } -}; - -mixin(Element, Animatable); -mixin(Element, Transformable); -mixin(Element, Eventful); - -/** - * @module echarts/core/BoundingRect - */ - -var v2ApplyTransform = applyTransform; -var mathMin = Math.min; -var mathMax = Math.max; - -/** - * @alias module:echarts/core/BoundingRect - */ -function BoundingRect(x, y, width, height) { - - if (width < 0) { - x = x + width; - width = -width; - } - if (height < 0) { - y = y + height; - height = -height; - } - - /** - * @type {number} - */ - this.x = x; - /** - * @type {number} - */ - this.y = y; - /** - * @type {number} - */ - this.width = width; - /** - * @type {number} - */ - this.height = height; -} - -BoundingRect.prototype = { - - constructor: BoundingRect, - - /** - * @param {module:echarts/core/BoundingRect} other - */ - union: function (other) { - var x = mathMin(other.x, this.x); - var y = mathMin(other.y, this.y); - - this.width = mathMax( - other.x + other.width, - this.x + this.width - ) - x; - this.height = mathMax( - other.y + other.height, - this.y + this.height - ) - y; - this.x = x; - this.y = y; - }, - - /** - * @param {Array.} m - * @methods - */ - applyTransform: (function () { - var lt = []; - var rb = []; - var lb = []; - var rt = []; - return function (m) { - // In case usage like this - // el.getBoundingRect().applyTransform(el.transform) - // And element has no transform - if (!m) { - return; - } - lt[0] = lb[0] = this.x; - lt[1] = rt[1] = this.y; - rb[0] = rt[0] = this.x + this.width; - rb[1] = lb[1] = this.y + this.height; - - v2ApplyTransform(lt, lt, m); - v2ApplyTransform(rb, rb, m); - v2ApplyTransform(lb, lb, m); - v2ApplyTransform(rt, rt, m); - - this.x = mathMin(lt[0], rb[0], lb[0], rt[0]); - this.y = mathMin(lt[1], rb[1], lb[1], rt[1]); - var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]); - var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]); - this.width = maxX - this.x; - this.height = maxY - this.y; - }; - })(), - - /** - * Calculate matrix of transforming from self to target rect - * @param {module:zrender/core/BoundingRect} b - * @return {Array.} - */ - calculateTransform: function (b) { - var a = this; - var sx = b.width / a.width; - var sy = b.height / a.height; - - var m = create$1(); - - // 矩阵右乘 - translate(m, m, [-a.x, -a.y]); - scale$1(m, m, [sx, sy]); - translate(m, m, [b.x, b.y]); - - return m; - }, - - /** - * @param {(module:echarts/core/BoundingRect|Object)} b - * @return {boolean} - */ - intersect: function (b) { - if (!b) { - return false; - } - - if (!(b instanceof BoundingRect)) { - // Normalize negative width/height. - b = BoundingRect.create(b); - } - - var a = this; - var ax0 = a.x; - var ax1 = a.x + a.width; - var ay0 = a.y; - var ay1 = a.y + a.height; - - var bx0 = b.x; - var bx1 = b.x + b.width; - var by0 = b.y; - var by1 = b.y + b.height; - - return !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0); - }, - - contain: function (x, y) { - var rect = this; - return x >= rect.x - && x <= (rect.x + rect.width) - && y >= rect.y - && y <= (rect.y + rect.height); - }, - - /** - * @return {module:echarts/core/BoundingRect} - */ - clone: function () { - return new BoundingRect(this.x, this.y, this.width, this.height); - }, - - /** - * Copy from another rect - */ - copy: function (other) { - this.x = other.x; - this.y = other.y; - this.width = other.width; - this.height = other.height; - }, - - plain: function () { - return { - x: this.x, - y: this.y, - width: this.width, - height: this.height - }; - } -}; - -/** - * @param {Object|module:zrender/core/BoundingRect} rect - * @param {number} rect.x - * @param {number} rect.y - * @param {number} rect.width - * @param {number} rect.height - * @return {module:zrender/core/BoundingRect} - */ -BoundingRect.create = function (rect) { - return new BoundingRect(rect.x, rect.y, rect.width, rect.height); -}; - -/** - * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上 - * @module zrender/graphic/Group - * @example - * var Group = require('zrender/container/Group'); - * var Circle = require('zrender/graphic/shape/Circle'); - * var g = new Group(); - * g.position[0] = 100; - * g.position[1] = 100; - * g.add(new Circle({ - * style: { - * x: 100, - * y: 100, - * r: 20, - * } - * })); - * zr.add(g); - */ - -/** - * @alias module:zrender/graphic/Group - * @constructor - * @extends module:zrender/mixin/Transformable - * @extends module:zrender/mixin/Eventful - */ -var Group = function (opts) { - - opts = opts || {}; - - Element.call(this, opts); - - for (var key in opts) { - if (opts.hasOwnProperty(key)) { - this[key] = opts[key]; - } - } - - this._children = []; - - this.__storage = null; - - this.__dirty = true; -}; - -Group.prototype = { - - constructor: Group, - - isGroup: true, - - /** - * @type {string} - */ - type: 'group', - - /** - * 所有子孙元素是否响应鼠标事件 - * @name module:/zrender/container/Group#silent - * @type {boolean} - * @default false - */ - silent: false, - - /** - * @return {Array.} - */ - children: function () { - return this._children.slice(); - }, - - /** - * 获取指定 index 的儿子节点 - * @param {number} idx - * @return {module:zrender/Element} - */ - childAt: function (idx) { - return this._children[idx]; - }, - - /** - * 获取指定名字的儿子节点 - * @param {string} name - * @return {module:zrender/Element} - */ - childOfName: function (name) { - var children = this._children; - for (var i = 0; i < children.length; i++) { - if (children[i].name === name) { - return children[i]; - } - } - }, - - /** - * @return {number} - */ - childCount: function () { - return this._children.length; - }, - - /** - * 添加子节点到最后 - * @param {module:zrender/Element} child - */ - add: function (child) { - if (child && child !== this && child.parent !== this) { - - this._children.push(child); - - this._doAdd(child); - } - - return this; - }, - - /** - * 添加子节点在 nextSibling 之前 - * @param {module:zrender/Element} child - * @param {module:zrender/Element} nextSibling - */ - addBefore: function (child, nextSibling) { - if (child && child !== this && child.parent !== this - && nextSibling && nextSibling.parent === this) { - - var children = this._children; - var idx = children.indexOf(nextSibling); - - if (idx >= 0) { - children.splice(idx, 0, child); - this._doAdd(child); - } - } - - return this; - }, - - _doAdd: function (child) { - if (child.parent) { - child.parent.remove(child); - } - - child.parent = this; - - var storage = this.__storage; - var zr = this.__zr; - if (storage && storage !== child.__storage) { - - storage.addToStorage(child); - - if (child instanceof Group) { - child.addChildrenToStorage(storage); - } - } - - zr && zr.refresh(); - }, - - /** - * 移除子节点 - * @param {module:zrender/Element} child - */ - remove: function (child) { - var zr = this.__zr; - var storage = this.__storage; - var children = this._children; - - var idx = indexOf(children, child); - if (idx < 0) { - return this; - } - children.splice(idx, 1); - - child.parent = null; - - if (storage) { - - storage.delFromStorage(child); - - if (child instanceof Group) { - child.delChildrenFromStorage(storage); - } - } - - zr && zr.refresh(); - - return this; - }, - - /** - * 移除所有子节点 - */ - removeAll: function () { - var children = this._children; - var storage = this.__storage; - var child; - var i; - for (i = 0; i < children.length; i++) { - child = children[i]; - if (storage) { - storage.delFromStorage(child); - if (child instanceof Group) { - child.delChildrenFromStorage(storage); - } - } - child.parent = null; - } - children.length = 0; - - return this; - }, - - /** - * 遍历所有子节点 - * @param {Function} cb - * @param {} context - */ - eachChild: function (cb, context) { - var children = this._children; - for (var i = 0; i < children.length; i++) { - var child = children[i]; - cb.call(context, child, i); - } - return this; - }, - - /** - * 深度优先遍历所有子孙节点 - * @param {Function} cb - * @param {} context - */ - traverse: function (cb, context) { - for (var i = 0; i < this._children.length; i++) { - var child = this._children[i]; - cb.call(context, child); - - if (child.type === 'group') { - child.traverse(cb, context); - } - } - return this; - }, - - addChildrenToStorage: function (storage) { - for (var i = 0; i < this._children.length; i++) { - var child = this._children[i]; - storage.addToStorage(child); - if (child instanceof Group) { - child.addChildrenToStorage(storage); - } - } - }, - - delChildrenFromStorage: function (storage) { - for (var i = 0; i < this._children.length; i++) { - var child = this._children[i]; - storage.delFromStorage(child); - if (child instanceof Group) { - child.delChildrenFromStorage(storage); - } - } - }, - - dirty: function () { - this.__dirty = true; - this.__zr && this.__zr.refresh(); - return this; - }, - - /** - * @return {module:zrender/core/BoundingRect} - */ - getBoundingRect: function (includeChildren) { - // TODO Caching - var rect = null; - var tmpRect = new BoundingRect(0, 0, 0, 0); - var children = includeChildren || this._children; - var tmpMat = []; - - for (var i = 0; i < children.length; i++) { - var child = children[i]; - if (child.ignore || child.invisible) { - continue; - } - - var childRect = child.getBoundingRect(); - var transform = child.getLocalTransform(tmpMat); - // TODO - // The boundingRect cacluated by transforming original - // rect may be bigger than the actual bundingRect when rotation - // is used. (Consider a circle rotated aginst its center, where - // the actual boundingRect should be the same as that not be - // rotated.) But we can not find better approach to calculate - // actual boundingRect yet, considering performance. - if (transform) { - tmpRect.copy(childRect); - tmpRect.applyTransform(transform); - rect = rect || tmpRect.clone(); - rect.union(tmpRect); - } - else { - rect = rect || childRect.clone(); - rect.union(childRect); - } - } - return rect || tmpRect; - } -}; - -inherits(Group, Element); - -// https://github.com/mziccard/node-timsort -var DEFAULT_MIN_MERGE = 32; - -var DEFAULT_MIN_GALLOPING = 7; - -function minRunLength(n) { - var r = 0; - - while (n >= DEFAULT_MIN_MERGE) { - r |= n & 1; - n >>= 1; - } - - return n + r; -} - -function makeAscendingRun(array, lo, hi, compare) { - var runHi = lo + 1; - - if (runHi === hi) { - return 1; - } - - if (compare(array[runHi++], array[lo]) < 0) { - while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) { - runHi++; - } - - reverseRun(array, lo, runHi); - } - else { - while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) { - runHi++; - } - } - - return runHi - lo; -} - -function reverseRun(array, lo, hi) { - hi--; - - while (lo < hi) { - var t = array[lo]; - array[lo++] = array[hi]; - array[hi--] = t; - } -} - -function binaryInsertionSort(array, lo, hi, start, compare) { - if (start === lo) { - start++; - } - - for (; start < hi; start++) { - var pivot = array[start]; - - var left = lo; - var right = start; - var mid; - - while (left < right) { - mid = left + right >>> 1; - - if (compare(pivot, array[mid]) < 0) { - right = mid; - } - else { - left = mid + 1; - } - } - - var n = start - left; - - switch (n) { - case 3: - array[left + 3] = array[left + 2]; - - case 2: - array[left + 2] = array[left + 1]; - - case 1: - array[left + 1] = array[left]; - break; - default: - while (n > 0) { - array[left + n] = array[left + n - 1]; - n--; - } - } - - array[left] = pivot; - } -} - -function gallopLeft(value, array, start, length, hint, compare) { - var lastOffset = 0; - var maxOffset = 0; - var offset = 1; - - if (compare(value, array[start + hint]) > 0) { - maxOffset = length - hint; - - while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) { - lastOffset = offset; - offset = (offset << 1) + 1; - - if (offset <= 0) { - offset = maxOffset; - } - } - - if (offset > maxOffset) { - offset = maxOffset; - } - - lastOffset += hint; - offset += hint; - } - else { - maxOffset = hint + 1; - while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) { - lastOffset = offset; - offset = (offset << 1) + 1; - - if (offset <= 0) { - offset = maxOffset; - } - } - if (offset > maxOffset) { - offset = maxOffset; - } - - var tmp = lastOffset; - lastOffset = hint - offset; - offset = hint - tmp; - } - - lastOffset++; - while (lastOffset < offset) { - var m = lastOffset + (offset - lastOffset >>> 1); - - if (compare(value, array[start + m]) > 0) { - lastOffset = m + 1; - } - else { - offset = m; - } - } - return offset; -} - -function gallopRight(value, array, start, length, hint, compare) { - var lastOffset = 0; - var maxOffset = 0; - var offset = 1; - - if (compare(value, array[start + hint]) < 0) { - maxOffset = hint + 1; - - while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) { - lastOffset = offset; - offset = (offset << 1) + 1; - - if (offset <= 0) { - offset = maxOffset; - } - } - - if (offset > maxOffset) { - offset = maxOffset; - } - - var tmp = lastOffset; - lastOffset = hint - offset; - offset = hint - tmp; - } - else { - maxOffset = length - hint; - - while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) { - lastOffset = offset; - offset = (offset << 1) + 1; - - if (offset <= 0) { - offset = maxOffset; - } - } - - if (offset > maxOffset) { - offset = maxOffset; - } - - lastOffset += hint; - offset += hint; - } - - lastOffset++; - - while (lastOffset < offset) { - var m = lastOffset + (offset - lastOffset >>> 1); - - if (compare(value, array[start + m]) < 0) { - offset = m; - } - else { - lastOffset = m + 1; - } - } - - return offset; -} - -function TimSort(array, compare) { - var minGallop = DEFAULT_MIN_GALLOPING; - var runStart; - var runLength; - var stackSize = 0; - - var tmp = []; - - runStart = []; - runLength = []; - - function pushRun(_runStart, _runLength) { - runStart[stackSize] = _runStart; - runLength[stackSize] = _runLength; - stackSize += 1; - } - - function mergeRuns() { - while (stackSize > 1) { - var n = stackSize - 2; - - if ( - (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1]) - || (n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) - ) { - if (runLength[n - 1] < runLength[n + 1]) { - n--; - } - } - else if (runLength[n] > runLength[n + 1]) { - break; - } - mergeAt(n); - } - } - - function forceMergeRuns() { - while (stackSize > 1) { - var n = stackSize - 2; - - if (n > 0 && runLength[n - 1] < runLength[n + 1]) { - n--; - } - - mergeAt(n); - } - } - - function mergeAt(i) { - var start1 = runStart[i]; - var length1 = runLength[i]; - var start2 = runStart[i + 1]; - var length2 = runLength[i + 1]; - - runLength[i] = length1 + length2; - - if (i === stackSize - 3) { - runStart[i + 1] = runStart[i + 2]; - runLength[i + 1] = runLength[i + 2]; - } - - stackSize--; - - var k = gallopRight(array[start2], array, start1, length1, 0, compare); - start1 += k; - length1 -= k; - - if (length1 === 0) { - return; - } - - length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare); - - if (length2 === 0) { - return; - } - - if (length1 <= length2) { - mergeLow(start1, length1, start2, length2); - } - else { - mergeHigh(start1, length1, start2, length2); - } - } - - function mergeLow(start1, length1, start2, length2) { - var i = 0; - - for (i = 0; i < length1; i++) { - tmp[i] = array[start1 + i]; - } - - var cursor1 = 0; - var cursor2 = start2; - var dest = start1; - - array[dest++] = array[cursor2++]; - - if (--length2 === 0) { - for (i = 0; i < length1; i++) { - array[dest + i] = tmp[cursor1 + i]; - } - return; - } - - if (length1 === 1) { - for (i = 0; i < length2; i++) { - array[dest + i] = array[cursor2 + i]; - } - array[dest + length2] = tmp[cursor1]; - return; - } - - var _minGallop = minGallop; - var count1; - var count2; - var exit; - - while (1) { - count1 = 0; - count2 = 0; - exit = false; - - do { - if (compare(array[cursor2], tmp[cursor1]) < 0) { - array[dest++] = array[cursor2++]; - count2++; - count1 = 0; - - if (--length2 === 0) { - exit = true; - break; - } - } - else { - array[dest++] = tmp[cursor1++]; - count1++; - count2 = 0; - if (--length1 === 1) { - exit = true; - break; - } - } - } while ((count1 | count2) < _minGallop); - - if (exit) { - break; - } - - do { - count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare); - - if (count1 !== 0) { - for (i = 0; i < count1; i++) { - array[dest + i] = tmp[cursor1 + i]; - } - - dest += count1; - cursor1 += count1; - length1 -= count1; - if (length1 <= 1) { - exit = true; - break; - } - } - - array[dest++] = array[cursor2++]; - - if (--length2 === 0) { - exit = true; - break; - } - - count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare); - - if (count2 !== 0) { - for (i = 0; i < count2; i++) { - array[dest + i] = array[cursor2 + i]; - } - - dest += count2; - cursor2 += count2; - length2 -= count2; - - if (length2 === 0) { - exit = true; - break; - } - } - array[dest++] = tmp[cursor1++]; - - if (--length1 === 1) { - exit = true; - break; - } - - _minGallop--; - } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); - - if (exit) { - break; - } - - if (_minGallop < 0) { - _minGallop = 0; - } - - _minGallop += 2; - } - - minGallop = _minGallop; - - minGallop < 1 && (minGallop = 1); - - if (length1 === 1) { - for (i = 0; i < length2; i++) { - array[dest + i] = array[cursor2 + i]; - } - array[dest + length2] = tmp[cursor1]; - } - else if (length1 === 0) { - throw new Error(); - // throw new Error('mergeLow preconditions were not respected'); - } - else { - for (i = 0; i < length1; i++) { - array[dest + i] = tmp[cursor1 + i]; - } - } - } - - function mergeHigh(start1, length1, start2, length2) { - var i = 0; - - for (i = 0; i < length2; i++) { - tmp[i] = array[start2 + i]; - } - - var cursor1 = start1 + length1 - 1; - var cursor2 = length2 - 1; - var dest = start2 + length2 - 1; - var customCursor = 0; - var customDest = 0; - - array[dest--] = array[cursor1--]; - - if (--length1 === 0) { - customCursor = dest - (length2 - 1); - - for (i = 0; i < length2; i++) { - array[customCursor + i] = tmp[i]; - } - - return; - } - - if (length2 === 1) { - dest -= length1; - cursor1 -= length1; - customDest = dest + 1; - customCursor = cursor1 + 1; - - for (i = length1 - 1; i >= 0; i--) { - array[customDest + i] = array[customCursor + i]; - } - - array[dest] = tmp[cursor2]; - return; - } - - var _minGallop = minGallop; - - while (true) { - var count1 = 0; - var count2 = 0; - var exit = false; - - do { - if (compare(tmp[cursor2], array[cursor1]) < 0) { - array[dest--] = array[cursor1--]; - count1++; - count2 = 0; - if (--length1 === 0) { - exit = true; - break; - } - } - else { - array[dest--] = tmp[cursor2--]; - count2++; - count1 = 0; - if (--length2 === 1) { - exit = true; - break; - } - } - } while ((count1 | count2) < _minGallop); - - if (exit) { - break; - } - - do { - count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare); - - if (count1 !== 0) { - dest -= count1; - cursor1 -= count1; - length1 -= count1; - customDest = dest + 1; - customCursor = cursor1 + 1; - - for (i = count1 - 1; i >= 0; i--) { - array[customDest + i] = array[customCursor + i]; - } - - if (length1 === 0) { - exit = true; - break; - } - } - - array[dest--] = tmp[cursor2--]; - - if (--length2 === 1) { - exit = true; - break; - } - - count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare); - - if (count2 !== 0) { - dest -= count2; - cursor2 -= count2; - length2 -= count2; - customDest = dest + 1; - customCursor = cursor2 + 1; - - for (i = 0; i < count2; i++) { - array[customDest + i] = tmp[customCursor + i]; - } - - if (length2 <= 1) { - exit = true; - break; - } - } - - array[dest--] = array[cursor1--]; - - if (--length1 === 0) { - exit = true; - break; - } - - _minGallop--; - } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); - - if (exit) { - break; - } - - if (_minGallop < 0) { - _minGallop = 0; - } - - _minGallop += 2; - } - - minGallop = _minGallop; - - if (minGallop < 1) { - minGallop = 1; - } - - if (length2 === 1) { - dest -= length1; - cursor1 -= length1; - customDest = dest + 1; - customCursor = cursor1 + 1; - - for (i = length1 - 1; i >= 0; i--) { - array[customDest + i] = array[customCursor + i]; - } - - array[dest] = tmp[cursor2]; - } - else if (length2 === 0) { - throw new Error(); - // throw new Error('mergeHigh preconditions were not respected'); - } - else { - customCursor = dest - (length2 - 1); - for (i = 0; i < length2; i++) { - array[customCursor + i] = tmp[i]; - } - } - } - - this.mergeRuns = mergeRuns; - this.forceMergeRuns = forceMergeRuns; - this.pushRun = pushRun; -} - -function sort(array, compare, lo, hi) { - if (!lo) { - lo = 0; - } - if (!hi) { - hi = array.length; - } - - var remaining = hi - lo; - - if (remaining < 2) { - return; - } - - var runLength = 0; - - if (remaining < DEFAULT_MIN_MERGE) { - runLength = makeAscendingRun(array, lo, hi, compare); - binaryInsertionSort(array, lo, hi, lo + runLength, compare); - return; - } - - var ts = new TimSort(array, compare); - - var minRun = minRunLength(remaining); - - do { - runLength = makeAscendingRun(array, lo, hi, compare); - if (runLength < minRun) { - var force = remaining; - if (force > minRun) { - force = minRun; - } - - binaryInsertionSort(array, lo, lo + force, lo + runLength, compare); - runLength = force; - } - - ts.pushRun(lo, runLength); - ts.mergeRuns(); - - remaining -= runLength; - lo += runLength; - } while (remaining !== 0); - - ts.forceMergeRuns(); -} - -// Use timsort because in most case elements are partially sorted -// https://jsfiddle.net/pissang/jr4x7mdm/8/ -function shapeCompareFunc(a, b) { - if (a.zlevel === b.zlevel) { - if (a.z === b.z) { - // if (a.z2 === b.z2) { - // // FIXME Slow has renderidx compare - // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement - // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012 - // return a.__renderidx - b.__renderidx; - // } - return a.z2 - b.z2; - } - return a.z - b.z; - } - return a.zlevel - b.zlevel; -} -/** - * 内容仓库 (M) - * @alias module:zrender/Storage - * @constructor - */ -var Storage = function () { // jshint ignore:line - this._roots = []; - - this._displayList = []; - - this._displayListLen = 0; -}; - -Storage.prototype = { - - constructor: Storage, - - /** - * @param {Function} cb - * - */ - traverse: function (cb, context) { - for (var i = 0; i < this._roots.length; i++) { - this._roots[i].traverse(cb, context); - } - }, - - /** - * 返回所有图形的绘制队列 - * @param {boolean} [update=false] 是否在返回前更新该数组 - * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效 - * - * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList} - * @return {Array.} - */ - getDisplayList: function (update, includeIgnore) { - includeIgnore = includeIgnore || false; - if (update) { - this.updateDisplayList(includeIgnore); - } - return this._displayList; - }, - - /** - * 更新图形的绘制队列。 - * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中, - * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列 - * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组 - */ - updateDisplayList: function (includeIgnore) { - this._displayListLen = 0; - - var roots = this._roots; - var displayList = this._displayList; - for (var i = 0, len = roots.length; i < len; i++) { - this._updateAndAddDisplayable(roots[i], null, includeIgnore); - } - - displayList.length = this._displayListLen; - - env$1.canvasSupported && sort(displayList, shapeCompareFunc); - }, - - _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) { - - if (el.ignore && !includeIgnore) { - return; - } - - el.beforeUpdate(); - - if (el.__dirty) { - - el.update(); - - } - - el.afterUpdate(); - - var userSetClipPath = el.clipPath; - if (userSetClipPath) { - - // FIXME 效率影响 - if (clipPaths) { - clipPaths = clipPaths.slice(); - } - else { - clipPaths = []; - } - - var currentClipPath = userSetClipPath; - var parentClipPath = el; - // Recursively add clip path - while (currentClipPath) { - // clipPath 的变换是基于使用这个 clipPath 的元素 - currentClipPath.parent = parentClipPath; - currentClipPath.updateTransform(); - - clipPaths.push(currentClipPath); - - parentClipPath = currentClipPath; - currentClipPath = currentClipPath.clipPath; - } - } - - if (el.isGroup) { - var children = el._children; - - for (var i = 0; i < children.length; i++) { - var child = children[i]; - - // Force to mark as dirty if group is dirty - // FIXME __dirtyPath ? - if (el.__dirty) { - child.__dirty = true; - } - - this._updateAndAddDisplayable(child, clipPaths, includeIgnore); - } - - // Mark group clean here - el.__dirty = false; - - } - else { - el.__clipPaths = clipPaths; - - this._displayList[this._displayListLen++] = el; - } - }, - - /** - * 添加图形(Shape)或者组(Group)到根节点 - * @param {module:zrender/Element} el - */ - addRoot: function (el) { - if (el.__storage === this) { - return; - } - - if (el instanceof Group) { - el.addChildrenToStorage(this); - } - - this.addToStorage(el); - this._roots.push(el); - }, - - /** - * 删除指定的图形(Shape)或者组(Group) - * @param {string|Array.} [el] 如果为空清空整个Storage - */ - delRoot: function (el) { - if (el == null) { - // 不指定el清空 - for (var i = 0; i < this._roots.length; i++) { - var root = this._roots[i]; - if (root instanceof Group) { - root.delChildrenFromStorage(this); - } - } - - this._roots = []; - this._displayList = []; - this._displayListLen = 0; - - return; - } - - if (el instanceof Array) { - for (var i = 0, l = el.length; i < l; i++) { - this.delRoot(el[i]); - } - return; - } - - - var idx = indexOf(this._roots, el); - if (idx >= 0) { - this.delFromStorage(el); - this._roots.splice(idx, 1); - if (el instanceof Group) { - el.delChildrenFromStorage(this); - } - } - }, - - addToStorage: function (el) { - if (el) { - el.__storage = this; - el.dirty(false); - } - return this; - }, - - delFromStorage: function (el) { - if (el) { - el.__storage = null; - } - - return this; - }, - - /** - * 清空并且释放Storage - */ - dispose: function () { - this._renderList = - this._roots = null; - }, - - displayableSortFunc: shapeCompareFunc -}; - -var SHADOW_PROPS = { - 'shadowBlur': 1, - 'shadowOffsetX': 1, - 'shadowOffsetY': 1, - 'textShadowBlur': 1, - 'textShadowOffsetX': 1, - 'textShadowOffsetY': 1, - 'textBoxShadowBlur': 1, - 'textBoxShadowOffsetX': 1, - 'textBoxShadowOffsetY': 1 -}; - -var fixShadow = function (ctx, propName, value) { - if (SHADOW_PROPS.hasOwnProperty(propName)) { - return value *= ctx.dpr; - } - return value; -}; - -var ContextCachedBy = { - NONE: 0, - STYLE_BIND: 1, - PLAIN_TEXT: 2 -}; - -// Avoid confused with 0/false. -var WILL_BE_RESTORED = 9; - -var STYLE_COMMON_PROPS = [ - ['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'], - ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10] -]; - -// var SHADOW_PROPS = STYLE_COMMON_PROPS.slice(0, 4); -// var LINE_PROPS = STYLE_COMMON_PROPS.slice(4); - -var Style = function (opts) { - this.extendFrom(opts, false); -}; - -function createLinearGradient(ctx, obj, rect) { - var x = obj.x == null ? 0 : obj.x; - var x2 = obj.x2 == null ? 1 : obj.x2; - var y = obj.y == null ? 0 : obj.y; - var y2 = obj.y2 == null ? 0 : obj.y2; - - if (!obj.global) { - x = x * rect.width + rect.x; - x2 = x2 * rect.width + rect.x; - y = y * rect.height + rect.y; - y2 = y2 * rect.height + rect.y; - } - - // Fix NaN when rect is Infinity - x = isNaN(x) ? 0 : x; - x2 = isNaN(x2) ? 1 : x2; - y = isNaN(y) ? 0 : y; - y2 = isNaN(y2) ? 0 : y2; - - var canvasGradient = ctx.createLinearGradient(x, y, x2, y2); - - return canvasGradient; -} - -function createRadialGradient(ctx, obj, rect) { - var width = rect.width; - var height = rect.height; - var min = Math.min(width, height); - - var x = obj.x == null ? 0.5 : obj.x; - var y = obj.y == null ? 0.5 : obj.y; - var r = obj.r == null ? 0.5 : obj.r; - if (!obj.global) { - x = x * width + rect.x; - y = y * height + rect.y; - r = r * min; - } - - var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r); - - return canvasGradient; -} - - -Style.prototype = { - - constructor: Style, - - /** - * @type {string} - */ - fill: '#000', - - /** - * @type {string} - */ - stroke: null, - - /** - * @type {number} - */ - opacity: 1, - - /** - * @type {number} - */ - fillOpacity: null, - - /** - * @type {number} - */ - strokeOpacity: null, - - /** - * `true` is not supported. - * `false`/`null`/`undefined` are the same. - * `false` is used to remove lineDash in some - * case that `null`/`undefined` can not be set. - * (e.g., emphasis.lineStyle in echarts) - * @type {Array.|boolean} - */ - lineDash: null, - - /** - * @type {number} - */ - lineDashOffset: 0, - - /** - * @type {number} - */ - shadowBlur: 0, - - /** - * @type {number} - */ - shadowOffsetX: 0, - - /** - * @type {number} - */ - shadowOffsetY: 0, - - /** - * @type {number} - */ - lineWidth: 1, - - /** - * If stroke ignore scale - * @type {Boolean} - */ - strokeNoScale: false, - - // Bounding rect text configuration - // Not affected by element transform - /** - * @type {string} - */ - text: null, - - /** - * If `fontSize` or `fontFamily` exists, `font` will be reset by - * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`. - * So do not visit it directly in upper application (like echarts), - * but use `contain/text#makeFont` instead. - * @type {string} - */ - font: null, - - /** - * The same as font. Use font please. - * @deprecated - * @type {string} - */ - textFont: null, - - /** - * It helps merging respectively, rather than parsing an entire font string. - * @type {string} - */ - fontStyle: null, - - /** - * It helps merging respectively, rather than parsing an entire font string. - * @type {string} - */ - fontWeight: null, - - /** - * It helps merging respectively, rather than parsing an entire font string. - * Should be 12 but not '12px'. - * @type {number} - */ - fontSize: null, - - /** - * It helps merging respectively, rather than parsing an entire font string. - * @type {string} - */ - fontFamily: null, - - /** - * Reserved for special functinality, like 'hr'. - * @type {string} - */ - textTag: null, - - /** - * @type {string} - */ - textFill: '#000', - - /** - * @type {string} - */ - textStroke: null, - - /** - * @type {number} - */ - textWidth: null, - - /** - * Only for textBackground. - * @type {number} - */ - textHeight: null, - - /** - * textStroke may be set as some color as a default - * value in upper applicaion, where the default value - * of textStrokeWidth should be 0 to make sure that - * user can choose to do not use text stroke. - * @type {number} - */ - textStrokeWidth: 0, - - /** - * @type {number} - */ - textLineHeight: null, - - /** - * 'inside', 'left', 'right', 'top', 'bottom' - * [x, y] - * Based on x, y of rect. - * @type {string|Array.} - * @default 'inside' - */ - textPosition: 'inside', - - /** - * If not specified, use the boundingRect of a `displayable`. - * @type {Object} - */ - textRect: null, - - /** - * [x, y] - * @type {Array.} - */ - textOffset: null, - - /** - * @type {string} - */ - textAlign: null, - - /** - * @type {string} - */ - textVerticalAlign: null, - - /** - * @type {number} - */ - textDistance: 5, - - /** - * @type {string} - */ - textShadowColor: 'transparent', - - /** - * @type {number} - */ - textShadowBlur: 0, - - /** - * @type {number} - */ - textShadowOffsetX: 0, - - /** - * @type {number} - */ - textShadowOffsetY: 0, - - /** - * @type {string} - */ - textBoxShadowColor: 'transparent', - - /** - * @type {number} - */ - textBoxShadowBlur: 0, - - /** - * @type {number} - */ - textBoxShadowOffsetX: 0, - - /** - * @type {number} - */ - textBoxShadowOffsetY: 0, - - /** - * Whether transform text. - * Only available in Path and Image element, - * where the text is called as `RectText`. - * @type {boolean} - */ - transformText: false, - - /** - * Text rotate around position of Path or Image. - * The origin of the rotation can be specified by `textOrigin`. - * Only available in Path and Image element, - * where the text is called as `RectText`. - */ - textRotation: 0, - - /** - * Text origin of text rotation. - * Useful in the case like label rotation of circular symbol. - * Only available in Path and Image element, where the text is called - * as `RectText` and the element is called as "host element". - * The value can be: - * + If specified as a coordinate like `[10, 40]`, it is the `[x, y]` - * base on the left-top corner of the rect of its host element. - * + If specified as a string `center`, it is the center of the rect of - * its host element. - * + By default, this origin is the `textPosition`. - * @type {string|Array.} - */ - textOrigin: null, - - /** - * @type {string} - */ - textBackgroundColor: null, - - /** - * @type {string} - */ - textBorderColor: null, - - /** - * @type {number} - */ - textBorderWidth: 0, - - /** - * @type {number} - */ - textBorderRadius: 0, - - /** - * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]` - * @type {number|Array.} - */ - textPadding: null, - - /** - * Text styles for rich text. - * @type {Object} - */ - rich: null, - - /** - * {outerWidth, outerHeight, ellipsis, placeholder} - * @type {Object} - */ - truncate: null, - - /** - * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation - * @type {string} - */ - blend: null, - - /** - * @param {CanvasRenderingContext2D} ctx - */ - bind: function (ctx, el, prevEl) { - var style = this; - var prevStyle = prevEl && prevEl.style; - // If no prevStyle, it means first draw. - // Only apply cache if the last time cachced by this function. - var notCheckCache = !prevStyle || ctx.__attrCachedBy !== ContextCachedBy.STYLE_BIND; - - ctx.__attrCachedBy = ContextCachedBy.STYLE_BIND; - - for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) { - var prop = STYLE_COMMON_PROPS[i]; - var styleName = prop[0]; - - if (notCheckCache || style[styleName] !== prevStyle[styleName]) { - // FIXME Invalid property value will cause style leak from previous element. - ctx[styleName] = - fixShadow(ctx, styleName, style[styleName] || prop[1]); - } - } - - if ((notCheckCache || style.fill !== prevStyle.fill)) { - ctx.fillStyle = style.fill; - } - if ((notCheckCache || style.stroke !== prevStyle.stroke)) { - ctx.strokeStyle = style.stroke; - } - if ((notCheckCache || style.opacity !== prevStyle.opacity)) { - ctx.globalAlpha = style.opacity == null ? 1 : style.opacity; - } - - if ((notCheckCache || style.blend !== prevStyle.blend)) { - ctx.globalCompositeOperation = style.blend || 'source-over'; - } - if (this.hasStroke()) { - var lineWidth = style.lineWidth; - ctx.lineWidth = lineWidth / ( - (this.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1 - ); - } - }, - - hasFill: function () { - var fill = this.fill; - return fill != null && fill !== 'none'; - }, - - hasStroke: function () { - var stroke = this.stroke; - return stroke != null && stroke !== 'none' && this.lineWidth > 0; - }, - - /** - * Extend from other style - * @param {zrender/graphic/Style} otherStyle - * @param {boolean} overwrite true: overwrirte any way. - * false: overwrite only when !target.hasOwnProperty - * others: overwrite when property is not null/undefined. - */ - extendFrom: function (otherStyle, overwrite) { - if (otherStyle) { - for (var name in otherStyle) { - if (otherStyle.hasOwnProperty(name) - && (overwrite === true - || ( - overwrite === false - ? !this.hasOwnProperty(name) - : otherStyle[name] != null - ) - ) - ) { - this[name] = otherStyle[name]; - } - } - } - }, - - /** - * Batch setting style with a given object - * @param {Object|string} obj - * @param {*} [obj] - */ - set: function (obj, value) { - if (typeof obj === 'string') { - this[obj] = value; - } - else { - this.extendFrom(obj, true); - } - }, - - /** - * Clone - * @return {zrender/graphic/Style} [description] - */ - clone: function () { - var newStyle = new this.constructor(); - newStyle.extendFrom(this, true); - return newStyle; - }, - - getGradient: function (ctx, obj, rect) { - var method = obj.type === 'radial' ? createRadialGradient : createLinearGradient; - var canvasGradient = method(ctx, obj, rect); - var colorStops = obj.colorStops; - for (var i = 0; i < colorStops.length; i++) { - canvasGradient.addColorStop( - colorStops[i].offset, colorStops[i].color - ); - } - return canvasGradient; - } - -}; - -var styleProto = Style.prototype; -for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) { - var prop = STYLE_COMMON_PROPS[i]; - if (!(prop[0] in styleProto)) { - styleProto[prop[0]] = prop[1]; - } -} - -// Provide for others -Style.getGradient = styleProto.getGradient; - -var Pattern = function (image, repeat) { - // Should do nothing more in this constructor. Because gradient can be - // declard by `color: {image: ...}`, where this constructor will not be called. - - this.image = image; - this.repeat = repeat; - - // Can be cloned - this.type = 'pattern'; -}; - -Pattern.prototype.getCanvasPattern = function (ctx) { - return ctx.createPattern(this.image, this.repeat || 'repeat'); -}; - -/** - * @module zrender/Layer - * @author pissang(https://www.github.com/pissang) - */ - -function returnFalse() { - return false; -} - -/** - * 创建dom - * - * @inner - * @param {string} id dom id 待用 - * @param {Painter} painter painter instance - * @param {number} number - */ -function createDom(id, painter, dpr) { - var newDom = createCanvas(); - var width = painter.getWidth(); - var height = painter.getHeight(); - - var newDomStyle = newDom.style; - if (newDomStyle) { // In node or some other non-browser environment - newDomStyle.position = 'absolute'; - newDomStyle.left = 0; - newDomStyle.top = 0; - newDomStyle.width = width + 'px'; - newDomStyle.height = height + 'px'; - - newDom.setAttribute('data-zr-dom-id', id); - } - - newDom.width = width * dpr; - newDom.height = height * dpr; - - return newDom; -} - -/** - * @alias module:zrender/Layer - * @constructor - * @extends module:zrender/mixin/Transformable - * @param {string} id - * @param {module:zrender/Painter} painter - * @param {number} [dpr] - */ -var Layer = function (id, painter, dpr) { - var dom; - dpr = dpr || devicePixelRatio; - if (typeof id === 'string') { - dom = createDom(id, painter, dpr); - } - // Not using isDom because in node it will return false - else if (isObject(id)) { - dom = id; - id = dom.id; - } - this.id = id; - this.dom = dom; - - var domStyle = dom.style; - if (domStyle) { // Not in node - dom.onselectstart = returnFalse; // 避免页面选中的尴尬 - domStyle['-webkit-user-select'] = 'none'; - domStyle['user-select'] = 'none'; - domStyle['-webkit-touch-callout'] = 'none'; - domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)'; - domStyle['padding'] = 0; // eslint-disable-line dot-notation - domStyle['margin'] = 0; // eslint-disable-line dot-notation - domStyle['border-width'] = 0; - } - - this.domBack = null; - this.ctxBack = null; - - this.painter = painter; - - this.config = null; - - // Configs - /** - * 每次清空画布的颜色 - * @type {string} - * @default 0 - */ - this.clearColor = 0; - /** - * 是否开启动态模糊 - * @type {boolean} - * @default false - */ - this.motionBlur = false; - /** - * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显 - * @type {number} - * @default 0.7 - */ - this.lastFrameAlpha = 0.7; - - /** - * Layer dpr - * @type {number} - */ - this.dpr = dpr; -}; - -Layer.prototype = { - - constructor: Layer, - - __dirty: true, - - __used: false, - - __drawIndex: 0, - __startIndex: 0, - __endIndex: 0, - - incremental: false, - - getElementCount: function () { - return this.__endIndex - this.__startIndex; - }, - - initContext: function () { - this.ctx = this.dom.getContext('2d'); - this.ctx.dpr = this.dpr; - }, - - createBackBuffer: function () { - var dpr = this.dpr; - - this.domBack = createDom('back-' + this.id, this.painter, dpr); - this.ctxBack = this.domBack.getContext('2d'); - - if (dpr !== 1) { - this.ctxBack.scale(dpr, dpr); - } - }, - - /** - * @param {number} width - * @param {number} height - */ - resize: function (width, height) { - var dpr = this.dpr; - - var dom = this.dom; - var domStyle = dom.style; - var domBack = this.domBack; - - if (domStyle) { - domStyle.width = width + 'px'; - domStyle.height = height + 'px'; - } - - dom.width = width * dpr; - dom.height = height * dpr; - - if (domBack) { - domBack.width = width * dpr; - domBack.height = height * dpr; - - if (dpr !== 1) { - this.ctxBack.scale(dpr, dpr); - } - } - }, - - /** - * 清空该层画布 - * @param {boolean} [clearAll]=false Clear all with out motion blur - * @param {Color} [clearColor] - */ - clear: function (clearAll, clearColor) { - var dom = this.dom; - var ctx = this.ctx; - var width = dom.width; - var height = dom.height; - - var clearColor = clearColor || this.clearColor; - var haveMotionBLur = this.motionBlur && !clearAll; - var lastFrameAlpha = this.lastFrameAlpha; - - var dpr = this.dpr; - - if (haveMotionBLur) { - if (!this.domBack) { - this.createBackBuffer(); - } - - this.ctxBack.globalCompositeOperation = 'copy'; - this.ctxBack.drawImage( - dom, 0, 0, - width / dpr, - height / dpr - ); - } - - ctx.clearRect(0, 0, width, height); - if (clearColor && clearColor !== 'transparent') { - var clearColorGradientOrPattern; - // Gradient - if (clearColor.colorStops) { - // Cache canvas gradient - clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, { - x: 0, - y: 0, - width: width, - height: height - }); - - clearColor.__canvasGradient = clearColorGradientOrPattern; - } - // Pattern - else if (clearColor.image) { - clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx); - } - ctx.save(); - ctx.fillStyle = clearColorGradientOrPattern || clearColor; - ctx.fillRect(0, 0, width, height); - ctx.restore(); - } - - if (haveMotionBLur) { - var domBack = this.domBack; - ctx.save(); - ctx.globalAlpha = lastFrameAlpha; - ctx.drawImage(domBack, 0, 0, width, height); - ctx.restore(); - } - } -}; - -var requestAnimationFrame = ( - typeof window !== 'undefined' - && ( - (window.requestAnimationFrame && window.requestAnimationFrame.bind(window)) - // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809 - || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window)) - || window.mozRequestAnimationFrame - || window.webkitRequestAnimationFrame - ) -) || function (func) { - setTimeout(func, 16); -}; - -var globalImageCache = new LRU(50); - -/** - * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc - * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image - */ -function findExistImage(newImageOrSrc) { - if (typeof newImageOrSrc === 'string') { - var cachedImgObj = globalImageCache.get(newImageOrSrc); - return cachedImgObj && cachedImgObj.image; - } - else { - return newImageOrSrc; - } -} - -/** - * Caution: User should cache loaded images, but not just count on LRU. - * Consider if required images more than LRU size, will dead loop occur? - * - * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc - * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image. - * @param {module:zrender/Element} [hostEl] For calling `dirty`. - * @param {Function} [cb] params: (image, cbPayload) - * @param {Object} [cbPayload] Payload on cb calling. - * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image - */ -function createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) { - if (!newImageOrSrc) { - return image; - } - else if (typeof newImageOrSrc === 'string') { - - // Image should not be loaded repeatly. - if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) { - return image; - } - - // Only when there is no existent image or existent image src - // is different, this method is responsible for load. - var cachedImgObj = globalImageCache.get(newImageOrSrc); - - var pendingWrap = {hostEl: hostEl, cb: cb, cbPayload: cbPayload}; - - if (cachedImgObj) { - image = cachedImgObj.image; - !isImageReady(image) && cachedImgObj.pending.push(pendingWrap); - } - else { - image = new Image(); - image.onload = image.onerror = imageOnLoad; - - globalImageCache.put( - newImageOrSrc, - image.__cachedImgObj = { - image: image, - pending: [pendingWrap] - } - ); - - image.src = image.__zrImageSrc = newImageOrSrc; - } - - return image; - } - // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas - else { - return newImageOrSrc; - } -} - -function imageOnLoad() { - var cachedImgObj = this.__cachedImgObj; - this.onload = this.onerror = this.__cachedImgObj = null; - - for (var i = 0; i < cachedImgObj.pending.length; i++) { - var pendingWrap = cachedImgObj.pending[i]; - var cb = pendingWrap.cb; - cb && cb(this, pendingWrap.cbPayload); - pendingWrap.hostEl.dirty(); - } - cachedImgObj.pending.length = 0; -} - -function isImageReady(image) { - return image && image.width && image.height; -} - -var textWidthCache = {}; -var textWidthCacheCounter = 0; - -var TEXT_CACHE_MAX = 5000; -var STYLE_REG = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g; - -var DEFAULT_FONT$1 = '12px sans-serif'; - -// Avoid assign to an exported variable, for transforming to cjs. -var methods$1 = {}; - -function $override$1(name, fn) { - methods$1[name] = fn; -} - -/** - * @public - * @param {string} text - * @param {string} font - * @return {number} width - */ -function getWidth(text, font) { - font = font || DEFAULT_FONT$1; - var key = text + ':' + font; - if (textWidthCache[key]) { - return textWidthCache[key]; - } - - var textLines = (text + '').split('\n'); - var width = 0; - - for (var i = 0, l = textLines.length; i < l; i++) { - // textContain.measureText may be overrided in SVG or VML - width = Math.max(measureText(textLines[i], font).width, width); - } - - if (textWidthCacheCounter > TEXT_CACHE_MAX) { - textWidthCacheCounter = 0; - textWidthCache = {}; - } - textWidthCacheCounter++; - textWidthCache[key] = width; - - return width; -} - -/** - * @public - * @param {string} text - * @param {string} font - * @param {string} [textAlign='left'] - * @param {string} [textVerticalAlign='top'] - * @param {Array.} [textPadding] - * @param {Object} [rich] - * @param {Object} [truncate] - * @return {Object} {x, y, width, height, lineHeight} - */ -function getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) { - return rich - ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) - : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate); -} - -function getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate) { - var contentBlock = parsePlainText(text, font, textPadding, textLineHeight, truncate); - var outerWidth = getWidth(text, font); - if (textPadding) { - outerWidth += textPadding[1] + textPadding[3]; - } - var outerHeight = contentBlock.outerHeight; - - var x = adjustTextX(0, outerWidth, textAlign); - var y = adjustTextY(0, outerHeight, textVerticalAlign); - - var rect = new BoundingRect(x, y, outerWidth, outerHeight); - rect.lineHeight = contentBlock.lineHeight; - - return rect; -} - -function getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) { - var contentBlock = parseRichText(text, { - rich: rich, - truncate: truncate, - font: font, - textAlign: textAlign, - textPadding: textPadding, - textLineHeight: textLineHeight - }); - var outerWidth = contentBlock.outerWidth; - var outerHeight = contentBlock.outerHeight; - - var x = adjustTextX(0, outerWidth, textAlign); - var y = adjustTextY(0, outerHeight, textVerticalAlign); - - return new BoundingRect(x, y, outerWidth, outerHeight); -} - -/** - * @public - * @param {number} x - * @param {number} width - * @param {string} [textAlign='left'] - * @return {number} Adjusted x. - */ -function adjustTextX(x, width, textAlign) { - // FIXME Right to left language - if (textAlign === 'right') { - x -= width; - } - else if (textAlign === 'center') { - x -= width / 2; - } - return x; -} - -/** - * @public - * @param {number} y - * @param {number} height - * @param {string} [textVerticalAlign='top'] - * @return {number} Adjusted y. - */ -function adjustTextY(y, height, textVerticalAlign) { - if (textVerticalAlign === 'middle') { - y -= height / 2; - } - else if (textVerticalAlign === 'bottom') { - y -= height; - } - return y; -} - -/** - * Follow same interface to `Displayable.prototype.calculateTextPosition`. - * @public - * @param {Obejct} [out] Prepared out object. If not input, auto created in the method. - * @param {module:zrender/graphic/Style} style where `textPosition` and `textDistance` are visited. - * @param {Object} rect {x, y, width, height} Rect of the host elment, according to which the text positioned. - * @return {Object} The input `out`. Set: {x, y, textAlign, textVerticalAlign} - */ -function calculateTextPosition(out, style, rect) { - var textPosition = style.textPosition; - var distance = style.textDistance; - - var x = rect.x; - var y = rect.y; - distance = distance || 0; - - var height = rect.height; - var width = rect.width; - var halfHeight = height / 2; - - var textAlign = 'left'; - var textVerticalAlign = 'top'; - - switch (textPosition) { - case 'left': - x -= distance; - y += halfHeight; - textAlign = 'right'; - textVerticalAlign = 'middle'; - break; - case 'right': - x += distance + width; - y += halfHeight; - textVerticalAlign = 'middle'; - break; - case 'top': - x += width / 2; - y -= distance; - textAlign = 'center'; - textVerticalAlign = 'bottom'; - break; - case 'bottom': - x += width / 2; - y += height + distance; - textAlign = 'center'; - break; - case 'inside': - x += width / 2; - y += halfHeight; - textAlign = 'center'; - textVerticalAlign = 'middle'; - break; - case 'insideLeft': - x += distance; - y += halfHeight; - textVerticalAlign = 'middle'; - break; - case 'insideRight': - x += width - distance; - y += halfHeight; - textAlign = 'right'; - textVerticalAlign = 'middle'; - break; - case 'insideTop': - x += width / 2; - y += distance; - textAlign = 'center'; - break; - case 'insideBottom': - x += width / 2; - y += height - distance; - textAlign = 'center'; - textVerticalAlign = 'bottom'; - break; - case 'insideTopLeft': - x += distance; - y += distance; - break; - case 'insideTopRight': - x += width - distance; - y += distance; - textAlign = 'right'; - break; - case 'insideBottomLeft': - x += distance; - y += height - distance; - textVerticalAlign = 'bottom'; - break; - case 'insideBottomRight': - x += width - distance; - y += height - distance; - textAlign = 'right'; - textVerticalAlign = 'bottom'; - break; - } - - out = out || {}; - out.x = x; - out.y = y; - out.textAlign = textAlign; - out.textVerticalAlign = textVerticalAlign; - - return out; -} - -/** - * To be removed. But still do not remove in case that some one has imported it. - * @deprecated - * @public - * @param {stirng} textPosition - * @param {Object} rect {x, y, width, height} - * @param {number} distance - * @return {Object} {x, y, textAlign, textVerticalAlign} - */ - - -/** - * Show ellipsis if overflow. - * - * @public - * @param {string} text - * @param {string} containerWidth - * @param {string} font - * @param {number} [ellipsis='...'] - * @param {Object} [options] - * @param {number} [options.maxIterations=3] - * @param {number} [options.minChar=0] If truncate result are less - * then minChar, ellipsis will not show, which is - * better for user hint in some cases. - * @param {number} [options.placeholder=''] When all truncated, use the placeholder. - * @return {string} - */ -function truncateText(text, containerWidth, font, ellipsis, options) { - if (!containerWidth) { - return ''; - } - - var textLines = (text + '').split('\n'); - options = prepareTruncateOptions(containerWidth, font, ellipsis, options); - - // FIXME - // It is not appropriate that every line has '...' when truncate multiple lines. - for (var i = 0, len = textLines.length; i < len; i++) { - textLines[i] = truncateSingleLine(textLines[i], options); - } - - return textLines.join('\n'); -} - -function prepareTruncateOptions(containerWidth, font, ellipsis, options) { - options = extend({}, options); - - options.font = font; - var ellipsis = retrieve2(ellipsis, '...'); - options.maxIterations = retrieve2(options.maxIterations, 2); - var minChar = options.minChar = retrieve2(options.minChar, 0); - // FIXME - // Other languages? - options.cnCharWidth = getWidth('国', font); - // FIXME - // Consider proportional font? - var ascCharWidth = options.ascCharWidth = getWidth('a', font); - options.placeholder = retrieve2(options.placeholder, ''); - - // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'. - // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'. - var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap. - for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) { - contentWidth -= ascCharWidth; - } - - var ellipsisWidth = getWidth(ellipsis, font); - if (ellipsisWidth > contentWidth) { - ellipsis = ''; - ellipsisWidth = 0; - } - - contentWidth = containerWidth - ellipsisWidth; - - options.ellipsis = ellipsis; - options.ellipsisWidth = ellipsisWidth; - options.contentWidth = contentWidth; - options.containerWidth = containerWidth; - - return options; -} - -function truncateSingleLine(textLine, options) { - var containerWidth = options.containerWidth; - var font = options.font; - var contentWidth = options.contentWidth; - - if (!containerWidth) { - return ''; - } - - var lineWidth = getWidth(textLine, font); - - if (lineWidth <= containerWidth) { - return textLine; - } - - for (var j = 0; ; j++) { - if (lineWidth <= contentWidth || j >= options.maxIterations) { - textLine += options.ellipsis; - break; - } - - var subLength = j === 0 - ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth) - : lineWidth > 0 - ? Math.floor(textLine.length * contentWidth / lineWidth) - : 0; - - textLine = textLine.substr(0, subLength); - lineWidth = getWidth(textLine, font); - } - - if (textLine === '') { - textLine = options.placeholder; - } - - return textLine; -} - -function estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) { - var width = 0; - var i = 0; - for (var len = text.length; i < len && width < contentWidth; i++) { - var charCode = text.charCodeAt(i); - width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth; - } - return i; -} - -/** - * @public - * @param {string} font - * @return {number} line height - */ -function getLineHeight(font) { - // FIXME A rough approach. - return getWidth('国', font); -} - -/** - * @public - * @param {string} text - * @param {string} font - * @return {Object} width - */ -function measureText(text, font) { - return methods$1.measureText(text, font); -} - -// Avoid assign to an exported variable, for transforming to cjs. -methods$1.measureText = function (text, font) { - var ctx = getContext(); - ctx.font = font || DEFAULT_FONT$1; - return ctx.measureText(text); -}; - -/** - * @public - * @param {string} text - * @param {string} font - * @param {Object} [truncate] - * @return {Object} block: {lineHeight, lines, height, outerHeight, canCacheByTextString} - * Notice: for performance, do not calculate outerWidth util needed. - * `canCacheByTextString` means the result `lines` is only determined by the input `text`. - * Thus we can simply comparing the `input` text to determin whether the result changed, - * without travel the result `lines`. - */ -function parsePlainText(text, font, padding, textLineHeight, truncate) { - text != null && (text += ''); - - var lineHeight = retrieve2(textLineHeight, getLineHeight(font)); - var lines = text ? text.split('\n') : []; - var height = lines.length * lineHeight; - var outerHeight = height; - var canCacheByTextString = true; - - if (padding) { - outerHeight += padding[0] + padding[2]; - } - - if (text && truncate) { - canCacheByTextString = false; - var truncOuterHeight = truncate.outerHeight; - var truncOuterWidth = truncate.outerWidth; - if (truncOuterHeight != null && outerHeight > truncOuterHeight) { - text = ''; - lines = []; - } - else if (truncOuterWidth != null) { - var options = prepareTruncateOptions( - truncOuterWidth - (padding ? padding[1] + padding[3] : 0), - font, - truncate.ellipsis, - {minChar: truncate.minChar, placeholder: truncate.placeholder} - ); - - // FIXME - // It is not appropriate that every line has '...' when truncate multiple lines. - for (var i = 0, len = lines.length; i < len; i++) { - lines[i] = truncateSingleLine(lines[i], options); - } - } - } - - return { - lines: lines, - height: height, - outerHeight: outerHeight, - lineHeight: lineHeight, - canCacheByTextString: canCacheByTextString - }; -} - -/** - * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx' - * Also consider 'bbbb{a|xxx\nzzz}xxxx\naaaa'. - * - * @public - * @param {string} text - * @param {Object} style - * @return {Object} block - * { - * width, - * height, - * lines: [{ - * lineHeight, - * width, - * tokens: [[{ - * styleName, - * text, - * width, // include textPadding - * height, // include textPadding - * textWidth, // pure text width - * textHeight, // pure text height - * lineHeihgt, - * font, - * textAlign, - * textVerticalAlign - * }], [...], ...] - * }, ...] - * } - * If styleName is undefined, it is plain text. - */ -function parseRichText(text, style) { - var contentBlock = {lines: [], width: 0, height: 0}; - - text != null && (text += ''); - if (!text) { - return contentBlock; - } - - var lastIndex = STYLE_REG.lastIndex = 0; - var result; - while ((result = STYLE_REG.exec(text)) != null) { - var matchedIndex = result.index; - if (matchedIndex > lastIndex) { - pushTokens(contentBlock, text.substring(lastIndex, matchedIndex)); - } - pushTokens(contentBlock, result[2], result[1]); - lastIndex = STYLE_REG.lastIndex; - } - - if (lastIndex < text.length) { - pushTokens(contentBlock, text.substring(lastIndex, text.length)); - } - - var lines = contentBlock.lines; - var contentHeight = 0; - var contentWidth = 0; - // For `textWidth: 100%` - var pendingList = []; - - var stlPadding = style.textPadding; - - var truncate = style.truncate; - var truncateWidth = truncate && truncate.outerWidth; - var truncateHeight = truncate && truncate.outerHeight; - if (stlPadding) { - truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]); - truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]); - } - - // Calculate layout info of tokens. - for (var i = 0; i < lines.length; i++) { - var line = lines[i]; - var lineHeight = 0; - var lineWidth = 0; - - for (var j = 0; j < line.tokens.length; j++) { - var token = line.tokens[j]; - var tokenStyle = token.styleName && style.rich[token.styleName] || {}; - // textPadding should not inherit from style. - var textPadding = token.textPadding = tokenStyle.textPadding; - - // textFont has been asigned to font by `normalizeStyle`. - var font = token.font = tokenStyle.font || style.font; - - // textHeight can be used when textVerticalAlign is specified in token. - var tokenHeight = token.textHeight = retrieve2( - // textHeight should not be inherited, consider it can be specified - // as box height of the block. - tokenStyle.textHeight, getLineHeight(font) - ); - textPadding && (tokenHeight += textPadding[0] + textPadding[2]); - token.height = tokenHeight; - token.lineHeight = retrieve3( - tokenStyle.textLineHeight, style.textLineHeight, tokenHeight - ); - - token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign; - token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle'; - - if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) { - return {lines: [], width: 0, height: 0}; - } - - token.textWidth = getWidth(token.text, font); - var tokenWidth = tokenStyle.textWidth; - var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto'; - - // Percent width, can be `100%`, can be used in drawing separate - // line when box width is needed to be auto. - if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') { - token.percentWidth = tokenWidth; - pendingList.push(token); - tokenWidth = 0; - // Do not truncate in this case, because there is no user case - // and it is too complicated. - } - else { - if (tokenWidthNotSpecified) { - tokenWidth = token.textWidth; - - // FIXME: If image is not loaded and textWidth is not specified, calling - // `getBoundingRect()` will not get correct result. - var textBackgroundColor = tokenStyle.textBackgroundColor; - var bgImg = textBackgroundColor && textBackgroundColor.image; - - // Use cases: - // (1) If image is not loaded, it will be loaded at render phase and call - // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded - // image, and then the right size will be calculated here at the next tick. - // See `graphic/helper/text.js`. - // (2) If image loaded, and `textBackgroundColor.image` is image src string, - // use `imageHelper.findExistImage` to find cached image. - // `imageHelper.findExistImage` will always be called here before - // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText` - // which ensures that image will not be rendered before correct size calcualted. - if (bgImg) { - bgImg = findExistImage(bgImg); - if (isImageReady(bgImg)) { - tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height); - } - } - } - - var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0; - tokenWidth += paddingW; - - var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null; - - if (remianTruncWidth != null && remianTruncWidth < tokenWidth) { - if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) { - token.text = ''; - token.textWidth = tokenWidth = 0; - } - else { - token.text = truncateText( - token.text, remianTruncWidth - paddingW, font, truncate.ellipsis, - {minChar: truncate.minChar} - ); - token.textWidth = getWidth(token.text, font); - tokenWidth = token.textWidth + paddingW; - } - } - } - - lineWidth += (token.width = tokenWidth); - tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight)); - } - - line.width = lineWidth; - line.lineHeight = lineHeight; - contentHeight += lineHeight; - contentWidth = Math.max(contentWidth, lineWidth); - } - - contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth); - contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight); - - if (stlPadding) { - contentBlock.outerWidth += stlPadding[1] + stlPadding[3]; - contentBlock.outerHeight += stlPadding[0] + stlPadding[2]; - } - - for (var i = 0; i < pendingList.length; i++) { - var token = pendingList[i]; - var percentWidth = token.percentWidth; - // Should not base on outerWidth, because token can not be placed out of padding. - token.width = parseInt(percentWidth, 10) / 100 * contentWidth; - } - - return contentBlock; -} - -function pushTokens(block, str, styleName) { - var isEmptyStr = str === ''; - var strs = str.split('\n'); - var lines = block.lines; - - for (var i = 0; i < strs.length; i++) { - var text = strs[i]; - var token = { - styleName: styleName, - text: text, - isLineHolder: !text && !isEmptyStr - }; - - // The first token should be appended to the last line. - if (!i) { - var tokens = (lines[lines.length - 1] || (lines[0] = {tokens: []})).tokens; - - // Consider cases: - // (1) ''.split('\n') => ['', '\n', ''], the '' at the first item - // (which is a placeholder) should be replaced by new token. - // (2) A image backage, where token likes {a|}. - // (3) A redundant '' will affect textAlign in line. - // (4) tokens with the same tplName should not be merged, because - // they should be displayed in different box (with border and padding). - var tokensLen = tokens.length; - (tokensLen === 1 && tokens[0].isLineHolder) - ? (tokens[0] = token) - // Consider text is '', only insert when it is the "lineHolder" or - // "emptyStr". Otherwise a redundant '' will affect textAlign in line. - : ((text || !tokensLen || isEmptyStr) && tokens.push(token)); - } - // Other tokens always start a new line. - else { - // If there is '', insert it as a placeholder. - lines.push({tokens: [token]}); - } - } -} - -function makeFont(style) { - // FIXME in node-canvas fontWeight is before fontStyle - // Use `fontSize` `fontFamily` to check whether font properties are defined. - var font = (style.fontSize || style.fontFamily) && [ - style.fontStyle, - style.fontWeight, - (style.fontSize || 12) + 'px', - // If font properties are defined, `fontFamily` should not be ignored. - style.fontFamily || 'sans-serif' - ].join(' '); - return font && trim(font) || style.textFont || style.font; -} - -/** - * @param {Object} ctx - * @param {Object} shape - * @param {number} shape.x - * @param {number} shape.y - * @param {number} shape.width - * @param {number} shape.height - * @param {number} shape.r - */ -function buildPath(ctx, shape) { - var x = shape.x; - var y = shape.y; - var width = shape.width; - var height = shape.height; - var r = shape.r; - var r1; - var r2; - var r3; - var r4; - - // Convert width and height to positive for better borderRadius - if (width < 0) { - x = x + width; - width = -width; - } - if (height < 0) { - y = y + height; - height = -height; - } - - if (typeof r === 'number') { - r1 = r2 = r3 = r4 = r; - } - else if (r instanceof Array) { - if (r.length === 1) { - r1 = r2 = r3 = r4 = r[0]; - } - else if (r.length === 2) { - r1 = r3 = r[0]; - r2 = r4 = r[1]; - } - else if (r.length === 3) { - r1 = r[0]; - r2 = r4 = r[1]; - r3 = r[2]; - } - else { - r1 = r[0]; - r2 = r[1]; - r3 = r[2]; - r4 = r[3]; - } - } - else { - r1 = r2 = r3 = r4 = 0; - } - - var total; - if (r1 + r2 > width) { - total = r1 + r2; - r1 *= width / total; - r2 *= width / total; - } - if (r3 + r4 > width) { - total = r3 + r4; - r3 *= width / total; - r4 *= width / total; - } - if (r2 + r3 > height) { - total = r2 + r3; - r2 *= height / total; - r3 *= height / total; - } - if (r1 + r4 > height) { - total = r1 + r4; - r1 *= height / total; - r4 *= height / total; - } - ctx.moveTo(x + r1, y); - ctx.lineTo(x + width - r2, y); - r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0); - ctx.lineTo(x + width, y + height - r3); - r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2); - ctx.lineTo(x + r4, y + height); - r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI); - ctx.lineTo(x, y + r1); - r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5); -} - -var DEFAULT_FONT = DEFAULT_FONT$1; - -// TODO: Have not support 'start', 'end' yet. -var VALID_TEXT_ALIGN = {left: 1, right: 1, center: 1}; -var VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1}; -// Different from `STYLE_COMMON_PROPS` of `graphic/Style`, -// the default value of shadowColor is `'transparent'`. -var SHADOW_STYLE_COMMON_PROPS = [ - ['textShadowBlur', 'shadowBlur', 0], - ['textShadowOffsetX', 'shadowOffsetX', 0], - ['textShadowOffsetY', 'shadowOffsetY', 0], - ['textShadowColor', 'shadowColor', 'transparent'] -]; -var _tmpTextPositionResult = {}; -var _tmpBoxPositionResult = {}; - -/** - * @param {module:zrender/graphic/Style} style - * @return {module:zrender/graphic/Style} The input style. - */ -function normalizeTextStyle(style) { - normalizeStyle(style); - each(style.rich, normalizeStyle); - return style; -} - -function normalizeStyle(style) { - if (style) { - - style.font = makeFont(style); - - var textAlign = style.textAlign; - textAlign === 'middle' && (textAlign = 'center'); - style.textAlign = ( - textAlign == null || VALID_TEXT_ALIGN[textAlign] - ) ? textAlign : 'left'; - - // Compatible with textBaseline. - var textVerticalAlign = style.textVerticalAlign || style.textBaseline; - textVerticalAlign === 'center' && (textVerticalAlign = 'middle'); - style.textVerticalAlign = ( - textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign] - ) ? textVerticalAlign : 'top'; - - var textPadding = style.textPadding; - if (textPadding) { - style.textPadding = normalizeCssArray(style.textPadding); - } - } -} - -/** - * @param {CanvasRenderingContext2D} ctx - * @param {string} text - * @param {module:zrender/graphic/Style} style - * @param {Object|boolean} [rect] {x, y, width, height} - * If set false, rect text is not used. - * @param {Element|module:zrender/graphic/helper/constant.WILL_BE_RESTORED} [prevEl] For ctx prop cache. - */ -function renderText(hostEl, ctx, text, style, rect, prevEl) { - style.rich - ? renderRichText(hostEl, ctx, text, style, rect, prevEl) - : renderPlainText(hostEl, ctx, text, style, rect, prevEl); -} - -// Avoid setting to ctx according to prevEl if possible for -// performance in scenarios of large amount text. -function renderPlainText(hostEl, ctx, text, style, rect, prevEl) { - 'use strict'; - - var needDrawBg = needDrawBackground(style); - - var prevStyle; - var checkCache = false; - var cachedByMe = ctx.__attrCachedBy === ContextCachedBy.PLAIN_TEXT; - - // Only take and check cache for `Text` el, but not RectText. - if (prevEl !== WILL_BE_RESTORED) { - if (prevEl) { - prevStyle = prevEl.style; - checkCache = !needDrawBg && cachedByMe && prevStyle; - } - - // Prevent from using cache in `Style::bind`, because of the case: - // ctx property is modified by other properties than `Style::bind` - // used, and Style::bind is called next. - ctx.__attrCachedBy = needDrawBg ? ContextCachedBy.NONE : ContextCachedBy.PLAIN_TEXT; - } - // Since this will be restored, prevent from using these props to check cache in the next - // entering of this method. But do not need to clear other cache like `Style::bind`. - else if (cachedByMe) { - ctx.__attrCachedBy = ContextCachedBy.NONE; - } - - var styleFont = style.font || DEFAULT_FONT; - // PENDING - // Only `Text` el set `font` and keep it (`RectText` will restore). So theoretically - // we can make font cache on ctx, which can cache for text el that are discontinuous. - // But layer save/restore needed to be considered. - // if (styleFont !== ctx.__fontCache) { - // ctx.font = styleFont; - // if (prevEl !== WILL_BE_RESTORED) { - // ctx.__fontCache = styleFont; - // } - // } - if (!checkCache || styleFont !== (prevStyle.font || DEFAULT_FONT)) { - ctx.font = styleFont; - } - - // Use the final font from context-2d, because the final - // font might not be the style.font when it is illegal. - // But get `ctx.font` might be time consuming. - var computedFont = hostEl.__computedFont; - if (hostEl.__styleFont !== styleFont) { - hostEl.__styleFont = styleFont; - computedFont = hostEl.__computedFont = ctx.font; - } - - var textPadding = style.textPadding; - var textLineHeight = style.textLineHeight; - - var contentBlock = hostEl.__textCotentBlock; - if (!contentBlock || hostEl.__dirtyText) { - contentBlock = hostEl.__textCotentBlock = parsePlainText( - text, computedFont, textPadding, textLineHeight, style.truncate - ); - } - - var outerHeight = contentBlock.outerHeight; - - var textLines = contentBlock.lines; - var lineHeight = contentBlock.lineHeight; - - var boxPos = getBoxPosition(_tmpBoxPositionResult, hostEl, style, rect); - var baseX = boxPos.baseX; - var baseY = boxPos.baseY; - var textAlign = boxPos.textAlign || 'left'; - var textVerticalAlign = boxPos.textVerticalAlign; - - // Origin of textRotation should be the base point of text drawing. - applyTextRotation(ctx, style, rect, baseX, baseY); - - var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign); - var textX = baseX; - var textY = boxY; - - if (needDrawBg || textPadding) { - // Consider performance, do not call getTextWidth util necessary. - var textWidth = getWidth(text, computedFont); - var outerWidth = textWidth; - textPadding && (outerWidth += textPadding[1] + textPadding[3]); - var boxX = adjustTextX(baseX, outerWidth, textAlign); - - needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight); - - if (textPadding) { - textX = getTextXForPadding(baseX, textAlign, textPadding); - textY += textPadding[0]; - } - } - - // Always set textAlign and textBase line, because it is difficute to calculate - // textAlign from prevEl, and we dont sure whether textAlign will be reset if - // font set happened. - ctx.textAlign = textAlign; - // Force baseline to be "middle". Otherwise, if using "top", the - // text will offset downward a little bit in font "Microsoft YaHei". - ctx.textBaseline = 'middle'; - // Set text opacity - ctx.globalAlpha = style.opacity || 1; - - // Always set shadowBlur and shadowOffset to avoid leak from displayable. - for (var i = 0; i < SHADOW_STYLE_COMMON_PROPS.length; i++) { - var propItem = SHADOW_STYLE_COMMON_PROPS[i]; - var styleProp = propItem[0]; - var ctxProp = propItem[1]; - var val = style[styleProp]; - if (!checkCache || val !== prevStyle[styleProp]) { - ctx[ctxProp] = fixShadow(ctx, ctxProp, val || propItem[2]); - } - } - - // `textBaseline` is set as 'middle'. - textY += lineHeight / 2; - - var textStrokeWidth = style.textStrokeWidth; - var textStrokeWidthPrev = checkCache ? prevStyle.textStrokeWidth : null; - var strokeWidthChanged = !checkCache || textStrokeWidth !== textStrokeWidthPrev; - var strokeChanged = !checkCache || strokeWidthChanged || style.textStroke !== prevStyle.textStroke; - var textStroke = getStroke(style.textStroke, textStrokeWidth); - var textFill = getFill(style.textFill); - - if (textStroke) { - if (strokeWidthChanged) { - ctx.lineWidth = textStrokeWidth; - } - if (strokeChanged) { - ctx.strokeStyle = textStroke; - } - } - if (textFill) { - if (!checkCache || style.textFill !== prevStyle.textFill) { - ctx.fillStyle = textFill; - } - } - - // Optimize simply, in most cases only one line exists. - if (textLines.length === 1) { - // Fill after stroke so the outline will not cover the main part. - textStroke && ctx.strokeText(textLines[0], textX, textY); - textFill && ctx.fillText(textLines[0], textX, textY); - } - else { - for (var i = 0; i < textLines.length; i++) { - // Fill after stroke so the outline will not cover the main part. - textStroke && ctx.strokeText(textLines[i], textX, textY); - textFill && ctx.fillText(textLines[i], textX, textY); - textY += lineHeight; - } - } -} - -function renderRichText(hostEl, ctx, text, style, rect, prevEl) { - // Do not do cache for rich text because of the complexity. - // But `RectText` this will be restored, do not need to clear other cache like `Style::bind`. - if (prevEl !== WILL_BE_RESTORED) { - ctx.__attrCachedBy = ContextCachedBy.NONE; - } - - var contentBlock = hostEl.__textCotentBlock; - - if (!contentBlock || hostEl.__dirtyText) { - contentBlock = hostEl.__textCotentBlock = parseRichText(text, style); - } - - drawRichText(hostEl, ctx, contentBlock, style, rect); -} - -function drawRichText(hostEl, ctx, contentBlock, style, rect) { - var contentWidth = contentBlock.width; - var outerWidth = contentBlock.outerWidth; - var outerHeight = contentBlock.outerHeight; - var textPadding = style.textPadding; - - var boxPos = getBoxPosition(_tmpBoxPositionResult, hostEl, style, rect); - var baseX = boxPos.baseX; - var baseY = boxPos.baseY; - var textAlign = boxPos.textAlign; - var textVerticalAlign = boxPos.textVerticalAlign; - - // Origin of textRotation should be the base point of text drawing. - applyTextRotation(ctx, style, rect, baseX, baseY); - - var boxX = adjustTextX(baseX, outerWidth, textAlign); - var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign); - var xLeft = boxX; - var lineTop = boxY; - if (textPadding) { - xLeft += textPadding[3]; - lineTop += textPadding[0]; - } - var xRight = xLeft + contentWidth; - - needDrawBackground(style) && drawBackground( - hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight - ); - - 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 usedWidth = line.width; - - var leftIndex = 0; - var lineXLeft = xLeft; - var lineXRight = xRight; - var rightIndex = tokenCount - 1; - var token; - - while ( - leftIndex < tokenCount - && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left') - ) { - placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left'); - usedWidth -= token.width; - lineXLeft += token.width; - leftIndex++; - } - - while ( - rightIndex >= 0 - && (token = tokens[rightIndex], token.textAlign === 'right') - ) { - placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right'); - usedWidth -= token.width; - lineXRight -= token.width; - rightIndex--; - } - - // The other tokens are placed as textAlign 'center' if there is enough space. - lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2; - while (leftIndex <= rightIndex) { - token = tokens[leftIndex]; - // Consider width specified by user, use 'center' rather than 'left'. - placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center'); - lineXLeft += token.width; - leftIndex++; - } - - lineTop += lineHeight; - } -} - -function applyTextRotation(ctx, style, rect, x, y) { - // textRotation only apply in RectText. - if (rect && style.textRotation) { - var origin = style.textOrigin; - if (origin === 'center') { - x = rect.width / 2 + rect.x; - y = rect.height / 2 + rect.y; - } - else if (origin) { - x = origin[0] + rect.x; - y = origin[1] + rect.y; - } - - ctx.translate(x, y); - // Positive: anticlockwise - ctx.rotate(-style.textRotation); - ctx.translate(-x, -y); - } -} - -function placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) { - var tokenStyle = style.rich[token.styleName] || {}; - tokenStyle.text = token.text; - - // 'ctx.textBaseline' is always set as 'middle', for sake of - // the bias of "Microsoft YaHei". - var textVerticalAlign = token.textVerticalAlign; - var y = lineTop + lineHeight / 2; - if (textVerticalAlign === 'top') { - y = lineTop + token.height / 2; - } - else if (textVerticalAlign === 'bottom') { - y = lineTop + lineHeight - token.height / 2; - } - - !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 - ); - - var textPadding = token.textPadding; - if (textPadding) { - x = getTextXForPadding(x, textAlign, textPadding); - y -= token.height / 2 - textPadding[2] - token.textHeight / 2; - } - - setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0)); - setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent'); - setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0)); - setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0)); - - setCtx(ctx, 'textAlign', textAlign); - // Force baseline to be "middle". Otherwise, if using "top", the - // text will offset downward a little bit in font "Microsoft YaHei". - setCtx(ctx, 'textBaseline', 'middle'); - - setCtx(ctx, 'font', token.font || DEFAULT_FONT); - - var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth); - var textFill = getFill(tokenStyle.textFill || style.textFill); - var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth); - - // Fill after stroke so the outline will not cover the main part. - if (textStroke) { - setCtx(ctx, 'lineWidth', textStrokeWidth); - setCtx(ctx, 'strokeStyle', textStroke); - ctx.strokeText(token.text, x, y); - } - if (textFill) { - setCtx(ctx, 'fillStyle', textFill); - ctx.fillText(token.text, x, y); - } -} - -function needDrawBackground(style) { - return !!( - style.textBackgroundColor - || (style.textBorderWidth && style.textBorderColor) - ); -} - -// style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius, text} -// shape: {x, y, width, height} -function drawBackground(hostEl, ctx, style, x, y, width, height) { - var textBackgroundColor = style.textBackgroundColor; - var textBorderWidth = style.textBorderWidth; - var textBorderColor = style.textBorderColor; - var isPlainBg = isString(textBackgroundColor); - - setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0); - setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent'); - setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0); - setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0); - - if (isPlainBg || (textBorderWidth && textBorderColor)) { - ctx.beginPath(); - var textBorderRadius = style.textBorderRadius; - if (!textBorderRadius) { - ctx.rect(x, y, width, height); - } - else { - buildPath(ctx, { - x: x, y: y, width: width, height: height, r: textBorderRadius - }); - } - ctx.closePath(); - } - - if (isPlainBg) { - setCtx(ctx, 'fillStyle', textBackgroundColor); - - if (style.fillOpacity != null) { - var originalGlobalAlpha = ctx.globalAlpha; - ctx.globalAlpha = style.fillOpacity * style.opacity; - ctx.fill(); - ctx.globalAlpha = originalGlobalAlpha; - } - else { - ctx.fill(); - } - } - else if (isObject(textBackgroundColor)) { - var image = textBackgroundColor.image; - - image = createOrUpdateImage( - image, null, hostEl, onBgImageLoaded, textBackgroundColor - ); - if (image && isImageReady(image)) { - ctx.drawImage(image, x, y, width, height); - } - } - - if (textBorderWidth && textBorderColor) { - setCtx(ctx, 'lineWidth', textBorderWidth); - setCtx(ctx, 'strokeStyle', textBorderColor); - - if (style.strokeOpacity != null) { - var originalGlobalAlpha = ctx.globalAlpha; - ctx.globalAlpha = style.strokeOpacity * style.opacity; - ctx.stroke(); - ctx.globalAlpha = originalGlobalAlpha; - } - else { - ctx.stroke(); - } - } -} - -function onBgImageLoaded(image, textBackgroundColor) { - // Replace image, so that `contain/text.js#parseRichText` - // will get correct result in next tick. - textBackgroundColor.image = image; -} - -function getBoxPosition(out, hostEl, style, rect) { - var baseX = style.x || 0; - var baseY = style.y || 0; - var textAlign = style.textAlign; - var textVerticalAlign = style.textVerticalAlign; - - // Text position represented by coord - if (rect) { - var textPosition = style.textPosition; - if (textPosition instanceof Array) { - // Percent - baseX = rect.x + parsePercent(textPosition[0], rect.width); - baseY = rect.y + parsePercent(textPosition[1], rect.height); - } - else { - var res = (hostEl && hostEl.calculateTextPosition) - ? hostEl.calculateTextPosition(_tmpTextPositionResult, style, rect) - : calculateTextPosition(_tmpTextPositionResult, style, rect); - baseX = res.x; - baseY = res.y; - // Default align and baseline when has textPosition - textAlign = textAlign || res.textAlign; - textVerticalAlign = textVerticalAlign || res.textVerticalAlign; - } - - // textOffset is only support in RectText, otherwise - // we have to adjust boundingRect for textOffset. - var textOffset = style.textOffset; - if (textOffset) { - baseX += textOffset[0]; - baseY += textOffset[1]; - } - } - - out = out || {}; - out.baseX = baseX; - out.baseY = baseY; - out.textAlign = textAlign; - out.textVerticalAlign = textVerticalAlign; - - return out; -} - - -function setCtx(ctx, prop, value) { - ctx[prop] = fixShadow(ctx, prop, value); - return ctx[prop]; -} - -/** - * @param {string} [stroke] If specified, do not check style.textStroke. - * @param {string} [lineWidth] If specified, do not check style.textStroke. - * @param {number} style - */ -function getStroke(stroke, lineWidth) { - return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none') - ? null - // TODO pattern and gradient? - : (stroke.image || stroke.colorStops) - ? '#000' - : stroke; -} - -function getFill(fill) { - return (fill == null || fill === 'none') - ? null - // TODO pattern and gradient? - : (fill.image || fill.colorStops) - ? '#000' - : fill; -} - -function parsePercent(value, maxValue) { - if (typeof value === 'string') { - if (value.lastIndexOf('%') >= 0) { - return parseFloat(value) / 100 * maxValue; - } - return parseFloat(value); - } - return value; -} - -function getTextXForPadding(x, textAlign, textPadding) { - return textAlign === 'right' - ? (x - textPadding[1]) - : textAlign === 'center' - ? (x + textPadding[3] / 2 - textPadding[1] / 2) - : (x + textPadding[3]); -} - -/** - * @param {string} text - * @param {module:zrender/Style} style - * @return {boolean} - */ -function needDrawText(text, style) { - return text != null - && (text - || style.textBackgroundColor - || (style.textBorderWidth && style.textBorderColor) - || style.textPadding - ); -} - -/** - * Mixin for drawing text in a element bounding rect - * @module zrender/mixin/RectText - */ - -var tmpRect$1 = new BoundingRect(); - -var RectText = function () {}; - -RectText.prototype = { - - constructor: RectText, - - /** - * Draw text in a rect with specified position. - * @param {CanvasRenderingContext2D} ctx - * @param {Object} rect Displayable rect - */ - drawRectText: function (ctx, rect) { - var style = this.style; - - rect = style.textRect || rect; - - // Optimize, avoid normalize every time. - this.__dirty && normalizeTextStyle(style, true); - - var text = style.text; - - // Convert to string - text != null && (text += ''); - - if (!needDrawText(text, style)) { - return; - } - - // FIXME - // Do not provide prevEl to `textHelper.renderText` for ctx prop cache, - // but use `ctx.save()` and `ctx.restore()`. Because the cache for rect - // text propably break the cache for its host elements. - ctx.save(); - - // Transform rect to view space - var transform = this.transform; - if (!style.transformText) { - if (transform) { - tmpRect$1.copy(rect); - tmpRect$1.applyTransform(transform); - rect = tmpRect$1; - } - } - else { - this.setTransform(ctx); - } - - // transformText and textRotation can not be used at the same time. - renderText(this, ctx, text, style, rect, WILL_BE_RESTORED); - - ctx.restore(); - } -}; - -/** - * Base class of all displayable graphic objects - * @module zrender/graphic/Displayable - */ - - -/** - * @alias module:zrender/graphic/Displayable - * @extends module:zrender/Element - * @extends module:zrender/graphic/mixin/RectText - */ -function Displayable(opts) { - - opts = opts || {}; - - Element.call(this, opts); - - // Extend properties - for (var name in opts) { - if ( - opts.hasOwnProperty(name) - && name !== 'style' - ) { - this[name] = opts[name]; - } - } - - /** - * @type {module:zrender/graphic/Style} - */ - this.style = new Style(opts.style, this); - - this._rect = null; - // Shapes for cascade clipping. - // Can only be `null`/`undefined` or an non-empty array, MUST NOT be an empty array. - // because it is easy to only using null to check whether clipPaths changed. - this.__clipPaths = null; - - // FIXME Stateful must be mixined after style is setted - // Stateful.call(this, opts); -} - -Displayable.prototype = { - - constructor: Displayable, - - type: 'displayable', - - /** - * Dirty flag. From which painter will determine if this displayable object needs brush. - * @name module:zrender/graphic/Displayable#__dirty - * @type {boolean} - */ - __dirty: true, - - /** - * Whether the displayable object is visible. when it is true, the displayable object - * is not drawn, but the mouse event can still trigger the object. - * @name module:/zrender/graphic/Displayable#invisible - * @type {boolean} - * @default false - */ - invisible: false, - - /** - * @name module:/zrender/graphic/Displayable#z - * @type {number} - * @default 0 - */ - z: 0, - - /** - * @name module:/zrender/graphic/Displayable#z - * @type {number} - * @default 0 - */ - z2: 0, - - /** - * The z level determines the displayable object can be drawn in which layer canvas. - * @name module:/zrender/graphic/Displayable#zlevel - * @type {number} - * @default 0 - */ - zlevel: 0, - - /** - * Whether it can be dragged. - * @name module:/zrender/graphic/Displayable#draggable - * @type {boolean} - * @default false - */ - draggable: false, - - /** - * Whether is it dragging. - * @name module:/zrender/graphic/Displayable#draggable - * @type {boolean} - * @default false - */ - dragging: false, - - /** - * Whether to respond to mouse events. - * @name module:/zrender/graphic/Displayable#silent - * @type {boolean} - * @default false - */ - silent: false, - - /** - * If enable culling - * @type {boolean} - * @default false - */ - culling: false, - - /** - * Mouse cursor when hovered - * @name module:/zrender/graphic/Displayable#cursor - * @type {string} - */ - cursor: 'pointer', - - /** - * If hover area is bounding rect - * @name module:/zrender/graphic/Displayable#rectHover - * @type {string} - */ - rectHover: false, - - /** - * Render the element progressively when the value >= 0, - * usefull for large data. - * @type {boolean} - */ - progressive: false, - - /** - * @type {boolean} - */ - incremental: false, - /** - * Scale ratio for global scale. - * @type {boolean} - */ - globalScaleRatio: 1, - - beforeBrush: function (ctx) {}, - - afterBrush: function (ctx) {}, - - /** - * Graphic drawing method. - * @param {CanvasRenderingContext2D} ctx - */ - // Interface - brush: function (ctx, prevEl) {}, - - /** - * Get the minimum bounding box. - * @return {module:zrender/core/BoundingRect} - */ - // Interface - getBoundingRect: function () {}, - - /** - * If displayable element contain coord x, y - * @param {number} x - * @param {number} y - * @return {boolean} - */ - contain: function (x, y) { - return this.rectContain(x, y); - }, - - /** - * @param {Function} cb - * @param {} context - */ - traverse: function (cb, context) { - cb.call(context, this); - }, - - /** - * If bounding rect of element contain coord x, y - * @param {number} x - * @param {number} y - * @return {boolean} - */ - rectContain: function (x, y) { - var coord = this.transformCoordToLocal(x, y); - var rect = this.getBoundingRect(); - return rect.contain(coord[0], coord[1]); - }, - - /** - * Mark displayable element dirty and refresh next frame - */ - dirty: function () { - this.__dirty = this.__dirtyText = true; - - this._rect = null; - - this.__zr && this.__zr.refresh(); - }, - - /** - * If displayable object binded any event - * @return {boolean} - */ - // TODO, events bound by bind - // isSilent: function () { - // return !( - // this.hoverable || this.draggable - // || this.onmousemove || this.onmouseover || this.onmouseout - // || this.onmousedown || this.onmouseup || this.onclick - // || this.ondragenter || this.ondragover || this.ondragleave - // || this.ondrop - // ); - // }, - /** - * Alias for animate('style') - * @param {boolean} loop - */ - animateStyle: function (loop) { - return this.animate('style', loop); - }, - - attrKV: function (key, value) { - if (key !== 'style') { - Element.prototype.attrKV.call(this, key, value); - } - else { - this.style.set(value); - } - }, - - /** - * @param {Object|string} key - * @param {*} value - */ - setStyle: function (key, value) { - this.style.set(key, value); - this.dirty(false); - return this; - }, - - /** - * Use given style object - * @param {Object} obj - */ - useStyle: function (obj) { - this.style = new Style(obj, this); - this.dirty(false); - return this; - }, - - /** - * The string value of `textPosition` needs to be calculated to a real postion. - * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]` - * by default. See `contain/text.js#calculateTextPosition` for more details. - * But some coutom shapes like "pin", "flag" have center that is not exactly - * `[width/2, height/2]`. So we provide this hook to customize the calculation - * for those shapes. It will be called if the `style.textPosition` is a string. - * @param {Obejct} [out] Prepared out object. If not provided, this method should - * be responsible for creating one. - * @param {module:zrender/graphic/Style} style - * @param {Object} rect {x, y, width, height} - * @return {Obejct} out The same as the input out. - * { - * x: number. mandatory. - * y: number. mandatory. - * textAlign: string. optional. use style.textAlign by default. - * textVerticalAlign: string. optional. use style.textVerticalAlign by default. - * } - */ - calculateTextPosition: null -}; - -inherits(Displayable, Element); - -mixin(Displayable, RectText); - -/** - * @alias zrender/graphic/Image - * @extends module:zrender/graphic/Displayable - * @constructor - * @param {Object} opts - */ -function ZImage(opts) { - Displayable.call(this, opts); -} - -ZImage.prototype = { - - constructor: ZImage, - - type: 'image', - - brush: function (ctx, prevEl) { - var style = this.style; - var src = style.image; - - // Must bind each time - style.bind(ctx, this, prevEl); - - var image = this._image = createOrUpdateImage( - src, - this._image, - this, - this.onload - ); - - if (!image || !isImageReady(image)) { - return; - } - - // 图片已经加载完成 - // if (image.nodeName.toUpperCase() == 'IMG') { - // if (!image.complete) { - // return; - // } - // } - // Else is canvas - - var x = style.x || 0; - var y = style.y || 0; - var width = style.width; - var height = style.height; - var aspect = image.width / image.height; - if (width == null && height != null) { - // Keep image/height ratio - width = height * aspect; - } - else if (height == null && width != null) { - height = width / aspect; - } - else if (width == null && height == null) { - width = image.width; - height = image.height; - } - - // 设置transform - this.setTransform(ctx); - - if (style.sWidth && style.sHeight) { - var sx = style.sx || 0; - var sy = style.sy || 0; - ctx.drawImage( - image, - sx, sy, style.sWidth, style.sHeight, - x, y, width, height - ); - } - else if (style.sx && style.sy) { - var sx = style.sx; - var sy = style.sy; - var sWidth = width - sx; - var sHeight = height - sy; - ctx.drawImage( - image, - sx, sy, sWidth, sHeight, - x, y, width, height - ); - } - else { - ctx.drawImage(image, x, y, width, height); - } - - // Draw rect text - if (style.text != null) { - // Only restore transform when needs draw text. - this.restoreTransform(ctx); - this.drawRectText(ctx, this.getBoundingRect()); - } - }, - - getBoundingRect: function () { - var style = this.style; - if (!this._rect) { - this._rect = new BoundingRect( - style.x || 0, style.y || 0, style.width || 0, style.height || 0 - ); - } - return this._rect; - } -}; - -inherits(ZImage, Displayable); - -var HOVER_LAYER_ZLEVEL = 1e5; -var CANVAS_ZLEVEL = 314159; - -var EL_AFTER_INCREMENTAL_INC = 0.01; -var INCREMENTAL_INC = 0.001; - -function parseInt10(val) { - return parseInt(val, 10); -} - -function isLayerValid(layer) { - if (!layer) { - return false; - } - - if (layer.__builtin__) { - return true; - } - - if (typeof (layer.resize) !== 'function' - || typeof (layer.refresh) !== 'function' - ) { - return false; - } - - return true; -} - -var tmpRect = new BoundingRect(0, 0, 0, 0); -var viewRect = new BoundingRect(0, 0, 0, 0); -function isDisplayableCulled(el, width, height) { - tmpRect.copy(el.getBoundingRect()); - if (el.transform) { - tmpRect.applyTransform(el.transform); - } - viewRect.width = width; - viewRect.height = height; - return !tmpRect.intersect(viewRect); -} - -function isClipPathChanged(clipPaths, prevClipPaths) { - // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array. - if (clipPaths === prevClipPaths) { - return false; - } - if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) { - return true; - } - for (var i = 0; i < clipPaths.length; i++) { - if (clipPaths[i] !== prevClipPaths[i]) { - return true; - } - } - return false; -} - -function doClip(clipPaths, ctx) { - for (var i = 0; i < clipPaths.length; i++) { - var clipPath = clipPaths[i]; - - clipPath.setTransform(ctx); - ctx.beginPath(); - clipPath.buildPath(ctx, clipPath.shape); - ctx.clip(); - // Transform back - clipPath.restoreTransform(ctx); - } -} - -function createRoot(width, height) { - var domRoot = document.createElement('div'); - - // domRoot.onselectstart = returnFalse; // Avoid page selected - domRoot.style.cssText = [ - 'position:relative', - // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent - // dom does not act as expected) when some of the parent dom has - // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and - // the canvas is not at the top part of the page. - // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove - // this `overflow:hidden` to avoid the bug. - // 'overflow:hidden', - 'width:' + width + 'px', - 'height:' + height + 'px', - 'padding:0', - 'margin:0', - 'border-width:0' - ].join(';') + ';'; - - return domRoot; -} - - -/** - * @alias module:zrender/Painter - * @constructor - * @param {HTMLElement} root 绘图容器 - * @param {module:zrender/Storage} storage - * @param {Object} opts - */ -var Painter = function (root, storage, opts) { - - this.type = 'canvas'; - - // In node environment using node-canvas - var singleCanvas = !root.nodeName // In node ? - || root.nodeName.toUpperCase() === 'CANVAS'; - - this._opts = opts = extend({}, opts || {}); - - /** - * @type {number} - */ - this.dpr = opts.devicePixelRatio || devicePixelRatio; - /** - * @type {boolean} - * @private - */ - this._singleCanvas = singleCanvas; - /** - * 绘图容器 - * @type {HTMLElement} - */ - this.root = root; - - var rootStyle = root.style; - - if (rootStyle) { - rootStyle['-webkit-tap-highlight-color'] = 'transparent'; - rootStyle['-webkit-user-select'] = - rootStyle['user-select'] = - rootStyle['-webkit-touch-callout'] = 'none'; - - root.innerHTML = ''; - } - - /** - * @type {module:zrender/Storage} - */ - this.storage = storage; - - /** - * @type {Array.} - * @private - */ - var zlevelList = this._zlevelList = []; - - /** - * @type {Object.} - * @private - */ - var layers = this._layers = {}; - - /** - * @type {Object.} - * @private - */ - this._layerConfig = {}; - - /** - * zrender will do compositing when root is a canvas and have multiple zlevels. - */ - this._needsManuallyCompositing = false; - - if (!singleCanvas) { - this._width = this._getSize(0); - this._height = this._getSize(1); - - var domRoot = this._domRoot = createRoot( - this._width, this._height - ); - root.appendChild(domRoot); - } - else { - var width = root.width; - var height = root.height; - - if (opts.width != null) { - width = opts.width; - } - if (opts.height != null) { - height = opts.height; - } - this.dpr = opts.devicePixelRatio || 1; - - // Use canvas width and height directly - root.width = width * this.dpr; - root.height = height * this.dpr; - - this._width = width; - this._height = height; - - // Create layer if only one given canvas - // Device can be specified to create a high dpi image. - var mainLayer = new Layer(root, this, this.dpr); - mainLayer.__builtin__ = true; - mainLayer.initContext(); - // FIXME Use canvas width and height - // mainLayer.resize(width, height); - layers[CANVAS_ZLEVEL] = mainLayer; - mainLayer.zlevel = CANVAS_ZLEVEL; - // Not use common zlevel. - zlevelList.push(CANVAS_ZLEVEL); - - this._domRoot = root; - } - - /** - * @type {module:zrender/Layer} - * @private - */ - this._hoverlayer = null; - - this._hoverElements = []; -}; - -Painter.prototype = { - - constructor: Painter, - - getType: function () { - return 'canvas'; - }, - - /** - * If painter use a single canvas - * @return {boolean} - */ - isSingleCanvas: function () { - return this._singleCanvas; - }, - /** - * @return {HTMLDivElement} - */ - getViewportRoot: function () { - return this._domRoot; - }, - - getViewportRootOffset: function () { - var viewportRoot = this.getViewportRoot(); - if (viewportRoot) { - return { - offsetLeft: viewportRoot.offsetLeft || 0, - offsetTop: viewportRoot.offsetTop || 0 - }; - } - }, - - /** - * 刷新 - * @param {boolean} [paintAll=false] 强制绘制所有displayable - */ - refresh: function (paintAll) { - - var list = this.storage.getDisplayList(true); - - var zlevelList = this._zlevelList; - - this._redrawId = Math.random(); - - this._paintList(list, paintAll, this._redrawId); - - // Paint custum layers - for (var i = 0; i < zlevelList.length; i++) { - var z = zlevelList[i]; - var layer = this._layers[z]; - if (!layer.__builtin__ && layer.refresh) { - var clearColor = i === 0 ? this._backgroundColor : null; - layer.refresh(clearColor); - } - } - - this.refreshHover(); - - return this; - }, - - addHover: function (el, hoverStyle) { - if (el.__hoverMir) { - return; - } - var elMirror = new el.constructor({ - style: el.style, - shape: el.shape, - z: el.z, - z2: el.z2, - silent: el.silent - }); - elMirror.__from = el; - el.__hoverMir = elMirror; - hoverStyle && elMirror.setStyle(hoverStyle); - this._hoverElements.push(elMirror); - - return elMirror; - }, - - removeHover: function (el) { - var elMirror = el.__hoverMir; - var hoverElements = this._hoverElements; - var idx = indexOf(hoverElements, elMirror); - if (idx >= 0) { - hoverElements.splice(idx, 1); - } - el.__hoverMir = null; - }, - - clearHover: function (el) { - var hoverElements = this._hoverElements; - for (var i = 0; i < hoverElements.length; i++) { - var from = hoverElements[i].__from; - if (from) { - from.__hoverMir = null; - } - } - hoverElements.length = 0; - }, - - refreshHover: function () { - var hoverElements = this._hoverElements; - var len = hoverElements.length; - var hoverLayer = this._hoverlayer; - hoverLayer && hoverLayer.clear(); - - if (!len) { - return; - } - sort(hoverElements, this.storage.displayableSortFunc); - - // Use a extream large zlevel - // FIXME? - if (!hoverLayer) { - hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL); - } - - var scope = {}; - hoverLayer.ctx.save(); - for (var i = 0; i < len;) { - var el = hoverElements[i]; - var originalEl = el.__from; - // Original el is removed - // PENDING - if (!(originalEl && originalEl.__zr)) { - hoverElements.splice(i, 1); - originalEl.__hoverMir = null; - len--; - continue; - } - i++; - - // Use transform - // FIXME style and shape ? - if (!originalEl.invisible) { - el.transform = originalEl.transform; - el.invTransform = originalEl.invTransform; - el.__clipPaths = originalEl.__clipPaths; - // el. - this._doPaintEl(el, hoverLayer, true, scope); - } - } - - hoverLayer.ctx.restore(); - }, - - getHoverLayer: function () { - return this.getLayer(HOVER_LAYER_ZLEVEL); - }, - - _paintList: function (list, paintAll, redrawId) { - if (this._redrawId !== redrawId) { - return; - } - - paintAll = paintAll || false; - - this._updateLayerStatus(list); - - var finished = this._doPaintList(list, paintAll); - - if (this._needsManuallyCompositing) { - this._compositeManually(); - } - - if (!finished) { - var self = this; - requestAnimationFrame(function () { - self._paintList(list, paintAll, redrawId); - }); - } - }, - - _compositeManually: function () { - var ctx = this.getLayer(CANVAS_ZLEVEL).ctx; - var width = this._domRoot.width; - var height = this._domRoot.height; - ctx.clearRect(0, 0, width, height); - // PENDING, If only builtin layer? - this.eachBuiltinLayer(function (layer) { - if (layer.virtual) { - ctx.drawImage(layer.dom, 0, 0, width, height); - } - }); - }, - - _doPaintList: function (list, paintAll) { - var layerList = []; - for (var zi = 0; zi < this._zlevelList.length; zi++) { - var zlevel = this._zlevelList[zi]; - var layer = this._layers[zlevel]; - if (layer.__builtin__ - && layer !== this._hoverlayer - && (layer.__dirty || paintAll) - ) { - layerList.push(layer); - } - } - - var finished = true; - - for (var k = 0; k < layerList.length; k++) { - var layer = layerList[k]; - var ctx = layer.ctx; - var scope = {}; - ctx.save(); - - var start = paintAll ? layer.__startIndex : layer.__drawIndex; - - var useTimer = !paintAll && layer.incremental && Date.now; - var startTime = useTimer && Date.now(); - - var clearColor = layer.zlevel === this._zlevelList[0] - ? this._backgroundColor : null; - // All elements in this layer are cleared. - if (layer.__startIndex === layer.__endIndex) { - layer.clear(false, clearColor); - } - else if (start === layer.__startIndex) { - var firstEl = list[start]; - if (!firstEl.incremental || !firstEl.notClear || paintAll) { - layer.clear(false, clearColor); - } - } - if (start === -1) { - console.error('For some unknown reason. drawIndex is -1'); - start = layer.__startIndex; - } - for (var i = start; i < layer.__endIndex; i++) { - var el = list[i]; - this._doPaintEl(el, layer, paintAll, scope); - el.__dirty = el.__dirtyText = false; - - if (useTimer) { - // Date.now can be executed in 13,025,305 ops/second. - var dTime = Date.now() - startTime; - // Give 15 millisecond to draw. - // The rest elements will be drawn in the next frame. - if (dTime > 15) { - break; - } - } - } - - layer.__drawIndex = i; - - if (layer.__drawIndex < layer.__endIndex) { - finished = false; - } - - if (scope.prevElClipPaths) { - // Needs restore the state. If last drawn element is in the clipping area. - ctx.restore(); - } - - ctx.restore(); - } - - if (env$1.wxa) { - // Flush for weixin application - each(this._layers, function (layer) { - if (layer && layer.ctx && layer.ctx.draw) { - layer.ctx.draw(); - } - }); - } - - return finished; - }, - - _doPaintEl: function (el, currentLayer, forcePaint, scope) { - var ctx = currentLayer.ctx; - var m = el.transform; - if ( - (currentLayer.__dirty || forcePaint) - // Ignore invisible element - && !el.invisible - // Ignore transparent element - && el.style.opacity !== 0 - // Ignore scale 0 element, in some environment like node-canvas - // Draw a scale 0 element can cause all following draw wrong - // And setTransform with scale 0 will cause set back transform failed. - && !(m && !m[0] && !m[3]) - // Ignore culled element - && !(el.culling && isDisplayableCulled(el, this._width, this._height)) - ) { - - var clipPaths = el.__clipPaths; - var prevElClipPaths = scope.prevElClipPaths; - - // Optimize when clipping on group with several elements - if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) { - // If has previous clipping state, restore from it - if (prevElClipPaths) { - ctx.restore(); - scope.prevElClipPaths = null; - // Reset prevEl since context has been restored - scope.prevEl = null; - } - // New clipping state - if (clipPaths) { - ctx.save(); - doClip(clipPaths, ctx); - scope.prevElClipPaths = clipPaths; - } - } - el.beforeBrush && el.beforeBrush(ctx); - - el.brush(ctx, scope.prevEl || null); - scope.prevEl = el; - - el.afterBrush && el.afterBrush(ctx); - } - }, - - /** - * 获取 zlevel 所在层,如果不存在则会创建一个新的层 - * @param {number} zlevel - * @param {boolean} virtual Virtual layer will not be inserted into dom. - * @return {module:zrender/Layer} - */ - getLayer: function (zlevel, virtual) { - if (this._singleCanvas && !this._needsManuallyCompositing) { - zlevel = CANVAS_ZLEVEL; - } - var layer = this._layers[zlevel]; - if (!layer) { - // Create a new layer - layer = new Layer('zr_' + zlevel, this, this.dpr); - layer.zlevel = zlevel; - layer.__builtin__ = true; - - if (this._layerConfig[zlevel]) { - merge(layer, this._layerConfig[zlevel], true); - } - - if (virtual) { - layer.virtual = virtual; - } - - this.insertLayer(zlevel, layer); - - // Context is created after dom inserted to document - // Or excanvas will get 0px clientWidth and clientHeight - layer.initContext(); - } - - return layer; - }, - - insertLayer: function (zlevel, layer) { - - var layersMap = this._layers; - var zlevelList = this._zlevelList; - var len = zlevelList.length; - var prevLayer = null; - var i = -1; - var domRoot = this._domRoot; - - if (layersMap[zlevel]) { - logError$1('ZLevel ' + zlevel + ' has been used already'); - return; - } - // Check if is a valid layer - if (!isLayerValid(layer)) { - logError$1('Layer of zlevel ' + zlevel + ' is not valid'); - return; - } - - if (len > 0 && zlevel > zlevelList[0]) { - for (i = 0; i < len - 1; i++) { - if ( - zlevelList[i] < zlevel - && zlevelList[i + 1] > zlevel - ) { - break; - } - } - prevLayer = layersMap[zlevelList[i]]; - } - zlevelList.splice(i + 1, 0, zlevel); - - layersMap[zlevel] = layer; - - // Vitual layer will not directly show on the screen. - // (It can be a WebGL layer and assigned to a ZImage element) - // But it still under management of zrender. - if (!layer.virtual) { - if (prevLayer) { - var prevDom = prevLayer.dom; - if (prevDom.nextSibling) { - domRoot.insertBefore( - layer.dom, - prevDom.nextSibling - ); - } - else { - domRoot.appendChild(layer.dom); - } - } - else { - if (domRoot.firstChild) { - domRoot.insertBefore(layer.dom, domRoot.firstChild); - } - else { - domRoot.appendChild(layer.dom); - } - } - } - }, - - // Iterate each layer - eachLayer: function (cb, context) { - var zlevelList = this._zlevelList; - var z; - var i; - for (i = 0; i < zlevelList.length; i++) { - z = zlevelList[i]; - cb.call(context, this._layers[z], z); - } - }, - - // Iterate each buildin layer - eachBuiltinLayer: function (cb, context) { - var zlevelList = this._zlevelList; - var layer; - var z; - var i; - for (i = 0; i < zlevelList.length; i++) { - z = zlevelList[i]; - layer = this._layers[z]; - if (layer.__builtin__) { - cb.call(context, layer, z); - } - } - }, - - // Iterate each other layer except buildin layer - eachOtherLayer: function (cb, context) { - var zlevelList = this._zlevelList; - var layer; - var z; - var i; - for (i = 0; i < zlevelList.length; i++) { - z = zlevelList[i]; - layer = this._layers[z]; - if (!layer.__builtin__) { - cb.call(context, layer, z); - } - } - }, - - /** - * 获取所有已创建的层 - * @param {Array.} [prevLayer] - */ - getLayers: function () { - return this._layers; - }, - - _updateLayerStatus: function (list) { - - this.eachBuiltinLayer(function (layer, z) { - layer.__dirty = layer.__used = false; - }); - - function updatePrevLayer(idx) { - if (prevLayer) { - if (prevLayer.__endIndex !== idx) { - prevLayer.__dirty = true; - } - prevLayer.__endIndex = idx; - } - } - - if (this._singleCanvas) { - for (var i = 1; i < list.length; i++) { - var el = list[i]; - if (el.zlevel !== list[i - 1].zlevel || el.incremental) { - this._needsManuallyCompositing = true; - break; - } - } - } - - var prevLayer = null; - var incrementalLayerCount = 0; - for (var i = 0; i < list.length; i++) { - var el = list[i]; - var zlevel = el.zlevel; - var layer; - // PENDING If change one incremental element style ? - // TODO Where there are non-incremental elements between incremental elements. - if (el.incremental) { - layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing); - layer.incremental = true; - incrementalLayerCount = 1; - } - else { - layer = this.getLayer( - zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), - this._needsManuallyCompositing - ); - } - - if (!layer.__builtin__) { - logError$1('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id); - } - - if (layer !== prevLayer) { - layer.__used = true; - if (layer.__startIndex !== i) { - layer.__dirty = true; - } - layer.__startIndex = i; - if (!layer.incremental) { - layer.__drawIndex = i; - } - else { - // Mark layer draw index needs to update. - layer.__drawIndex = -1; - } - updatePrevLayer(i); - prevLayer = layer; - } - if (el.__dirty) { - layer.__dirty = true; - if (layer.incremental && layer.__drawIndex < 0) { - // Start draw from the first dirty element. - layer.__drawIndex = i; - } - } - } - - updatePrevLayer(i); - - this.eachBuiltinLayer(function (layer, z) { - // Used in last frame but not in this frame. Needs clear - if (!layer.__used && layer.getElementCount() > 0) { - layer.__dirty = true; - layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0; - } - // For incremental layer. In case start index changed and no elements are dirty. - if (layer.__dirty && layer.__drawIndex < 0) { - layer.__drawIndex = layer.__startIndex; - } - }); - }, - - /** - * 清除hover层外所有内容 - */ - clear: function () { - this.eachBuiltinLayer(this._clearLayer); - return this; - }, - - _clearLayer: function (layer) { - layer.clear(); - }, - - setBackgroundColor: function (backgroundColor) { - this._backgroundColor = backgroundColor; - }, - - /** - * 修改指定zlevel的绘制参数 - * - * @param {string} zlevel - * @param {Object} config 配置对象 - * @param {string} [config.clearColor=0] 每次清空画布的颜色 - * @param {string} [config.motionBlur=false] 是否开启动态模糊 - * @param {number} [config.lastFrameAlpha=0.7] - * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显 - */ - configLayer: function (zlevel, config) { - if (config) { - var layerConfig = this._layerConfig; - if (!layerConfig[zlevel]) { - layerConfig[zlevel] = config; - } - else { - merge(layerConfig[zlevel], config, true); - } - - for (var i = 0; i < this._zlevelList.length; i++) { - var _zlevel = this._zlevelList[i]; - if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) { - var layer = this._layers[_zlevel]; - merge(layer, layerConfig[zlevel], true); - } - } - } - }, - - /** - * 删除指定层 - * @param {number} zlevel 层所在的zlevel - */ - delLayer: function (zlevel) { - var layers = this._layers; - var zlevelList = this._zlevelList; - var layer = layers[zlevel]; - if (!layer) { - return; - } - layer.dom.parentNode.removeChild(layer.dom); - delete layers[zlevel]; - - zlevelList.splice(indexOf(zlevelList, zlevel), 1); - }, - - /** - * 区域大小变化后重绘 - */ - resize: function (width, height) { - if (!this._domRoot.style) { // Maybe in node or worker - if (width == null || height == null) { - return; - } - this._width = width; - this._height = height; - - this.getLayer(CANVAS_ZLEVEL).resize(width, height); - } - else { - var domRoot = this._domRoot; - // FIXME Why ? - domRoot.style.display = 'none'; - - // Save input w/h - var opts = this._opts; - width != null && (opts.width = width); - height != null && (opts.height = height); - - width = this._getSize(0); - height = this._getSize(1); - - domRoot.style.display = ''; - - // 优化没有实际改变的resize - if (this._width !== width || height !== this._height) { - domRoot.style.width = width + 'px'; - domRoot.style.height = height + 'px'; - - for (var id in this._layers) { - if (this._layers.hasOwnProperty(id)) { - this._layers[id].resize(width, height); - } - } - each(this._progressiveLayers, function (layer) { - layer.resize(width, height); - }); - - this.refresh(true); - } - - this._width = width; - this._height = height; - - } - return this; - }, - - /** - * 清除单独的一个层 - * @param {number} zlevel - */ - clearLayer: function (zlevel) { - var layer = this._layers[zlevel]; - if (layer) { - layer.clear(); - } - }, - - /** - * 释放 - */ - dispose: function () { - this.root.innerHTML = ''; - - this.root = - this.storage = - - this._domRoot = - this._layers = null; - }, - - /** - * Get canvas which has all thing rendered - * @param {Object} opts - * @param {string} [opts.backgroundColor] - * @param {number} [opts.pixelRatio] - */ - getRenderedCanvas: function (opts) { - opts = opts || {}; - if (this._singleCanvas && !this._compositeManually) { - return this._layers[CANVAS_ZLEVEL].dom; - } - - var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr); - imageLayer.initContext(); - imageLayer.clear(false, opts.backgroundColor || this._backgroundColor); - - if (opts.pixelRatio <= this.dpr) { - this.refresh(); - - var width = imageLayer.dom.width; - var height = imageLayer.dom.height; - var ctx = imageLayer.ctx; - this.eachLayer(function (layer) { - if (layer.__builtin__) { - ctx.drawImage(layer.dom, 0, 0, width, height); - } - else if (layer.renderToCanvas) { - imageLayer.ctx.save(); - layer.renderToCanvas(imageLayer.ctx); - imageLayer.ctx.restore(); - } - }); - } - else { - // PENDING, echarts-gl and incremental rendering. - var scope = {}; - var displayList = this.storage.getDisplayList(true); - for (var i = 0; i < displayList.length; i++) { - var el = displayList[i]; - this._doPaintEl(el, imageLayer, true, scope); - } - } - - return imageLayer.dom; - }, - /** - * 获取绘图区域宽度 - */ - getWidth: function () { - return this._width; - }, - - /** - * 获取绘图区域高度 - */ - getHeight: function () { - return this._height; - }, - - _getSize: function (whIdx) { - var opts = this._opts; - var wh = ['width', 'height'][whIdx]; - var cwh = ['clientWidth', 'clientHeight'][whIdx]; - var plt = ['paddingLeft', 'paddingTop'][whIdx]; - var prb = ['paddingRight', 'paddingBottom'][whIdx]; - - if (opts[wh] != null && opts[wh] !== 'auto') { - return parseFloat(opts[wh]); - } - - var root = this.root; - // IE8 does not support getComputedStyle, but it use VML. - var stl = document.defaultView.getComputedStyle(root); - - return ( - (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - - (parseInt10(stl[plt]) || 0) - - (parseInt10(stl[prb]) || 0) - ) | 0; - }, - - pathToImage: function (path, dpr) { - dpr = dpr || this.dpr; - - var canvas = document.createElement('canvas'); - var ctx = canvas.getContext('2d'); - var rect = path.getBoundingRect(); - var style = path.style; - var shadowBlurSize = style.shadowBlur * dpr; - var shadowOffsetX = style.shadowOffsetX * dpr; - var shadowOffsetY = style.shadowOffsetY * dpr; - var lineWidth = style.hasStroke() ? style.lineWidth : 0; - - var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize); - var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize); - var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize); - var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize); - var width = rect.width + leftMargin + rightMargin; - var height = rect.height + topMargin + bottomMargin; - - canvas.width = width * dpr; - canvas.height = height * dpr; - - ctx.scale(dpr, dpr); - ctx.clearRect(0, 0, width, height); - ctx.dpr = dpr; - - var pathTransform = { - position: path.position, - rotation: path.rotation, - scale: path.scale - }; - path.position = [leftMargin - rect.x, topMargin - rect.y]; - path.rotation = 0; - path.scale = [1, 1]; - path.updateTransform(); - if (path) { - path.brush(ctx); - } - - var ImageShape = ZImage; - var imgShape = new ImageShape({ - style: { - x: 0, - y: 0, - image: canvas - } - }); - - if (pathTransform.position != null) { - imgShape.position = path.position = pathTransform.position; - } - - if (pathTransform.rotation != null) { - imgShape.rotation = path.rotation = pathTransform.rotation; - } - - if (pathTransform.scale != null) { - imgShape.scale = path.scale = pathTransform.scale; - } - - return imgShape; - } -}; - -/** - * 动画主类, 调度和管理所有动画控制器 - * - * @module zrender/animation/Animation - * @author pissang(https://github.com/pissang) - */ -// TODO Additive animation -// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/ -// https://developer.apple.com/videos/wwdc2014/#236 - -/** - * @typedef {Object} IZRenderStage - * @property {Function} update - */ - -/** - * @alias module:zrender/animation/Animation - * @constructor - * @param {Object} [options] - * @param {Function} [options.onframe] - * @param {IZRenderStage} [options.stage] - * @example - * var animation = new Animation(); - * var obj = { - * x: 100, - * y: 100 - * }; - * animation.animate(node.position) - * .when(1000, { - * x: 500, - * y: 500 - * }) - * .when(2000, { - * x: 100, - * y: 100 - * }) - * .start('spline'); - */ -var Animation = function (options) { - - options = options || {}; - - this.stage = options.stage || {}; - - this.onframe = options.onframe || function () {}; - - // private properties - this._clips = []; - - this._running = false; - - this._time; - - this._pausedTime; - - this._pauseStart; - - this._paused = false; - - Eventful.call(this); -}; - -Animation.prototype = { - - constructor: Animation, - /** - * 添加 clip - * @param {module:zrender/animation/Clip} clip - */ - addClip: function (clip) { - this._clips.push(clip); - }, - /** - * 添加 animator - * @param {module:zrender/animation/Animator} animator - */ - addAnimator: function (animator) { - animator.animation = this; - var clips = animator.getClips(); - for (var i = 0; i < clips.length; i++) { - this.addClip(clips[i]); - } - }, - /** - * 删除动画片段 - * @param {module:zrender/animation/Clip} clip - */ - removeClip: function (clip) { - var idx = indexOf(this._clips, clip); - if (idx >= 0) { - this._clips.splice(idx, 1); - } - }, - - /** - * 删除动画片段 - * @param {module:zrender/animation/Animator} animator - */ - removeAnimator: function (animator) { - var clips = animator.getClips(); - for (var i = 0; i < clips.length; i++) { - this.removeClip(clips[i]); - } - animator.animation = null; - }, - - _update: function () { - var time = new Date().getTime() - this._pausedTime; - var delta = time - this._time; - var clips = this._clips; - var len = clips.length; - - var deferredEvents = []; - var deferredClips = []; - for (var i = 0; i < len; i++) { - var clip = clips[i]; - var e = clip.step(time, delta); - // Throw out the events need to be called after - // stage.update, like destroy - if (e) { - deferredEvents.push(e); - deferredClips.push(clip); - } - } - - // Remove the finished clip - for (var i = 0; i < len;) { - if (clips[i]._needsRemove) { - clips[i] = clips[len - 1]; - clips.pop(); - len--; - } - else { - i++; - } - } - - len = deferredEvents.length; - for (var i = 0; i < len; i++) { - deferredClips[i].fire(deferredEvents[i]); - } - - this._time = time; - - this.onframe(delta); - - // 'frame' should be triggered before stage, because upper application - // depends on the sequence (e.g., echarts-stream and finish - // event judge) - this.trigger('frame', delta); - - if (this.stage.update) { - this.stage.update(); - } - }, - - _startLoop: function () { - var self = this; - - this._running = true; - - function step() { - if (self._running) { - - requestAnimationFrame(step); - - !self._paused && self._update(); - } - } - - requestAnimationFrame(step); - }, - - /** - * Start animation. - */ - start: function () { - - this._time = new Date().getTime(); - this._pausedTime = 0; - - this._startLoop(); - }, - - /** - * Stop animation. - */ - stop: function () { - this._running = false; - }, - - /** - * Pause animation. - */ - pause: function () { - if (!this._paused) { - this._pauseStart = new Date().getTime(); - this._paused = true; - } - }, - - /** - * Resume animation. - */ - resume: function () { - if (this._paused) { - this._pausedTime += (new Date().getTime()) - this._pauseStart; - this._paused = false; - } - }, - - /** - * Clear animation. - */ - clear: function () { - this._clips = []; - }, - - /** - * Whether animation finished. - */ - isFinished: function () { - return !this._clips.length; - }, - - /** - * Creat animator for a target, whose props can be animated. - * - * @param {Object} target - * @param {Object} options - * @param {boolean} [options.loop=false] Whether loop animation. - * @param {Function} [options.getter=null] Get value from target. - * @param {Function} [options.setter=null] Set value to target. - * @return {module:zrender/animation/Animation~Animator} - */ - // TODO Gap - animate: function (target, options) { - options = options || {}; - - var animator = new Animator( - target, - options.loop, - options.getter, - options.setter - ); - - this.addAnimator(animator); - - return animator; - } -}; - -mixin(Animation, Eventful); - -/* global document */ - -var TOUCH_CLICK_DELAY = 300; - -var globalEventSupported = env$1.domSupported; - - -var localNativeListenerNames = (function () { - var mouseHandlerNames = [ - 'click', 'dblclick', 'mousewheel', 'mouseout', - 'mouseup', 'mousedown', 'mousemove', 'contextmenu' - ]; - var touchHandlerNames = [ - 'touchstart', 'touchend', 'touchmove' - ]; - var pointerEventNameMap = { - pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1 - }; - var pointerHandlerNames = map(mouseHandlerNames, function (name) { - var nm = name.replace('mouse', 'pointer'); - return pointerEventNameMap.hasOwnProperty(nm) ? nm : name; - }); - - return { - mouse: mouseHandlerNames, - touch: touchHandlerNames, - pointer: pointerHandlerNames - }; -})(); - -var globalNativeListenerNames = { - mouse: ['mousemove', 'mouseup'], - pointer: ['pointermove', 'pointerup'] -}; - - -function eventNameFix(name) { - return (name === 'mousewheel' && env$1.browser.firefox) ? 'DOMMouseScroll' : name; -} - -function isPointerFromTouch(event) { - var pointerType = event.pointerType; - return pointerType === 'pen' || pointerType === 'touch'; -} - -// function useMSGuesture(handlerProxy, event) { -// return isPointerFromTouch(event) && !!handlerProxy._msGesture; -// } - -// function onMSGestureChange(proxy, event) { -// if (event.translationX || event.translationY) { -// // mousemove is carried by MSGesture to reduce the sensitivity. -// proxy.handler.dispatchToElement(event.target, 'mousemove', event); -// } -// if (event.scale !== 1) { -// event.pinchX = event.offsetX; -// event.pinchY = event.offsetY; -// event.pinchScale = event.scale; -// proxy.handler.dispatchToElement(event.target, 'pinch', event); -// } -// } - -/** - * Prevent mouse event from being dispatched after Touch Events action - * @see - * 1. Mobile browsers dispatch mouse events 300ms after touchend. - * 2. Chrome for Android dispatch mousedown for long-touch about 650ms - * Result: Blocking Mouse Events for 700ms. - * - * @param {DOMHandlerScope} scope - */ -function setTouchTimer(scope) { - scope.touching = true; - if (scope.touchTimer != null) { - clearTimeout(scope.touchTimer); - scope.touchTimer = null; - } - scope.touchTimer = setTimeout(function () { - scope.touching = false; - scope.touchTimer = null; - }, 700); -} - -// Mark touch, which is useful in distinguish touch and -// mouse event in upper applicatoin. -function markTouch(event) { - event && (event.zrByTouch = true); -} - - -// function markTriggeredFromLocal(event) { -// event && (event.__zrIsFromLocal = true); -// } - -// function isTriggeredFromLocal(instance, event) { -// return !!(event && event.__zrIsFromLocal); -// } - -function normalizeGlobalEvent(instance, event) { - // offsetX, offsetY still need to be calculated. They are necessary in the event - // handlers of the upper applications. Set `true` to force calculate them. - return normalizeEvent(instance.dom, new FakeGlobalEvent(instance, event), true); -} - -/** - * Detect whether the given el is in `painterRoot`. - */ -function isLocalEl(instance, el) { - var isLocal = false; - do { - el = el && el.parentNode; - } - while (el && el.nodeType !== 9 && !( - isLocal = el === instance.painterRoot - )); - return isLocal; -} - -/** - * Make a fake event but not change the original event, - * becuase the global event probably be used by other - * listeners not belonging to zrender. - * @class - */ -function FakeGlobalEvent(instance, event) { - this.type = event.type; - this.target = this.currentTarget = instance.dom; - this.pointerType = event.pointerType; - // Necessray for the force calculation of zrX, zrY - this.clientX = event.clientX; - this.clientY = event.clientY; - // Because we do not mount global listeners to touch events, - // we do not copy `targetTouches` and `changedTouches` here. -} -var fakeGlobalEventProto = FakeGlobalEvent.prototype; -// we make the default methods on the event do nothing, -// otherwise it is dangerous. See more details in -// [Drag outside] in `Handler.js`. -fakeGlobalEventProto.stopPropagation = - fakeGlobalEventProto.stopImmediatePropagation = - fakeGlobalEventProto.preventDefault = noop; - - -/** - * Local DOM Handlers - * @this {HandlerProxy} - */ -var localDOMHandlers = { - - mousedown: function (event) { - event = normalizeEvent(this.dom, event); - - this._mayPointerCapture = [event.zrX, event.zrY]; - - this.trigger('mousedown', event); - }, - - mousemove: function (event) { - event = normalizeEvent(this.dom, event); - - var downPoint = this._mayPointerCapture; - if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) { - togglePointerCapture(this, true); - } - - this.trigger('mousemove', event); - }, - - mouseup: function (event) { - event = normalizeEvent(this.dom, event); - - togglePointerCapture(this, false); - - this.trigger('mouseup', event); - }, - - mouseout: function (event) { - event = normalizeEvent(this.dom, event); - - // Similarly to the browser did on `document` and touch event, - // `globalout` will be delayed to final pointer cature release. - if (this._pointerCapturing) { - event.zrEventControl = 'no_globalout'; - } - - // There might be some doms created by upper layer application - // at the same level of painter.getViewportRoot() (e.g., tooltip - // dom created by echarts), where 'globalout' event should not - // be triggered when mouse enters these doms. (But 'mouseout' - // should be triggered at the original hovered element as usual). - var element = event.toElement || event.relatedTarget; - event.zrIsToLocalDOM = isLocalEl(this, element); - - this.trigger('mouseout', event); - }, - - touchstart: function (event) { - // Default mouse behaviour should not be disabled here. - // For example, page may needs to be slided. - event = normalizeEvent(this.dom, event); - - markTouch(event); - - this._lastTouchMoment = new Date(); - - this.handler.processGesture(event, 'start'); - - // For consistent event listener for both touch device and mouse device, - // we simulate "mouseover-->mousedown" in touch device. So we trigger - // `mousemove` here (to trigger `mouseover` inside), and then trigger - // `mousedown`. - localDOMHandlers.mousemove.call(this, event); - localDOMHandlers.mousedown.call(this, event); - }, - - touchmove: function (event) { - event = normalizeEvent(this.dom, event); - - markTouch(event); - - this.handler.processGesture(event, 'change'); - - // Mouse move should always be triggered no matter whether - // there is gestrue event, because mouse move and pinch may - // be used at the same time. - localDOMHandlers.mousemove.call(this, event); - }, - - touchend: function (event) { - event = normalizeEvent(this.dom, event); - - markTouch(event); - - this.handler.processGesture(event, 'end'); - - localDOMHandlers.mouseup.call(this, event); - - // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is - // triggered in `touchstart`. This seems to be illogical, but by this mechanism, - // we can conveniently implement "hover style" in both PC and touch device just - // by listening to `mouseover` to add "hover style" and listening to `mouseout` - // to remove "hover style" on an element, without any additional code for - // compatibility. (`mouseout` will not be triggered in `touchend`, so "hover - // style" will remain for user view) - - // click event should always be triggered no matter whether - // there is gestrue event. System click can not be prevented. - if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) { - localDOMHandlers.click.call(this, event); - } - }, - - pointerdown: function (event) { - localDOMHandlers.mousedown.call(this, event); - - // if (useMSGuesture(this, event)) { - // this._msGesture.addPointer(event.pointerId); - // } - }, - - pointermove: function (event) { - // FIXME - // pointermove is so sensitive that it always triggered when - // tap(click) on touch screen, which affect some judgement in - // upper application. So, we dont support mousemove on MS touch - // device yet. - if (!isPointerFromTouch(event)) { - localDOMHandlers.mousemove.call(this, event); - } - }, - - pointerup: function (event) { - localDOMHandlers.mouseup.call(this, event); - }, - - pointerout: function (event) { - // pointerout will be triggered when tap on touch screen - // (IE11+/Edge on MS Surface) after click event triggered, - // which is inconsistent with the mousout behavior we defined - // in touchend. So we unify them. - // (check localDOMHandlers.touchend for detailed explanation) - if (!isPointerFromTouch(event)) { - localDOMHandlers.mouseout.call(this, event); - } - } - -}; - -/** - * Othere DOM UI Event handlers for zr dom. - * @this {HandlerProxy} - */ -each(['click', 'mousewheel', 'dblclick', 'contextmenu'], function (name) { - localDOMHandlers[name] = function (event) { - event = normalizeEvent(this.dom, event); - this.trigger(name, event); - }; -}); - - -/** - * DOM UI Event handlers for global page. - * - * [Caution]: - * those handlers should both support in capture phase and bubble phase! - * - * @this {HandlerProxy} - */ -var globalDOMHandlers = { - - pointermove: function (event) { - // FIXME - // pointermove is so sensitive that it always triggered when - // tap(click) on touch screen, which affect some judgement in - // upper application. So, we dont support mousemove on MS touch - // device yet. - if (!isPointerFromTouch(event)) { - globalDOMHandlers.mousemove.call(this, event); - } - }, - - pointerup: function (event) { - globalDOMHandlers.mouseup.call(this, event); - }, - - mousemove: function (event) { - this.trigger('mousemove', event); - }, - - mouseup: function (event) { - var pointerCaptureReleasing = this._pointerCapturing; - - togglePointerCapture(this, false); - - this.trigger('mouseup', event); - - if (pointerCaptureReleasing) { - event.zrEventControl = 'only_globalout'; - this.trigger('mouseout', event); - } - } - -}; - - -/** - * @param {HandlerProxy} instance - * @param {DOMHandlerScope} scope - */ -function mountLocalDOMEventListeners(instance, scope) { - var domHandlers = scope.domHandlers; - - if (env$1.pointerEventsSupported) { // Only IE11+/Edge - // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240), - // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event - // at the same time. - // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on - // screen, which do not occurs in pointer event. - // So we use pointer event to both detect touch gesture and mouse behavior. - each(localNativeListenerNames.pointer, function (nativeEventName) { - mountSingleDOMEventListener(scope, nativeEventName, function (event) { - // markTriggeredFromLocal(event); - domHandlers[nativeEventName].call(instance, event); - }); - }); - - // FIXME - // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable, - // which does not prevent defuault behavior occasionally (which may cause view port - // zoomed in but use can not zoom it back). And event.preventDefault() does not work. - // So we have to not to use MSGesture and not to support touchmove and pinch on MS - // touch screen. And we only support click behavior on MS touch screen now. - - // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+. - // We dont support touch on IE on win7. - // See - // if (typeof MSGesture === 'function') { - // (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line - // dom.addEventListener('MSGestureChange', onMSGestureChange); - // } - } - else { - if (env$1.touchEventsSupported) { - each(localNativeListenerNames.touch, function (nativeEventName) { - mountSingleDOMEventListener(scope, nativeEventName, function (event) { - // markTriggeredFromLocal(event); - domHandlers[nativeEventName].call(instance, event); - setTouchTimer(scope); - }); - }); - // Handler of 'mouseout' event is needed in touch mode, which will be mounted below. - // addEventListener(root, 'mouseout', this._mouseoutHandler); - } - - // 1. Considering some devices that both enable touch and mouse event (like on MS Surface - // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise - // mouse event can not be handle in those devices. - // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent - // mouseevent after touch event triggered, see `setTouchTimer`. - each(localNativeListenerNames.mouse, function (nativeEventName) { - mountSingleDOMEventListener(scope, nativeEventName, function (event) { - event = getNativeEvent(event); - if (!scope.touching) { - // markTriggeredFromLocal(event); - domHandlers[nativeEventName].call(instance, event); - } - }); - }); - } -} - -/** - * @param {HandlerProxy} instance - * @param {DOMHandlerScope} scope - */ -function mountGlobalDOMEventListeners(instance, scope) { - // Only IE11+/Edge. See the comment in `mountLocalDOMEventListeners`. - if (env$1.pointerEventsSupported) { - each(globalNativeListenerNames.pointer, mount); - } - // Touch event has implemented "drag outside" so we do not mount global listener for touch event. - // (see https://www.w3.org/TR/touch-events/#the-touchmove-event) - // We do not consider "both-support-touch-and-mouse device" for this feature (see the comment of - // `mountLocalDOMEventListeners`) to avoid bugs util some requirements come. - else if (!env$1.touchEventsSupported) { - each(globalNativeListenerNames.mouse, mount); - } - - function mount(nativeEventName) { - function nativeEventListener(event) { - event = getNativeEvent(event); - // See the reason in [Drag outside] in `Handler.js` - // This checking supports both `useCapture` or not. - // PENDING: if there is performance issue in some devices, - // we probably can not use `useCapture` and change a easier - // to judes whether local (mark). - if (!isLocalEl(instance, event.target)) { - event = normalizeGlobalEvent(instance, event); - scope.domHandlers[nativeEventName].call(instance, event); - } - } - mountSingleDOMEventListener( - scope, nativeEventName, nativeEventListener, - {capture: true} // See [Drag Outside] in `Handler.js` - ); - } -} - -function mountSingleDOMEventListener(scope, nativeEventName, listener, opt) { - scope.mounted[nativeEventName] = listener; - scope.listenerOpts[nativeEventName] = opt; - addEventListener(scope.domTarget, eventNameFix(nativeEventName), listener, opt); -} - -function unmountDOMEventListeners(scope) { - var mounted = scope.mounted; - for (var nativeEventName in mounted) { - if (mounted.hasOwnProperty(nativeEventName)) { - removeEventListener( - scope.domTarget, eventNameFix(nativeEventName), mounted[nativeEventName], - scope.listenerOpts[nativeEventName] - ); - } - } - scope.mounted = {}; -} - -/** - * See [Drag Outside] in `Handler.js`. - * @implement - * @param {boolean} isPointerCapturing Should never be `null`/`undefined`. - * `true`: start to capture pointer if it is not capturing. - * `false`: end the capture if it is capturing. - */ -function togglePointerCapture(instance, isPointerCapturing) { - instance._mayPointerCapture = null; - - if (globalEventSupported && (instance._pointerCapturing ^ isPointerCapturing)) { - instance._pointerCapturing = isPointerCapturing; - - var globalHandlerScope = instance._globalHandlerScope; - isPointerCapturing - ? mountGlobalDOMEventListeners(instance, globalHandlerScope) - : unmountDOMEventListeners(globalHandlerScope); - } -} - -/** - * @inner - * @class - */ -function DOMHandlerScope(domTarget, domHandlers) { - this.domTarget = domTarget; - this.domHandlers = domHandlers; - - // Key: eventName, value: mounted handler funcitons. - // Used for unmount. - this.mounted = {}; - this.listenerOpts = {}; - - this.touchTimer = null; - this.touching = false; -} - -/** - * @public - * @class - */ -function HandlerDomProxy(dom, painterRoot) { - Eventful.call(this); - - this.dom = dom; - this.painterRoot = painterRoot; - - this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers); - - if (globalEventSupported) { - this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers); - } - - /** - * @type {boolean} - */ - this._pointerCapturing = false; - /** - * @type {Array.} [x, y] or null. - */ - this._mayPointerCapture = null; - - mountLocalDOMEventListeners(this, this._localHandlerScope); -} - -var handlerDomProxyProto = HandlerDomProxy.prototype; - -handlerDomProxyProto.dispose = function () { - unmountDOMEventListeners(this._localHandlerScope); - if (globalEventSupported) { - unmountDOMEventListeners(this._globalHandlerScope); - } -}; - -handlerDomProxyProto.setCursor = function (cursorStyle) { - this.dom.style && (this.dom.style.cursor = cursorStyle || 'default'); -}; - - -mixin(HandlerDomProxy, Eventful); - -/*! -* ZRender, a high performance 2d drawing library. -* -* Copyright (c) 2013, Baidu Inc. -* All rights reserved. -* -* LICENSE -* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt -*/ - -var useVML = !env$1.canvasSupported; - -var painterCtors = { - canvas: Painter -}; - -var instances = {}; // ZRender实例map索引 - -/** - * @type {string} - */ -var version = '4.2.0'; - -/** - * Initializing a zrender instance - * @param {HTMLElement} dom - * @param {Object} [opts] - * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg' - * @param {number} [opts.devicePixelRatio] - * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined) - * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined) - * @return {module:zrender/ZRender} - */ -function init(dom, opts) { - var zr = new ZRender(guid(), dom, opts); - instances[zr.id] = zr; - return zr; -} - -/** - * Dispose zrender instance - * @param {module:zrender/ZRender} zr - */ -function dispose(zr) { - if (zr) { - zr.dispose(); - } - else { - for (var key in instances) { - if (instances.hasOwnProperty(key)) { - instances[key].dispose(); - } - } - instances = {}; - } - - return this; -} - -/** - * Get zrender instance by id - * @param {string} id zrender instance id - * @return {module:zrender/ZRender} - */ -function getInstance(id) { - return instances[id]; -} - -function registerPainter(name, Ctor) { - painterCtors[name] = Ctor; -} - -function delInstance(id) { - delete instances[id]; -} - -/** - * @module zrender/ZRender - */ -/** - * @constructor - * @alias module:zrender/ZRender - * @param {string} id - * @param {HTMLElement} dom - * @param {Object} opts - * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg' - * @param {number} [opts.devicePixelRatio] - * @param {number} [opts.width] Can be 'auto' (the same as null/undefined) - * @param {number} [opts.height] Can be 'auto' (the same as null/undefined) - */ -var ZRender = function (id, dom, opts) { - - opts = opts || {}; - - /** - * @type {HTMLDomElement} - */ - this.dom = dom; - - /** - * @type {string} - */ - this.id = id; - - var self = this; - var storage = new Storage(); - - var rendererType = opts.renderer; - // TODO WebGL - if (useVML) { - if (!painterCtors.vml) { - throw new Error('You need to require \'zrender/vml/vml\' to support IE8'); - } - rendererType = 'vml'; - } - else if (!rendererType || !painterCtors[rendererType]) { - rendererType = 'canvas'; - } - var painter = new painterCtors[rendererType](dom, storage, opts, id); - - this.storage = storage; - this.painter = painter; - - var handerProxy = (!env$1.node && !env$1.worker) ? new HandlerDomProxy(painter.getViewportRoot(), painter.root) : null; - this.handler = new Handler(storage, painter, handerProxy, painter.root); - - /** - * @type {module:zrender/animation/Animation} - */ - this.animation = new Animation({ - stage: { - update: bind(this.flush, this) - } - }); - this.animation.start(); - - /** - * @type {boolean} - * @private - */ - this._needsRefresh; - - // 修改 storage.delFromStorage, 每次删除元素之前删除动画 - // FIXME 有点ugly - var oldDelFromStorage = storage.delFromStorage; - var oldAddToStorage = storage.addToStorage; - - storage.delFromStorage = function (el) { - oldDelFromStorage.call(storage, el); - - el && el.removeSelfFromZr(self); - }; - - storage.addToStorage = function (el) { - oldAddToStorage.call(storage, el); - - el.addSelfToZr(self); - }; -}; - -ZRender.prototype = { - - constructor: ZRender, - /** - * 获取实例唯一标识 - * @return {string} - */ - getId: function () { - return this.id; - }, - - /** - * 添加元素 - * @param {module:zrender/Element} el - */ - add: function (el) { - this.storage.addRoot(el); - this._needsRefresh = true; - }, - - /** - * 删除元素 - * @param {module:zrender/Element} el - */ - remove: function (el) { - this.storage.delRoot(el); - this._needsRefresh = true; - }, - - /** - * Change configuration of layer - * @param {string} zLevel - * @param {Object} config - * @param {string} [config.clearColor=0] Clear color - * @param {string} [config.motionBlur=false] If enable motion blur - * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer - */ - configLayer: function (zLevel, config) { - if (this.painter.configLayer) { - this.painter.configLayer(zLevel, config); - } - this._needsRefresh = true; - }, - - /** - * Set background color - * @param {string} backgroundColor - */ - setBackgroundColor: function (backgroundColor) { - if (this.painter.setBackgroundColor) { - this.painter.setBackgroundColor(backgroundColor); - } - this._needsRefresh = true; - }, - - /** - * Repaint the canvas immediately - */ - refreshImmediately: function () { - // var start = new Date(); - - // Clear needsRefresh ahead to avoid something wrong happens in refresh - // Or it will cause zrender refreshes again and again. - this._needsRefresh = this._needsRefreshHover = false; - this.painter.refresh(); - // Avoid trigger zr.refresh in Element#beforeUpdate hook - this._needsRefresh = this._needsRefreshHover = false; - - // var end = new Date(); - // var log = document.getElementById('log'); - // if (log) { - // log.innerHTML = log.innerHTML + '
' + (end - start); - // } - }, - - /** - * Mark and repaint the canvas in the next frame of browser - */ - refresh: function () { - this._needsRefresh = true; - }, - - /** - * Perform all refresh - */ - flush: function () { - var triggerRendered; - - if (this._needsRefresh) { - triggerRendered = true; - this.refreshImmediately(); - } - if (this._needsRefreshHover) { - triggerRendered = true; - this.refreshHoverImmediately(); - } - - triggerRendered && this.trigger('rendered'); - }, - - /** - * Add element to hover layer - * @param {module:zrender/Element} el - * @param {Object} style - */ - addHover: function (el, style) { - if (this.painter.addHover) { - var elMirror = this.painter.addHover(el, style); - this.refreshHover(); - return elMirror; - } - }, - - /** - * Add element from hover layer - * @param {module:zrender/Element} el - */ - removeHover: function (el) { - if (this.painter.removeHover) { - this.painter.removeHover(el); - this.refreshHover(); - } - }, - - /** - * Clear all hover elements in hover layer - * @param {module:zrender/Element} el - */ - clearHover: function () { - if (this.painter.clearHover) { - this.painter.clearHover(); - this.refreshHover(); - } - }, - - /** - * Refresh hover in next frame - */ - refreshHover: function () { - this._needsRefreshHover = true; - }, - - /** - * Refresh hover immediately - */ - refreshHoverImmediately: function () { - this._needsRefreshHover = false; - this.painter.refreshHover && this.painter.refreshHover(); - }, - - /** - * Resize the canvas. - * Should be invoked when container size is changed - * @param {Object} [opts] - * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined) - * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined) - */ - resize: function (opts) { - opts = opts || {}; - this.painter.resize(opts.width, opts.height); - this.handler.resize(); - }, - - /** - * Stop and clear all animation immediately - */ - clearAnimation: function () { - this.animation.clear(); - }, - - /** - * Get container width - */ - getWidth: function () { - return this.painter.getWidth(); - }, - - /** - * Get container height - */ - getHeight: function () { - return this.painter.getHeight(); - }, - - /** - * Export the canvas as Base64 URL - * @param {string} type - * @param {string} [backgroundColor='#fff'] - * @return {string} Base64 URL - */ - // toDataURL: function(type, backgroundColor) { - // return this.painter.getRenderedCanvas({ - // backgroundColor: backgroundColor - // }).toDataURL(type); - // }, - - /** - * Converting a path to image. - * It has much better performance of drawing image rather than drawing a vector path. - * @param {module:zrender/graphic/Path} e - * @param {number} width - * @param {number} height - */ - pathToImage: function (e, dpr) { - return this.painter.pathToImage(e, dpr); - }, - - /** - * Set default cursor - * @param {string} [cursorStyle='default'] 例如 crosshair - */ - setCursorStyle: function (cursorStyle) { - this.handler.setCursorStyle(cursorStyle); - }, - - /** - * Find hovered element - * @param {number} x - * @param {number} y - * @return {Object} {target, topTarget} - */ - findHover: function (x, y) { - return this.handler.findHover(x, y); - }, - - /** - * Bind event - * - * @param {string} eventName Event name - * @param {Function} eventHandler Handler function - * @param {Object} [context] Context object - */ - on: function (eventName, eventHandler, context) { - this.handler.on(eventName, eventHandler, context); - }, - - /** - * Unbind event - * @param {string} eventName Event name - * @param {Function} [eventHandler] Handler function - */ - off: function (eventName, eventHandler) { - this.handler.off(eventName, eventHandler); - }, - - /** - * Trigger event manually - * - * @param {string} eventName Event name - * @param {event=} event Event object - */ - trigger: function (eventName, event) { - this.handler.trigger(eventName, event); - }, - - - /** - * Clear all objects and the canvas. - */ - clear: function () { - this.storage.delRoot(); - this.painter.clear(); - }, - - /** - * Dispose self. - */ - dispose: function () { - this.animation.stop(); - - this.clear(); - this.storage.dispose(); - this.painter.dispose(); - this.handler.dispose(); - - this.animation = - this.storage = - this.painter = - this.handler = null; - - delInstance(this.id); - } -}; - -/** - * 曲线辅助模块 - * @module zrender/core/curve - * @author pissang(https://www.github.com/pissang) - */ - -var mathPow = Math.pow; -var mathSqrt$2 = Math.sqrt; - -var EPSILON$1 = 1e-8; -var EPSILON_NUMERIC = 1e-4; - -var THREE_SQRT = mathSqrt$2(3); -var ONE_THIRD = 1 / 3; - -// 临时变量 -var _v0 = create(); -var _v1 = create(); -var _v2 = create(); - -function isAroundZero(val) { - return val > -EPSILON$1 && val < EPSILON$1; -} -function isNotAroundZero$1(val) { - return val > EPSILON$1 || val < -EPSILON$1; -} -/** - * 计算三次贝塞尔值 - * @memberOf module:zrender/core/curve - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} p3 - * @param {number} t - * @return {number} - */ -function cubicAt(p0, p1, p2, p3, t) { - var onet = 1 - t; - return onet * onet * (onet * p0 + 3 * t * p1) - + t * t * (t * p3 + 3 * onet * p2); -} - -/** - * 计算三次贝塞尔导数值 - * @memberOf module:zrender/core/curve - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} p3 - * @param {number} t - * @return {number} - */ -function cubicDerivativeAt(p0, p1, p2, p3, t) { - var onet = 1 - t; - return 3 * ( - ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet - + (p3 - p2) * t * t - ); -} - -/** - * 计算三次贝塞尔方程根,使用盛金公式 - * @memberOf module:zrender/core/curve - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} p3 - * @param {number} val - * @param {Array.} roots - * @return {number} 有效根数目 - */ -function cubicRootAt(p0, p1, p2, p3, val, roots) { - // Evaluate roots of cubic functions - var a = p3 + 3 * (p1 - p2) - p0; - var b = 3 * (p2 - p1 * 2 + p0); - var c = 3 * (p1 - p0); - var d = p0 - val; - - var A = b * b - 3 * a * c; - var B = b * c - 9 * a * d; - var C = c * c - 3 * b * d; - - var n = 0; - - if (isAroundZero(A) && isAroundZero(B)) { - if (isAroundZero(b)) { - roots[0] = 0; - } - else { - var t1 = -c / b; //t1, t2, t3, b is not zero - if (t1 >= 0 && t1 <= 1) { - roots[n++] = t1; - } - } - } - else { - var disc = B * B - 4 * A * C; - - if (isAroundZero(disc)) { - var K = B / A; - var t1 = -b / a + K; // t1, a is not zero - var t2 = -K / 2; // t2, t3 - if (t1 >= 0 && t1 <= 1) { - roots[n++] = t1; - } - if (t2 >= 0 && t2 <= 1) { - roots[n++] = t2; - } - } - else if (disc > 0) { - var discSqrt = mathSqrt$2(disc); - var Y1 = A * b + 1.5 * a * (-B + discSqrt); - var Y2 = A * b + 1.5 * a * (-B - discSqrt); - if (Y1 < 0) { - Y1 = -mathPow(-Y1, ONE_THIRD); - } - else { - Y1 = mathPow(Y1, ONE_THIRD); - } - if (Y2 < 0) { - Y2 = -mathPow(-Y2, ONE_THIRD); - } - else { - Y2 = mathPow(Y2, ONE_THIRD); - } - var t1 = (-b - (Y1 + Y2)) / (3 * a); - if (t1 >= 0 && t1 <= 1) { - roots[n++] = t1; - } - } - else { - var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt$2(A * A * A)); - var theta = Math.acos(T) / 3; - var ASqrt = mathSqrt$2(A); - var tmp = Math.cos(theta); - - var t1 = (-b - 2 * ASqrt * tmp) / (3 * a); - var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a); - var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a); - if (t1 >= 0 && t1 <= 1) { - roots[n++] = t1; - } - if (t2 >= 0 && t2 <= 1) { - roots[n++] = t2; - } - if (t3 >= 0 && t3 <= 1) { - roots[n++] = t3; - } - } - } - return n; -} - -/** - * 计算三次贝塞尔方程极限值的位置 - * @memberOf module:zrender/core/curve - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} p3 - * @param {Array.} extrema - * @return {number} 有效数目 - */ -function cubicExtrema(p0, p1, p2, p3, extrema) { - var b = 6 * p2 - 12 * p1 + 6 * p0; - var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2; - var c = 3 * p1 - 3 * p0; - - var n = 0; - if (isAroundZero(a)) { - if (isNotAroundZero$1(b)) { - var t1 = -c / b; - if (t1 >= 0 && t1 <= 1) { - extrema[n++] = t1; - } - } - } - else { - var disc = b * b - 4 * a * c; - if (isAroundZero(disc)) { - extrema[0] = -b / (2 * a); - } - else if (disc > 0) { - var discSqrt = mathSqrt$2(disc); - var t1 = (-b + discSqrt) / (2 * a); - var t2 = (-b - discSqrt) / (2 * a); - if (t1 >= 0 && t1 <= 1) { - extrema[n++] = t1; - } - if (t2 >= 0 && t2 <= 1) { - extrema[n++] = t2; - } - } - } - return n; -} - -/** - * 细分三次贝塞尔曲线 - * @memberOf module:zrender/core/curve - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} p3 - * @param {number} t - * @param {Array.} out - */ -function cubicSubdivide(p0, p1, p2, p3, t, out) { - var p01 = (p1 - p0) * t + p0; - var p12 = (p2 - p1) * t + p1; - var p23 = (p3 - p2) * t + p2; - - var p012 = (p12 - p01) * t + p01; - var p123 = (p23 - p12) * t + p12; - - var p0123 = (p123 - p012) * t + p012; - // Seg0 - out[0] = p0; - out[1] = p01; - out[2] = p012; - out[3] = p0123; - // Seg1 - out[4] = p0123; - out[5] = p123; - out[6] = p23; - out[7] = p3; -} - -/** - * 投射点到三次贝塞尔曲线上,返回投射距离。 - * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。 - * @param {number} x0 - * @param {number} y0 - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x3 - * @param {number} y3 - * @param {number} x - * @param {number} y - * @param {Array.} [out] 投射点 - * @return {number} - */ -function cubicProjectPoint( - x0, y0, x1, y1, x2, y2, x3, y3, - x, y, out -) { - // http://pomax.github.io/bezierinfo/#projections - var t; - var interval = 0.005; - var d = Infinity; - var prev; - var next; - var d1; - var d2; - - _v0[0] = x; - _v0[1] = y; - - // 先粗略估计一下可能的最小距离的 t 值 - // PENDING - for (var _t = 0; _t < 1; _t += 0.05) { - _v1[0] = cubicAt(x0, x1, x2, x3, _t); - _v1[1] = cubicAt(y0, y1, y2, y3, _t); - d1 = distSquare(_v0, _v1); - if (d1 < d) { - t = _t; - d = d1; - } - } - d = Infinity; - - // At most 32 iteration - for (var i = 0; i < 32; i++) { - if (interval < EPSILON_NUMERIC) { - break; - } - prev = t - interval; - next = t + interval; - // t - interval - _v1[0] = cubicAt(x0, x1, x2, x3, prev); - _v1[1] = cubicAt(y0, y1, y2, y3, prev); - - d1 = distSquare(_v1, _v0); - - if (prev >= 0 && d1 < d) { - t = prev; - d = d1; - } - else { - // t + interval - _v2[0] = cubicAt(x0, x1, x2, x3, next); - _v2[1] = cubicAt(y0, y1, y2, y3, next); - d2 = distSquare(_v2, _v0); - - if (next <= 1 && d2 < d) { - t = next; - d = d2; - } - else { - interval *= 0.5; - } - } - } - // t - if (out) { - out[0] = cubicAt(x0, x1, x2, x3, t); - out[1] = cubicAt(y0, y1, y2, y3, t); - } - // console.log(interval, i); - return mathSqrt$2(d); -} - -/** - * 计算二次方贝塞尔值 - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} t - * @return {number} - */ -function quadraticAt(p0, p1, p2, t) { - var onet = 1 - t; - return onet * (onet * p0 + 2 * t * p1) + t * t * p2; -} - -/** - * 计算二次方贝塞尔导数值 - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} t - * @return {number} - */ -function quadraticDerivativeAt(p0, p1, p2, t) { - return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1)); -} - -/** - * 计算二次方贝塞尔方程根 - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} t - * @param {Array.} roots - * @return {number} 有效根数目 - */ -function quadraticRootAt(p0, p1, p2, val, roots) { - var a = p0 - 2 * p1 + p2; - var b = 2 * (p1 - p0); - var c = p0 - val; - - var n = 0; - if (isAroundZero(a)) { - if (isNotAroundZero$1(b)) { - var t1 = -c / b; - if (t1 >= 0 && t1 <= 1) { - roots[n++] = t1; - } - } - } - else { - var disc = b * b - 4 * a * c; - if (isAroundZero(disc)) { - var t1 = -b / (2 * a); - if (t1 >= 0 && t1 <= 1) { - roots[n++] = t1; - } - } - else if (disc > 0) { - var discSqrt = mathSqrt$2(disc); - var t1 = (-b + discSqrt) / (2 * a); - var t2 = (-b - discSqrt) / (2 * a); - if (t1 >= 0 && t1 <= 1) { - roots[n++] = t1; - } - if (t2 >= 0 && t2 <= 1) { - roots[n++] = t2; - } - } - } - return n; -} - -/** - * 计算二次贝塞尔方程极限值 - * @memberOf module:zrender/core/curve - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @return {number} - */ -function quadraticExtremum(p0, p1, p2) { - var divider = p0 + p2 - 2 * p1; - if (divider === 0) { - // p1 is center of p0 and p2 - return 0.5; - } - else { - return (p0 - p1) / divider; - } -} - -/** - * 细分二次贝塞尔曲线 - * @memberOf module:zrender/core/curve - * @param {number} p0 - * @param {number} p1 - * @param {number} p2 - * @param {number} t - * @param {Array.} out - */ -function quadraticSubdivide(p0, p1, p2, t, out) { - var p01 = (p1 - p0) * t + p0; - var p12 = (p2 - p1) * t + p1; - var p012 = (p12 - p01) * t + p01; - - // Seg0 - out[0] = p0; - out[1] = p01; - out[2] = p012; - - // Seg1 - out[3] = p012; - out[4] = p12; - out[5] = p2; -} - -/** - * 投射点到二次贝塞尔曲线上,返回投射距离。 - * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。 - * @param {number} x0 - * @param {number} y0 - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x - * @param {number} y - * @param {Array.} out 投射点 - * @return {number} - */ -function quadraticProjectPoint( - x0, y0, x1, y1, x2, y2, - x, y, out -) { - // http://pomax.github.io/bezierinfo/#projections - var t; - var interval = 0.005; - var d = Infinity; - - _v0[0] = x; - _v0[1] = y; - - // 先粗略估计一下可能的最小距离的 t 值 - // PENDING - for (var _t = 0; _t < 1; _t += 0.05) { - _v1[0] = quadraticAt(x0, x1, x2, _t); - _v1[1] = quadraticAt(y0, y1, y2, _t); - var d1 = distSquare(_v0, _v1); - if (d1 < d) { - t = _t; - d = d1; - } - } - d = Infinity; - - // At most 32 iteration - for (var i = 0; i < 32; i++) { - if (interval < EPSILON_NUMERIC) { - break; - } - var prev = t - interval; - var next = t + interval; - // t - interval - _v1[0] = quadraticAt(x0, x1, x2, prev); - _v1[1] = quadraticAt(y0, y1, y2, prev); - - var d1 = distSquare(_v1, _v0); - - if (prev >= 0 && d1 < d) { - t = prev; - d = d1; - } - else { - // t + interval - _v2[0] = quadraticAt(x0, x1, x2, next); - _v2[1] = quadraticAt(y0, y1, y2, next); - var d2 = distSquare(_v2, _v0); - if (next <= 1 && d2 < d) { - t = next; - d = d2; - } - else { - interval *= 0.5; - } - } - } - // t - if (out) { - out[0] = quadraticAt(x0, x1, x2, t); - out[1] = quadraticAt(y0, y1, y2, t); - } - // console.log(interval, i); - return mathSqrt$2(d); -} - -/** - * @author Yi Shen(https://github.com/pissang) - */ - -var mathMin$2 = Math.min; -var mathMax$2 = Math.max; -var mathSin$2 = Math.sin; -var mathCos$2 = Math.cos; -var PI2 = Math.PI * 2; - -var start = create(); -var end = create(); -var extremity = create(); - -/** - * 从顶点数组中计算出最小包围盒,写入`min`和`max`中 - * @module zrender/core/bbox - * @param {Array} points 顶点数组 - * @param {number} min - * @param {number} max - */ - - -/** - * @memberOf module:zrender/core/bbox - * @param {number} x0 - * @param {number} y0 - * @param {number} x1 - * @param {number} y1 - * @param {Array.} min - * @param {Array.} max - */ -function fromLine(x0, y0, x1, y1, min$$1, max$$1) { - min$$1[0] = mathMin$2(x0, x1); - min$$1[1] = mathMin$2(y0, y1); - max$$1[0] = mathMax$2(x0, x1); - max$$1[1] = mathMax$2(y0, y1); -} - -var xDim = []; -var yDim = []; -/** - * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中 - * @memberOf module:zrender/core/bbox - * @param {number} x0 - * @param {number} y0 - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x3 - * @param {number} y3 - * @param {Array.} min - * @param {Array.} max - */ -function fromCubic( - x0, y0, x1, y1, x2, y2, x3, y3, min$$1, max$$1 -) { - var cubicExtrema$$1 = cubicExtrema; - var cubicAt$$1 = cubicAt; - var i; - var n = cubicExtrema$$1(x0, x1, x2, x3, xDim); - min$$1[0] = Infinity; - min$$1[1] = Infinity; - max$$1[0] = -Infinity; - max$$1[1] = -Infinity; - - for (i = 0; i < n; i++) { - var x = cubicAt$$1(x0, x1, x2, x3, xDim[i]); - min$$1[0] = mathMin$2(x, min$$1[0]); - max$$1[0] = mathMax$2(x, max$$1[0]); - } - n = cubicExtrema$$1(y0, y1, y2, y3, yDim); - for (i = 0; i < n; i++) { - var y = cubicAt$$1(y0, y1, y2, y3, yDim[i]); - min$$1[1] = mathMin$2(y, min$$1[1]); - max$$1[1] = mathMax$2(y, max$$1[1]); - } - - min$$1[0] = mathMin$2(x0, min$$1[0]); - max$$1[0] = mathMax$2(x0, max$$1[0]); - min$$1[0] = mathMin$2(x3, min$$1[0]); - max$$1[0] = mathMax$2(x3, max$$1[0]); - - min$$1[1] = mathMin$2(y0, min$$1[1]); - max$$1[1] = mathMax$2(y0, max$$1[1]); - min$$1[1] = mathMin$2(y3, min$$1[1]); - max$$1[1] = mathMax$2(y3, max$$1[1]); -} - -/** - * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒,写入`min`和`max`中 - * @memberOf module:zrender/core/bbox - * @param {number} x0 - * @param {number} y0 - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {Array.} min - * @param {Array.} max - */ -function fromQuadratic(x0, y0, x1, y1, x2, y2, min$$1, max$$1) { - var quadraticExtremum$$1 = quadraticExtremum; - var quadraticAt$$1 = quadraticAt; - // Find extremities, where derivative in x dim or y dim is zero - var tx = - mathMax$2( - mathMin$2(quadraticExtremum$$1(x0, x1, x2), 1), 0 - ); - var ty = - mathMax$2( - mathMin$2(quadraticExtremum$$1(y0, y1, y2), 1), 0 - ); - - var x = quadraticAt$$1(x0, x1, x2, tx); - var y = quadraticAt$$1(y0, y1, y2, ty); - - min$$1[0] = mathMin$2(x0, x2, x); - min$$1[1] = mathMin$2(y0, y2, y); - max$$1[0] = mathMax$2(x0, x2, x); - max$$1[1] = mathMax$2(y0, y2, y); -} - -/** - * 从圆弧中计算出最小包围盒,写入`min`和`max`中 - * @method - * @memberOf module:zrender/core/bbox - * @param {number} x - * @param {number} y - * @param {number} rx - * @param {number} ry - * @param {number} startAngle - * @param {number} endAngle - * @param {number} anticlockwise - * @param {Array.} min - * @param {Array.} max - */ -function fromArc( - x, y, rx, ry, startAngle, endAngle, anticlockwise, min$$1, max$$1 -) { - var vec2Min = min; - var vec2Max = max; - - var diff = Math.abs(startAngle - endAngle); - - - if (diff % PI2 < 1e-4 && diff > 1e-4) { - // Is a circle - min$$1[0] = x - rx; - min$$1[1] = y - ry; - max$$1[0] = x + rx; - max$$1[1] = y + ry; - return; - } - - start[0] = mathCos$2(startAngle) * rx + x; - start[1] = mathSin$2(startAngle) * ry + y; - - end[0] = mathCos$2(endAngle) * rx + x; - end[1] = mathSin$2(endAngle) * ry + y; - - vec2Min(min$$1, start, end); - vec2Max(max$$1, start, end); - - // Thresh to [0, Math.PI * 2] - startAngle = startAngle % (PI2); - if (startAngle < 0) { - startAngle = startAngle + PI2; - } - endAngle = endAngle % (PI2); - if (endAngle < 0) { - endAngle = endAngle + PI2; - } - - if (startAngle > endAngle && !anticlockwise) { - endAngle += PI2; - } - else if (startAngle < endAngle && anticlockwise) { - startAngle += PI2; - } - if (anticlockwise) { - var tmp = endAngle; - endAngle = startAngle; - startAngle = tmp; - } - - // var number = 0; - // var step = (anticlockwise ? -Math.PI : Math.PI) / 2; - for (var angle = 0; angle < endAngle; angle += Math.PI / 2) { - if (angle > startAngle) { - extremity[0] = mathCos$2(angle) * rx + x; - extremity[1] = mathSin$2(angle) * ry + y; - - vec2Min(min$$1, extremity, min$$1); - vec2Max(max$$1, extremity, max$$1); - } - } -} - -/** - * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中 - * 可以用于 isInsidePath 判断以及获取boundingRect - * - * @module zrender/core/PathProxy - * @author Yi Shen (http://www.github.com/pissang) - */ - -// TODO getTotalLength, getPointAtLength - -/* global Float32Array */ - -var CMD = { - M: 1, - L: 2, - C: 3, - Q: 4, - A: 5, - Z: 6, - // Rect - R: 7 -}; - -// var CMD_MEM_SIZE = { -// M: 3, -// L: 3, -// C: 7, -// Q: 5, -// A: 9, -// R: 5, -// Z: 1 -// }; - -var min$1 = []; -var max$1 = []; -var min2 = []; -var max2 = []; -var mathMin$1 = Math.min; -var mathMax$1 = Math.max; -var mathCos$1 = Math.cos; -var mathSin$1 = Math.sin; -var mathSqrt$1 = Math.sqrt; -var mathAbs = Math.abs; - -var hasTypedArray = typeof Float32Array !== 'undefined'; - -/** - * @alias module:zrender/core/PathProxy - * @constructor - */ -var PathProxy = function (notSaveData) { - - this._saveData = !(notSaveData || false); - - if (this._saveData) { - /** - * Path data. Stored as flat array - * @type {Array.} - */ - this.data = []; - } - - this._ctx = null; -}; - -/** - * 快速计算Path包围盒(并不是最小包围盒) - * @return {Object} - */ -PathProxy.prototype = { - - constructor: PathProxy, - - _xi: 0, - _yi: 0, - - _x0: 0, - _y0: 0, - // Unit x, Unit y. Provide for avoiding drawing that too short line segment - _ux: 0, - _uy: 0, - - _len: 0, - - _lineDash: null, - - _dashOffset: 0, - - _dashIdx: 0, - - _dashSum: 0, - - /** - * @readOnly - */ - setScale: function (sx, sy, segmentIgnoreThreshold) { - // Compat. Previously there is no segmentIgnoreThreshold. - segmentIgnoreThreshold = segmentIgnoreThreshold || 0; - this._ux = mathAbs(segmentIgnoreThreshold / devicePixelRatio / sx) || 0; - this._uy = mathAbs(segmentIgnoreThreshold / devicePixelRatio / sy) || 0; - }, - - getContext: function () { - return this._ctx; - }, - - /** - * @param {CanvasRenderingContext2D} ctx - * @return {module:zrender/core/PathProxy} - */ - beginPath: function (ctx) { - - this._ctx = ctx; - - ctx && ctx.beginPath(); - - ctx && (this.dpr = ctx.dpr); - - // Reset - if (this._saveData) { - this._len = 0; - } - - if (this._lineDash) { - this._lineDash = null; - - this._dashOffset = 0; - } - - return this; - }, - - /** - * @param {number} x - * @param {number} y - * @return {module:zrender/core/PathProxy} - */ - moveTo: function (x, y) { - this.addData(CMD.M, x, y); - this._ctx && this._ctx.moveTo(x, y); - - // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用 - // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。 - // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要 - // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持 - this._x0 = x; - this._y0 = y; - - this._xi = x; - this._yi = y; - - return this; - }, - - /** - * @param {number} x - * @param {number} y - * @return {module:zrender/core/PathProxy} - */ - lineTo: function (x, y) { - var exceedUnit = mathAbs(x - this._xi) > this._ux - || mathAbs(y - this._yi) > this._uy - // Force draw the first segment - || this._len < 5; - - this.addData(CMD.L, x, y); - - if (this._ctx && exceedUnit) { - this._needsDash() ? this._dashedLineTo(x, y) - : this._ctx.lineTo(x, y); - } - if (exceedUnit) { - this._xi = x; - this._yi = y; - } - - return this; - }, - - /** - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x3 - * @param {number} y3 - * @return {module:zrender/core/PathProxy} - */ - bezierCurveTo: function (x1, y1, x2, y2, x3, y3) { - this.addData(CMD.C, x1, y1, x2, y2, x3, y3); - if (this._ctx) { - this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3) - : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); - } - this._xi = x3; - this._yi = y3; - return this; - }, - - /** - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @return {module:zrender/core/PathProxy} - */ - quadraticCurveTo: function (x1, y1, x2, y2) { - this.addData(CMD.Q, x1, y1, x2, y2); - if (this._ctx) { - this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2) - : this._ctx.quadraticCurveTo(x1, y1, x2, y2); - } - this._xi = x2; - this._yi = y2; - return this; - }, - - /** - * @param {number} cx - * @param {number} cy - * @param {number} r - * @param {number} startAngle - * @param {number} endAngle - * @param {boolean} anticlockwise - * @return {module:zrender/core/PathProxy} - */ - arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) { - this.addData( - CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1 - ); - this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise); - - this._xi = mathCos$1(endAngle) * r + cx; - this._yi = mathSin$1(endAngle) * r + cy; - return this; - }, - - // TODO - arcTo: function (x1, y1, x2, y2, radius) { - if (this._ctx) { - this._ctx.arcTo(x1, y1, x2, y2, radius); - } - return this; - }, - - // TODO - rect: function (x, y, w, h) { - this._ctx && this._ctx.rect(x, y, w, h); - this.addData(CMD.R, x, y, w, h); - return this; - }, - - /** - * @return {module:zrender/core/PathProxy} - */ - closePath: function () { - this.addData(CMD.Z); - - var ctx = this._ctx; - var x0 = this._x0; - var y0 = this._y0; - if (ctx) { - this._needsDash() && this._dashedLineTo(x0, y0); - ctx.closePath(); - } - - this._xi = x0; - this._yi = y0; - return this; - }, - - /** - * Context 从外部传入,因为有可能是 rebuildPath 完之后再 fill。 - * stroke 同样 - * @param {CanvasRenderingContext2D} ctx - * @return {module:zrender/core/PathProxy} - */ - fill: function (ctx) { - ctx && ctx.fill(); - this.toStatic(); - }, - - /** - * @param {CanvasRenderingContext2D} ctx - * @return {module:zrender/core/PathProxy} - */ - stroke: function (ctx) { - ctx && ctx.stroke(); - this.toStatic(); - }, - - /** - * 必须在其它绘制命令前调用 - * Must be invoked before all other path drawing methods - * @return {module:zrender/core/PathProxy} - */ - setLineDash: function (lineDash) { - if (lineDash instanceof Array) { - this._lineDash = lineDash; - - this._dashIdx = 0; - - var lineDashSum = 0; - for (var i = 0; i < lineDash.length; i++) { - lineDashSum += lineDash[i]; - } - this._dashSum = lineDashSum; - } - return this; - }, - - /** - * 必须在其它绘制命令前调用 - * Must be invoked before all other path drawing methods - * @return {module:zrender/core/PathProxy} - */ - setLineDashOffset: function (offset) { - this._dashOffset = offset; - return this; - }, - - /** - * - * @return {boolean} - */ - len: function () { - return this._len; - }, - - /** - * 直接设置 Path 数据 - */ - setData: function (data) { - - var len$$1 = data.length; - - if (!(this.data && this.data.length === len$$1) && hasTypedArray) { - this.data = new Float32Array(len$$1); - } - - for (var i = 0; i < len$$1; i++) { - this.data[i] = data[i]; - } - - this._len = len$$1; - }, - - /** - * 添加子路径 - * @param {module:zrender/core/PathProxy|Array.} path - */ - appendPath: function (path) { - if (!(path instanceof Array)) { - path = [path]; - } - var len$$1 = path.length; - var appendSize = 0; - var offset = this._len; - for (var i = 0; i < len$$1; i++) { - appendSize += path[i].len(); - } - if (hasTypedArray && (this.data instanceof Float32Array)) { - this.data = new Float32Array(offset + appendSize); - } - for (var i = 0; i < len$$1; i++) { - var appendPathData = path[i].data; - for (var k = 0; k < appendPathData.length; k++) { - this.data[offset++] = appendPathData[k]; - } - } - this._len = offset; - }, - - /** - * 填充 Path 数据。 - * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。 - */ - addData: function (cmd) { - if (!this._saveData) { - return; - } - - var data = this.data; - if (this._len + arguments.length > data.length) { - // 因为之前的数组已经转换成静态的 Float32Array - // 所以不够用时需要扩展一个新的动态数组 - this._expandData(); - data = this.data; - } - for (var i = 0; i < arguments.length; i++) { - data[this._len++] = arguments[i]; - } - - this._prevCmd = cmd; - }, - - _expandData: function () { - // Only if data is Float32Array - if (!(this.data instanceof Array)) { - var newData = []; - for (var i = 0; i < this._len; i++) { - newData[i] = this.data[i]; - } - this.data = newData; - } - }, - - /** - * If needs js implemented dashed line - * @return {boolean} - * @private - */ - _needsDash: function () { - return this._lineDash; - }, - - _dashedLineTo: function (x1, y1) { - var dashSum = this._dashSum; - var offset = this._dashOffset; - var lineDash = this._lineDash; - var ctx = this._ctx; - - var x0 = this._xi; - var y0 = this._yi; - var dx = x1 - x0; - var dy = y1 - y0; - var dist$$1 = mathSqrt$1(dx * dx + dy * dy); - var x = x0; - var y = y0; - var dash; - var nDash = lineDash.length; - var idx; - dx /= dist$$1; - dy /= dist$$1; - - if (offset < 0) { - // Convert to positive offset - offset = dashSum + offset; - } - offset %= dashSum; - x -= offset * dx; - y -= offset * dy; - - while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1) - || (dx === 0 && ((dy > 0 && y <= y1) || (dy < 0 && y >= y1)))) { - idx = this._dashIdx; - dash = lineDash[idx]; - x += dx * dash; - y += dy * dash; - this._dashIdx = (idx + 1) % nDash; - // Skip positive offset - if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) { - continue; - } - ctx[idx % 2 ? 'moveTo' : 'lineTo']( - dx >= 0 ? mathMin$1(x, x1) : mathMax$1(x, x1), - dy >= 0 ? mathMin$1(y, y1) : mathMax$1(y, y1) - ); - } - // Offset for next lineTo - dx = x - x1; - dy = y - y1; - this._dashOffset = -mathSqrt$1(dx * dx + dy * dy); - }, - - // Not accurate dashed line to - _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) { - var dashSum = this._dashSum; - var offset = this._dashOffset; - var lineDash = this._lineDash; - var ctx = this._ctx; - - var x0 = this._xi; - var y0 = this._yi; - var t; - var dx; - var dy; - var cubicAt$$1 = cubicAt; - var bezierLen = 0; - var idx = this._dashIdx; - var nDash = lineDash.length; - - var x; - var y; - - var tmpLen = 0; - - if (offset < 0) { - // Convert to positive offset - offset = dashSum + offset; - } - offset %= dashSum; - // Bezier approx length - for (t = 0; t < 1; t += 0.1) { - dx = cubicAt$$1(x0, x1, x2, x3, t + 0.1) - - cubicAt$$1(x0, x1, x2, x3, t); - dy = cubicAt$$1(y0, y1, y2, y3, t + 0.1) - - cubicAt$$1(y0, y1, y2, y3, t); - bezierLen += mathSqrt$1(dx * dx + dy * dy); - } - - // Find idx after add offset - for (; idx < nDash; idx++) { - tmpLen += lineDash[idx]; - if (tmpLen > offset) { - break; - } - } - t = (tmpLen - offset) / bezierLen; - - while (t <= 1) { - - x = cubicAt$$1(x0, x1, x2, x3, t); - y = cubicAt$$1(y0, y1, y2, y3, t); - - // Use line to approximate dashed bezier - // Bad result if dash is long - idx % 2 ? ctx.moveTo(x, y) - : ctx.lineTo(x, y); - - t += lineDash[idx] / bezierLen; - - idx = (idx + 1) % nDash; - } - - // Finish the last segment and calculate the new offset - (idx % 2 !== 0) && ctx.lineTo(x3, y3); - dx = x3 - x; - dy = y3 - y; - this._dashOffset = -mathSqrt$1(dx * dx + dy * dy); - }, - - _dashedQuadraticTo: function (x1, y1, x2, y2) { - // Convert quadratic to cubic using degree elevation - var x3 = x2; - var y3 = y2; - x2 = (x2 + 2 * x1) / 3; - y2 = (y2 + 2 * y1) / 3; - x1 = (this._xi + 2 * x1) / 3; - y1 = (this._yi + 2 * y1) / 3; - - this._dashedBezierTo(x1, y1, x2, y2, x3, y3); - }, - - /** - * 转成静态的 Float32Array 减少堆内存占用 - * Convert dynamic array to static Float32Array - */ - toStatic: function () { - var data = this.data; - if (data instanceof Array) { - data.length = this._len; - if (hasTypedArray) { - this.data = new Float32Array(data); - } - } - }, - - /** - * @return {module:zrender/core/BoundingRect} - */ - getBoundingRect: function () { - min$1[0] = min$1[1] = min2[0] = min2[1] = Number.MAX_VALUE; - max$1[0] = max$1[1] = max2[0] = max2[1] = -Number.MAX_VALUE; - - var data = this.data; - var xi = 0; - var yi = 0; - var x0 = 0; - var y0 = 0; - - for (var i = 0; i < data.length;) { - var cmd = data[i++]; - - if (i === 1) { - // 如果第一个命令是 L, C, Q - // 则 previous point 同绘制命令的第一个 point - // - // 第一个命令为 Arc 的情况下会在后面特殊处理 - xi = data[i]; - yi = data[i + 1]; - - x0 = xi; - y0 = yi; - } - - switch (cmd) { - case CMD.M: - // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点 - // 在 closePath 的时候使用 - x0 = data[i++]; - y0 = data[i++]; - xi = x0; - yi = y0; - min2[0] = x0; - min2[1] = y0; - max2[0] = x0; - max2[1] = y0; - break; - case CMD.L: - fromLine(xi, yi, data[i], data[i + 1], min2, max2); - xi = data[i++]; - yi = data[i++]; - break; - case CMD.C: - fromCubic( - xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], - min2, max2 - ); - xi = data[i++]; - yi = data[i++]; - break; - case CMD.Q: - fromQuadratic( - xi, yi, data[i++], data[i++], data[i], data[i + 1], - min2, max2 - ); - xi = data[i++]; - yi = data[i++]; - break; - case CMD.A: - // TODO Arc 判断的开销比较大 - var cx = data[i++]; - var cy = data[i++]; - var rx = data[i++]; - var ry = data[i++]; - var startAngle = data[i++]; - var endAngle = data[i++] + startAngle; - // TODO Arc 旋转 - i += 1; - var anticlockwise = 1 - data[i++]; - - if (i === 1) { - // 直接使用 arc 命令 - // 第一个命令起点还未定义 - x0 = mathCos$1(startAngle) * rx + cx; - y0 = mathSin$1(startAngle) * ry + cy; - } - - fromArc( - cx, cy, rx, ry, startAngle, endAngle, - anticlockwise, min2, max2 - ); - - xi = mathCos$1(endAngle) * rx + cx; - yi = mathSin$1(endAngle) * ry + cy; - break; - case CMD.R: - x0 = xi = data[i++]; - y0 = yi = data[i++]; - var width = data[i++]; - var height = data[i++]; - // Use fromLine - fromLine(x0, y0, x0 + width, y0 + height, min2, max2); - break; - case CMD.Z: - xi = x0; - yi = y0; - break; - } - - // Union - min(min$1, min$1, min2); - max(max$1, max$1, max2); - } - - // No data - if (i === 0) { - min$1[0] = min$1[1] = max$1[0] = max$1[1] = 0; - } - - return new BoundingRect( - min$1[0], min$1[1], max$1[0] - min$1[0], max$1[1] - min$1[1] - ); - }, - - /** - * Rebuild path from current data - * Rebuild path will not consider javascript implemented line dash. - * @param {CanvasRenderingContext2D} ctx - */ - rebuildPath: function (ctx) { - var d = this.data; - var x0; - var y0; - var xi; - var yi; - var x; - var y; - var ux = this._ux; - var uy = this._uy; - var len$$1 = this._len; - for (var i = 0; i < len$$1;) { - var cmd = d[i++]; - - if (i === 1) { - // 如果第一个命令是 L, C, Q - // 则 previous point 同绘制命令的第一个 point - // - // 第一个命令为 Arc 的情况下会在后面特殊处理 - xi = d[i]; - yi = d[i + 1]; - - x0 = xi; - y0 = yi; - } - switch (cmd) { - case CMD.M: - x0 = xi = d[i++]; - y0 = yi = d[i++]; - ctx.moveTo(xi, yi); - break; - case CMD.L: - x = d[i++]; - y = d[i++]; - // Not draw too small seg between - if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len$$1 - 1) { - ctx.lineTo(x, y); - xi = x; - yi = y; - } - break; - case CMD.C: - ctx.bezierCurveTo( - d[i++], d[i++], d[i++], d[i++], d[i++], d[i++] - ); - xi = d[i - 2]; - yi = d[i - 1]; - break; - case CMD.Q: - ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]); - xi = d[i - 2]; - yi = d[i - 1]; - break; - case CMD.A: - var cx = d[i++]; - var cy = d[i++]; - var rx = d[i++]; - var ry = d[i++]; - var theta = d[i++]; - var dTheta = d[i++]; - var psi = d[i++]; - var fs = d[i++]; - var r = (rx > ry) ? rx : ry; - var scaleX = (rx > ry) ? 1 : rx / ry; - var scaleY = (rx > ry) ? ry / rx : 1; - var isEllipse = Math.abs(rx - ry) > 1e-3; - var endAngle = theta + dTheta; - if (isEllipse) { - ctx.translate(cx, cy); - ctx.rotate(psi); - ctx.scale(scaleX, scaleY); - ctx.arc(0, 0, r, theta, endAngle, 1 - fs); - ctx.scale(1 / scaleX, 1 / scaleY); - ctx.rotate(-psi); - ctx.translate(-cx, -cy); - } - else { - ctx.arc(cx, cy, r, theta, endAngle, 1 - fs); - } - - if (i === 1) { - // 直接使用 arc 命令 - // 第一个命令起点还未定义 - x0 = mathCos$1(theta) * rx + cx; - y0 = mathSin$1(theta) * ry + cy; - } - xi = mathCos$1(endAngle) * rx + cx; - yi = mathSin$1(endAngle) * ry + cy; - break; - case CMD.R: - x0 = xi = d[i]; - y0 = yi = d[i + 1]; - ctx.rect(d[i++], d[i++], d[i++], d[i++]); - break; - case CMD.Z: - ctx.closePath(); - xi = x0; - yi = y0; - } - } - } -}; - -PathProxy.CMD = CMD; - -/** - * 线段包含判断 - * @param {number} x0 - * @param {number} y0 - * @param {number} x1 - * @param {number} y1 - * @param {number} lineWidth - * @param {number} x - * @param {number} y - * @return {boolean} - */ -function containStroke$1(x0, y0, x1, y1, lineWidth, x, y) { - if (lineWidth === 0) { - return false; - } - var _l = lineWidth; - var _a = 0; - var _b = x0; - // Quick reject - if ( - (y > y0 + _l && y > y1 + _l) - || (y < y0 - _l && y < y1 - _l) - || (x > x0 + _l && x > x1 + _l) - || (x < x0 - _l && x < x1 - _l) - ) { - return false; - } - - if (x0 !== x1) { - _a = (y0 - y1) / (x0 - x1); - _b = (x0 * y1 - x1 * y0) / (x0 - x1); - } - else { - return Math.abs(x - x0) <= _l / 2; - } - var tmp = _a * x - y + _b; - var _s = tmp * tmp / (_a * _a + 1); - return _s <= _l / 2 * _l / 2; -} - -/** - * 三次贝塞尔曲线描边包含判断 - * @param {number} x0 - * @param {number} y0 - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x3 - * @param {number} y3 - * @param {number} lineWidth - * @param {number} x - * @param {number} y - * @return {boolean} - */ -function containStroke$2(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) { - if (lineWidth === 0) { - return false; - } - var _l = lineWidth; - // Quick reject - if ( - (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l) - || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l) - || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l) - || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) - ) { - return false; - } - var d = cubicProjectPoint( - x0, y0, x1, y1, x2, y2, x3, y3, - x, y, null - ); - return d <= _l / 2; -} - -/** - * 二次贝塞尔曲线描边包含判断 - * @param {number} x0 - * @param {number} y0 - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} lineWidth - * @param {number} x - * @param {number} y - * @return {boolean} - */ -function containStroke$3(x0, y0, x1, y1, x2, y2, lineWidth, x, y) { - if (lineWidth === 0) { - return false; - } - var _l = lineWidth; - // Quick reject - if ( - (y > y0 + _l && y > y1 + _l && y > y2 + _l) - || (y < y0 - _l && y < y1 - _l && y < y2 - _l) - || (x > x0 + _l && x > x1 + _l && x > x2 + _l) - || (x < x0 - _l && x < x1 - _l && x < x2 - _l) - ) { - return false; - } - var d = quadraticProjectPoint( - x0, y0, x1, y1, x2, y2, - x, y, null - ); - return d <= _l / 2; -} - -var PI2$3 = Math.PI * 2; - -function normalizeRadian(angle) { - angle %= PI2$3; - if (angle < 0) { - angle += PI2$3; - } - return angle; -} - -var PI2$2 = Math.PI * 2; - -/** - * 圆弧描边包含判断 - * @param {number} cx - * @param {number} cy - * @param {number} r - * @param {number} startAngle - * @param {number} endAngle - * @param {boolean} anticlockwise - * @param {number} lineWidth - * @param {number} x - * @param {number} y - * @return {Boolean} - */ -function containStroke$4( - cx, cy, r, startAngle, endAngle, anticlockwise, - lineWidth, x, y -) { - - if (lineWidth === 0) { - return false; - } - var _l = lineWidth; - - x -= cx; - y -= cy; - var d = Math.sqrt(x * x + y * y); - - if ((d - _l > r) || (d + _l < r)) { - return false; - } - if (Math.abs(startAngle - endAngle) % PI2$2 < 1e-4) { - // Is a circle - return true; - } - if (anticlockwise) { - var tmp = startAngle; - startAngle = normalizeRadian(endAngle); - endAngle = normalizeRadian(tmp); - } - else { - startAngle = normalizeRadian(startAngle); - endAngle = normalizeRadian(endAngle); - } - if (startAngle > endAngle) { - endAngle += PI2$2; - } - - var angle = Math.atan2(y, x); - if (angle < 0) { - angle += PI2$2; - } - return (angle >= startAngle && angle <= endAngle) - || (angle + PI2$2 >= startAngle && angle + PI2$2 <= endAngle); -} - -function windingLine(x0, y0, x1, y1, x, y) { - if ((y > y0 && y > y1) || (y < y0 && y < y1)) { - return 0; - } - // Ignore horizontal line - if (y1 === y0) { - return 0; - } - var dir = y1 < y0 ? 1 : -1; - var t = (y - y0) / (y1 - y0); - - // Avoid winding error when intersection point is the connect point of two line of polygon - if (t === 1 || t === 0) { - dir = y1 < y0 ? 0.5 : -0.5; - } - - var x_ = t * (x1 - x0) + x0; - - // If (x, y) on the line, considered as "contain". - return x_ === x ? Infinity : x_ > x ? dir : 0; -} - -var CMD$1 = PathProxy.CMD; -var PI2$1 = Math.PI * 2; - -var EPSILON$2 = 1e-4; - -function isAroundEqual(a, b) { - return Math.abs(a - b) < EPSILON$2; -} - -// 临时数组 -var roots = [-1, -1, -1]; -var extrema = [-1, -1]; - -function swapExtrema() { - var tmp = extrema[0]; - extrema[0] = extrema[1]; - extrema[1] = tmp; -} - -function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) { - // Quick reject - if ( - (y > y0 && y > y1 && y > y2 && y > y3) - || (y < y0 && y < y1 && y < y2 && y < y3) - ) { - return 0; - } - var nRoots = cubicRootAt(y0, y1, y2, y3, y, roots); - if (nRoots === 0) { - return 0; - } - else { - var w = 0; - var nExtrema = -1; - var y0_; - var y1_; - for (var i = 0; i < nRoots; i++) { - var t = roots[i]; - - // Avoid winding error when intersection point is the connect point of two line of polygon - var unit = (t === 0 || t === 1) ? 0.5 : 1; - - var x_ = cubicAt(x0, x1, x2, x3, t); - if (x_ < x) { // Quick reject - continue; - } - if (nExtrema < 0) { - nExtrema = cubicExtrema(y0, y1, y2, y3, extrema); - if (extrema[1] < extrema[0] && nExtrema > 1) { - swapExtrema(); - } - y0_ = cubicAt(y0, y1, y2, y3, extrema[0]); - if (nExtrema > 1) { - y1_ = cubicAt(y0, y1, y2, y3, extrema[1]); - } - } - if (nExtrema === 2) { - // 分成三段单调函数 - if (t < extrema[0]) { - w += y0_ < y0 ? unit : -unit; - } - else if (t < extrema[1]) { - w += y1_ < y0_ ? unit : -unit; - } - else { - w += y3 < y1_ ? unit : -unit; - } - } - else { - // 分成两段单调函数 - if (t < extrema[0]) { - w += y0_ < y0 ? unit : -unit; - } - else { - w += y3 < y0_ ? unit : -unit; - } - } - } - return w; - } -} - -function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) { - // Quick reject - if ( - (y > y0 && y > y1 && y > y2) - || (y < y0 && y < y1 && y < y2) - ) { - return 0; - } - var nRoots = quadraticRootAt(y0, y1, y2, y, roots); - if (nRoots === 0) { - return 0; - } - else { - var t = quadraticExtremum(y0, y1, y2); - if (t >= 0 && t <= 1) { - var w = 0; - var y_ = quadraticAt(y0, y1, y2, t); - for (var i = 0; i < nRoots; i++) { - // Remove one endpoint. - var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1; - - var x_ = quadraticAt(x0, x1, x2, roots[i]); - if (x_ < x) { // Quick reject - continue; - } - if (roots[i] < t) { - w += y_ < y0 ? unit : -unit; - } - else { - w += y2 < y_ ? unit : -unit; - } - } - return w; - } - else { - // Remove one endpoint. - var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1; - - var x_ = quadraticAt(x0, x1, x2, roots[0]); - if (x_ < x) { // Quick reject - return 0; - } - return y2 < y0 ? unit : -unit; - } - } -} - -// TODO -// Arc 旋转 -function windingArc( - cx, cy, r, startAngle, endAngle, anticlockwise, x, y -) { - y -= cy; - if (y > r || y < -r) { - return 0; - } - var tmp = Math.sqrt(r * r - y * y); - roots[0] = -tmp; - roots[1] = tmp; - - var diff = Math.abs(startAngle - endAngle); - if (diff < 1e-4) { - return 0; - } - if (diff % PI2$1 < 1e-4) { - // Is a circle - startAngle = 0; - endAngle = PI2$1; - var dir = anticlockwise ? 1 : -1; - if (x >= roots[0] + cx && x <= roots[1] + cx) { - return dir; - } - else { - return 0; - } - } - - if (anticlockwise) { - var tmp = startAngle; - startAngle = normalizeRadian(endAngle); - endAngle = normalizeRadian(tmp); - } - else { - startAngle = normalizeRadian(startAngle); - endAngle = normalizeRadian(endAngle); - } - if (startAngle > endAngle) { - endAngle += PI2$1; - } - - var w = 0; - for (var i = 0; i < 2; i++) { - var x_ = roots[i]; - if (x_ + cx > x) { - var angle = Math.atan2(y, x_); - var dir = anticlockwise ? 1 : -1; - if (angle < 0) { - angle = PI2$1 + angle; - } - if ( - (angle >= startAngle && angle <= endAngle) - || (angle + PI2$1 >= startAngle && angle + PI2$1 <= endAngle) - ) { - if (angle > Math.PI / 2 && angle < Math.PI * 1.5) { - dir = -dir; - } - w += dir; - } - } - } - return w; -} - -function containPath(data, lineWidth, isStroke, x, y) { - var w = 0; - var xi = 0; - var yi = 0; - var x0 = 0; - var y0 = 0; - - for (var i = 0; i < data.length;) { - var cmd = data[i++]; - // Begin a new subpath - if (cmd === CMD$1.M && i > 1) { - // Close previous subpath - if (!isStroke) { - w += windingLine(xi, yi, x0, y0, x, y); - } - // 如果被任何一个 subpath 包含 - // if (w !== 0) { - // return true; - // } - } - - if (i === 1) { - // 如果第一个命令是 L, C, Q - // 则 previous point 同绘制命令的第一个 point - // - // 第一个命令为 Arc 的情况下会在后面特殊处理 - xi = data[i]; - yi = data[i + 1]; - - x0 = xi; - y0 = yi; - } - - switch (cmd) { - case CMD$1.M: - // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点 - // 在 closePath 的时候使用 - x0 = data[i++]; - y0 = data[i++]; - xi = x0; - yi = y0; - break; - case CMD$1.L: - if (isStroke) { - if (containStroke$1(xi, yi, data[i], data[i + 1], lineWidth, x, y)) { - return true; - } - } - else { - // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN - w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0; - } - xi = data[i++]; - yi = data[i++]; - break; - case CMD$1.C: - if (isStroke) { - if (containStroke$2(xi, yi, - data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], - lineWidth, x, y - )) { - return true; - } - } - else { - w += windingCubic( - xi, yi, - data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], - x, y - ) || 0; - } - xi = data[i++]; - yi = data[i++]; - break; - case CMD$1.Q: - if (isStroke) { - if (containStroke$3(xi, yi, - data[i++], data[i++], data[i], data[i + 1], - lineWidth, x, y - )) { - return true; - } - } - else { - w += windingQuadratic( - xi, yi, - data[i++], data[i++], data[i], data[i + 1], - x, y - ) || 0; - } - xi = data[i++]; - yi = data[i++]; - break; - case CMD$1.A: - // TODO Arc 判断的开销比较大 - var cx = data[i++]; - var cy = data[i++]; - var rx = data[i++]; - var ry = data[i++]; - var theta = data[i++]; - var dTheta = data[i++]; - // TODO Arc 旋转 - i += 1; - var anticlockwise = 1 - data[i++]; - var x1 = Math.cos(theta) * rx + cx; - var y1 = Math.sin(theta) * ry + cy; - // 不是直接使用 arc 命令 - if (i > 1) { - w += windingLine(xi, yi, x1, y1, x, y); - } - else { - // 第一个命令起点还未定义 - x0 = x1; - y0 = y1; - } - // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放 - var _x = (x - cx) * ry / rx + cx; - if (isStroke) { - if (containStroke$4( - cx, cy, ry, theta, theta + dTheta, anticlockwise, - lineWidth, _x, y - )) { - return true; - } - } - else { - w += windingArc( - cx, cy, ry, theta, theta + dTheta, anticlockwise, - _x, y - ); - } - xi = Math.cos(theta + dTheta) * rx + cx; - yi = Math.sin(theta + dTheta) * ry + cy; - break; - case CMD$1.R: - x0 = xi = data[i++]; - y0 = yi = data[i++]; - var width = data[i++]; - var height = data[i++]; - var x1 = x0 + width; - var y1 = y0 + height; - if (isStroke) { - if (containStroke$1(x0, y0, x1, y0, lineWidth, x, y) - || containStroke$1(x1, y0, x1, y1, lineWidth, x, y) - || containStroke$1(x1, y1, x0, y1, lineWidth, x, y) - || containStroke$1(x0, y1, x0, y0, lineWidth, x, y) - ) { - return true; - } - } - else { - // FIXME Clockwise ? - w += windingLine(x1, y0, x1, y1, x, y); - w += windingLine(x0, y1, x0, y0, x, y); - } - break; - case CMD$1.Z: - if (isStroke) { - if (containStroke$1( - xi, yi, x0, y0, lineWidth, x, y - )) { - return true; - } - } - else { - // Close a subpath - w += windingLine(xi, yi, x0, y0, x, y); - // 如果被任何一个 subpath 包含 - // FIXME subpaths may overlap - // if (w !== 0) { - // return true; - // } - } - xi = x0; - yi = y0; - break; - } - } - if (!isStroke && !isAroundEqual(yi, y0)) { - w += windingLine(xi, yi, x0, y0, x, y) || 0; - } - return w !== 0; -} - -function contain(pathData, x, y) { - return containPath(pathData, 0, false, x, y); -} - -function containStroke(pathData, lineWidth, x, y) { - return containPath(pathData, lineWidth, true, x, y); -} - -var getCanvasPattern = Pattern.prototype.getCanvasPattern; - -var abs = Math.abs; - -var pathProxyForDraw = new PathProxy(true); -/** - * @alias module:zrender/graphic/Path - * @extends module:zrender/graphic/Displayable - * @constructor - * @param {Object} opts - */ -function Path(opts) { - Displayable.call(this, opts); - - /** - * @type {module:zrender/core/PathProxy} - * @readOnly - */ - this.path = null; -} - -Path.prototype = { - - constructor: Path, - - type: 'path', - - __dirtyPath: true, - - strokeContainThreshold: 5, - - // This item default to be false. But in map series in echarts, - // in order to improve performance, it should be set to true, - // so the shorty segment won't draw. - segmentIgnoreThreshold: 0, - - /** - * See `module:zrender/src/graphic/helper/subPixelOptimize`. - * @type {boolean} - */ - subPixelOptimize: false, - - brush: function (ctx, prevEl) { - var style = this.style; - var path = this.path || pathProxyForDraw; - var hasStroke = style.hasStroke(); - var hasFill = style.hasFill(); - var fill = style.fill; - var stroke = style.stroke; - var hasFillGradient = hasFill && !!(fill.colorStops); - var hasStrokeGradient = hasStroke && !!(stroke.colorStops); - var hasFillPattern = hasFill && !!(fill.image); - var hasStrokePattern = hasStroke && !!(stroke.image); - - style.bind(ctx, this, prevEl); - this.setTransform(ctx); - - if (this.__dirty) { - var rect; - // Update gradient because bounding rect may changed - if (hasFillGradient) { - rect = rect || this.getBoundingRect(); - this._fillGradient = style.getGradient(ctx, fill, rect); - } - if (hasStrokeGradient) { - rect = rect || this.getBoundingRect(); - this._strokeGradient = style.getGradient(ctx, stroke, rect); - } - } - // Use the gradient or pattern - if (hasFillGradient) { - // PENDING If may have affect the state - ctx.fillStyle = this._fillGradient; - } - else if (hasFillPattern) { - ctx.fillStyle = getCanvasPattern.call(fill, ctx); - } - if (hasStrokeGradient) { - ctx.strokeStyle = this._strokeGradient; - } - else if (hasStrokePattern) { - ctx.strokeStyle = getCanvasPattern.call(stroke, ctx); - } - - var lineDash = style.lineDash; - var lineDashOffset = style.lineDashOffset; - - var ctxLineDash = !!ctx.setLineDash; - - // Update path sx, sy - var scale = this.getGlobalScale(); - path.setScale(scale[0], scale[1], this.segmentIgnoreThreshold); - - // Proxy context - // Rebuild path in following 2 cases - // 1. Path is dirty - // 2. Path needs javascript implemented lineDash stroking. - // In this case, lineDash information will not be saved in PathProxy - if (this.__dirtyPath - || (lineDash && !ctxLineDash && hasStroke) - ) { - path.beginPath(ctx); - - // Setting line dash before build path - if (lineDash && !ctxLineDash) { - path.setLineDash(lineDash); - path.setLineDashOffset(lineDashOffset); - } - - this.buildPath(path, this.shape, false); - - // Clear path dirty flag - if (this.path) { - this.__dirtyPath = false; - } - } - else { - // Replay path building - ctx.beginPath(); - this.path.rebuildPath(ctx); - } - - if (hasFill) { - if (style.fillOpacity != null) { - var originalGlobalAlpha = ctx.globalAlpha; - ctx.globalAlpha = style.fillOpacity * style.opacity; - path.fill(ctx); - ctx.globalAlpha = originalGlobalAlpha; - } - else { - path.fill(ctx); - } - } - - if (lineDash && ctxLineDash) { - ctx.setLineDash(lineDash); - ctx.lineDashOffset = lineDashOffset; - } - - if (hasStroke) { - if (style.strokeOpacity != null) { - var originalGlobalAlpha = ctx.globalAlpha; - ctx.globalAlpha = style.strokeOpacity * style.opacity; - path.stroke(ctx); - ctx.globalAlpha = originalGlobalAlpha; - } - else { - path.stroke(ctx); - } - } - - if (lineDash && ctxLineDash) { - // PENDING - // Remove lineDash - ctx.setLineDash([]); - } - - // Draw rect text - if (style.text != null) { - // Only restore transform when needs draw text. - this.restoreTransform(ctx); - this.drawRectText(ctx, this.getBoundingRect()); - } - }, - - // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath - // Like in circle - buildPath: function (ctx, shapeCfg, inBundle) {}, - - createPathProxy: function () { - this.path = new PathProxy(); - }, - - getBoundingRect: function () { - var rect = this._rect; - var style = this.style; - var needsUpdateRect = !rect; - if (needsUpdateRect) { - var path = this.path; - if (!path) { - // Create path on demand. - path = this.path = new PathProxy(); - } - if (this.__dirtyPath) { - path.beginPath(); - this.buildPath(path, this.shape, false); - } - rect = path.getBoundingRect(); - } - this._rect = rect; - - if (style.hasStroke()) { - // Needs update rect with stroke lineWidth when - // 1. Element changes scale or lineWidth - // 2. Shape is changed - var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone()); - if (this.__dirty || needsUpdateRect) { - rectWithStroke.copy(rect); - // FIXME Must after updateTransform - var w = style.lineWidth; - // PENDING, Min line width is needed when line is horizontal or vertical - var lineScale = style.strokeNoScale ? this.getLineScale() : 1; - - // Only add extra hover lineWidth when there are no fill - if (!style.hasFill()) { - w = Math.max(w, this.strokeContainThreshold || 4); - } - // Consider line width - // Line scale can't be 0; - if (lineScale > 1e-10) { - rectWithStroke.width += w / lineScale; - rectWithStroke.height += w / lineScale; - rectWithStroke.x -= w / lineScale / 2; - rectWithStroke.y -= w / lineScale / 2; - } - } - - // Return rect with stroke - return rectWithStroke; - } - - return rect; - }, - - contain: function (x, y) { - var localPos = this.transformCoordToLocal(x, y); - var rect = this.getBoundingRect(); - var style = this.style; - x = localPos[0]; - y = localPos[1]; - - if (rect.contain(x, y)) { - var pathData = this.path.data; - if (style.hasStroke()) { - var lineWidth = style.lineWidth; - var lineScale = style.strokeNoScale ? this.getLineScale() : 1; - // Line scale can't be 0; - if (lineScale > 1e-10) { - // Only add extra hover lineWidth when there are no fill - if (!style.hasFill()) { - lineWidth = Math.max(lineWidth, this.strokeContainThreshold); - } - if (containStroke( - pathData, lineWidth / lineScale, x, y - )) { - return true; - } - } - } - if (style.hasFill()) { - return contain(pathData, x, y); - } - } - return false; - }, - - /** - * @param {boolean} dirtyPath - */ - dirty: function (dirtyPath) { - if (dirtyPath == null) { - dirtyPath = true; - } - // Only mark dirty, not mark clean - if (dirtyPath) { - this.__dirtyPath = dirtyPath; - this._rect = null; - } - - this.__dirty = this.__dirtyText = true; - - this.__zr && this.__zr.refresh(); - - // Used as a clipping path - if (this.__clipTarget) { - this.__clipTarget.dirty(); - } - }, - - /** - * Alias for animate('shape') - * @param {boolean} loop - */ - animateShape: function (loop) { - return this.animate('shape', loop); - }, - - // Overwrite attrKV - attrKV: function (key, value) { - // FIXME - if (key === 'shape') { - this.setShape(value); - this.__dirtyPath = true; - this._rect = null; - } - else { - Displayable.prototype.attrKV.call(this, key, value); - } - }, - - /** - * @param {Object|string} key - * @param {*} value - */ - setShape: function (key, value) { - var shape = this.shape; - // Path from string may not have shape - if (shape) { - if (isObject(key)) { - for (var name in key) { - if (key.hasOwnProperty(name)) { - shape[name] = key[name]; - } - } - } - else { - shape[key] = value; - } - this.dirty(true); - } - return this; - }, - - getLineScale: function () { - var m = this.transform; - // Get the line scale. - // Determinant of `m` means how much the area is enlarged by the - // transformation. So its square root can be used as a scale factor - // for width. - return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10 - ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1])) - : 1; - } -}; - -/** - * 扩展一个 Path element, 比如星形,圆等。 - * Extend a path element - * @param {Object} props - * @param {string} props.type Path type - * @param {Function} props.init Initialize - * @param {Function} props.buildPath Overwrite buildPath method - * @param {Object} [props.style] Extended default style config - * @param {Object} [props.shape] Extended default shape config - */ -Path.extend = function (defaults$$1) { - var Sub = function (opts) { - Path.call(this, opts); - - if (defaults$$1.style) { - // Extend default style - this.style.extendFrom(defaults$$1.style, false); - } - - // Extend default shape - var defaultShape = defaults$$1.shape; - if (defaultShape) { - this.shape = this.shape || {}; - var thisShape = this.shape; - for (var name in defaultShape) { - if ( - !thisShape.hasOwnProperty(name) - && defaultShape.hasOwnProperty(name) - ) { - thisShape[name] = defaultShape[name]; - } - } - } - - defaults$$1.init && defaults$$1.init.call(this, opts); - }; - - inherits(Sub, Path); - - // FIXME 不能 extend position, rotation 等引用对象 - for (var name in defaults$$1) { - // Extending prototype values and methods - if (name !== 'style' && name !== 'shape') { - Sub.prototype[name] = defaults$$1[name]; - } - } - - return Sub; -}; - -inherits(Path, Displayable); - -var CMD$2 = PathProxy.CMD; - -var points = [[], [], []]; -var mathSqrt$3 = Math.sqrt; -var mathAtan2 = Math.atan2; - -var transformPath = function (path, m) { - var data = path.data; - var cmd; - var nPoint; - var i; - var j; - var k; - var p; - - var M = CMD$2.M; - var C = CMD$2.C; - var L = CMD$2.L; - var R = CMD$2.R; - var A = CMD$2.A; - var Q = CMD$2.Q; - - for (i = 0, j = 0; i < data.length;) { - cmd = data[i++]; - j = i; - nPoint = 0; - - switch (cmd) { - case M: - nPoint = 1; - break; - case L: - nPoint = 1; - break; - case C: - nPoint = 3; - break; - case Q: - nPoint = 2; - break; - case A: - var x = m[4]; - var y = m[5]; - var sx = mathSqrt$3(m[0] * m[0] + m[1] * m[1]); - var sy = mathSqrt$3(m[2] * m[2] + m[3] * m[3]); - var angle = mathAtan2(-m[1] / sy, m[0] / sx); - // cx - data[i] *= sx; - data[i++] += x; - // cy - data[i] *= sy; - data[i++] += y; - // Scale rx and ry - // FIXME Assume psi is 0 here - data[i++] *= sx; - data[i++] *= sy; - - // Start angle - data[i++] += angle; - // end angle - data[i++] += angle; - // FIXME psi - i += 2; - j = i; - break; - case R: - // x0, y0 - p[0] = data[i++]; - p[1] = data[i++]; - applyTransform(p, p, m); - data[j++] = p[0]; - data[j++] = p[1]; - // x1, y1 - p[0] += data[i++]; - p[1] += data[i++]; - applyTransform(p, p, m); - data[j++] = p[0]; - data[j++] = p[1]; - } - - for (k = 0; k < nPoint; k++) { - var p = points[k]; - p[0] = data[i++]; - p[1] = data[i++]; - - applyTransform(p, p, m); - // Write back - data[j++] = p[0]; - data[j++] = p[1]; - } - } -}; - -// command chars -// var cc = [ -// 'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z', -// 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A' -// ]; - -var mathSqrt = Math.sqrt; -var mathSin = Math.sin; -var mathCos = Math.cos; -var PI = Math.PI; - -var vMag = function (v) { - return Math.sqrt(v[0] * v[0] + v[1] * v[1]); -}; -var vRatio = function (u, v) { - return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)); -}; -var vAngle = function (u, v) { - return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) - * Math.acos(vRatio(u, v)); -}; - -function processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) { - var psi = psiDeg * (PI / 180.0); - var xp = mathCos(psi) * (x1 - x2) / 2.0 - + mathSin(psi) * (y1 - y2) / 2.0; - var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0 - + mathCos(psi) * (y1 - y2) / 2.0; - - var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry); - - if (lambda > 1) { - rx *= mathSqrt(lambda); - ry *= mathSqrt(lambda); - } - - var f = (fa === fs ? -1 : 1) - * mathSqrt((((rx * rx) * (ry * ry)) - - ((rx * rx) * (yp * yp)) - - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp) - + (ry * ry) * (xp * xp)) - ) || 0; - - var cxp = f * rx * yp / ry; - var cyp = f * -ry * xp / rx; - - var cx = (x1 + x2) / 2.0 - + mathCos(psi) * cxp - - mathSin(psi) * cyp; - var cy = (y1 + y2) / 2.0 - + mathSin(psi) * cxp - + mathCos(psi) * cyp; - - var theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]); - var u = [ (xp - cxp) / rx, (yp - cyp) / ry ]; - var v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ]; - var dTheta = vAngle(u, v); - - if (vRatio(u, v) <= -1) { - dTheta = PI; - } - if (vRatio(u, v) >= 1) { - dTheta = 0; - } - if (fs === 0 && dTheta > 0) { - dTheta = dTheta - 2 * PI; - } - if (fs === 1 && dTheta < 0) { - dTheta = dTheta + 2 * PI; - } - - path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs); -} - - -var commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig; -// Consider case: -// (1) delimiter can be comma or space, where continuous commas -// or spaces should be seen as one comma. -// (2) value can be like: -// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983', -// 'l-.5E1,54', '121-23-44-11' (no delimiter) -var numberReg = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g; -// var valueSplitReg = /[\s,]+/; - -function createPathProxyFromString(data) { - if (!data) { - return new PathProxy(); - } - - // var data = data.replace(/-/g, ' -') - // .replace(/ /g, ' ') - // .replace(/ /g, ',') - // .replace(/,,/g, ','); - - // var n; - // create pipes so that we can split the data - // for (n = 0; n < cc.length; n++) { - // cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]); - // } - - // data = data.replace(/-/g, ',-'); - - // create array - // var arr = cs.split('|'); - // init context point - var cpx = 0; - var cpy = 0; - var subpathX = cpx; - var subpathY = cpy; - var prevCmd; - - var path = new PathProxy(); - var CMD = PathProxy.CMD; - - // commandReg.lastIndex = 0; - // var cmdResult; - // while ((cmdResult = commandReg.exec(data)) != null) { - // var cmdStr = cmdResult[1]; - // var cmdContent = cmdResult[2]; - - var cmdList = data.match(commandReg); - for (var l = 0; l < cmdList.length; l++) { - var cmdText = cmdList[l]; - var cmdStr = cmdText.charAt(0); - - var cmd; - - // String#split is faster a little bit than String#replace or RegExp#exec. - // var p = cmdContent.split(valueSplitReg); - // var pLen = 0; - // for (var i = 0; i < p.length; i++) { - // // '' and other invalid str => NaN - // var val = parseFloat(p[i]); - // !isNaN(val) && (p[pLen++] = val); - // } - - var p = cmdText.match(numberReg) || []; - var pLen = p.length; - for (var i = 0; i < pLen; i++) { - p[i] = parseFloat(p[i]); - } - - var off = 0; - while (off < pLen) { - var ctlPtx; - var ctlPty; - - var rx; - var ry; - var psi; - var fa; - var fs; - - var x1 = cpx; - var y1 = cpy; - - // convert l, H, h, V, and v to L - switch (cmdStr) { - case 'l': - cpx += p[off++]; - cpy += p[off++]; - cmd = CMD.L; - path.addData(cmd, cpx, cpy); - break; - case 'L': - cpx = p[off++]; - cpy = p[off++]; - cmd = CMD.L; - path.addData(cmd, cpx, cpy); - break; - case 'm': - cpx += p[off++]; - cpy += p[off++]; - cmd = CMD.M; - path.addData(cmd, cpx, cpy); - subpathX = cpx; - subpathY = cpy; - cmdStr = 'l'; - break; - case 'M': - cpx = p[off++]; - cpy = p[off++]; - cmd = CMD.M; - path.addData(cmd, cpx, cpy); - subpathX = cpx; - subpathY = cpy; - cmdStr = 'L'; - break; - case 'h': - cpx += p[off++]; - cmd = CMD.L; - path.addData(cmd, cpx, cpy); - break; - case 'H': - cpx = p[off++]; - cmd = CMD.L; - path.addData(cmd, cpx, cpy); - break; - case 'v': - cpy += p[off++]; - cmd = CMD.L; - path.addData(cmd, cpx, cpy); - break; - case 'V': - cpy = p[off++]; - cmd = CMD.L; - path.addData(cmd, cpx, cpy); - break; - case 'C': - cmd = CMD.C; - path.addData( - cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++] - ); - cpx = p[off - 2]; - cpy = p[off - 1]; - break; - case 'c': - cmd = CMD.C; - path.addData( - cmd, - p[off++] + cpx, p[off++] + cpy, - p[off++] + cpx, p[off++] + cpy, - p[off++] + cpx, p[off++] + cpy - ); - cpx += p[off - 2]; - cpy += p[off - 1]; - break; - case 'S': - ctlPtx = cpx; - ctlPty = cpy; - var len = path.len(); - var pathData = path.data; - if (prevCmd === CMD.C) { - ctlPtx += cpx - pathData[len - 4]; - ctlPty += cpy - pathData[len - 3]; - } - cmd = CMD.C; - x1 = p[off++]; - y1 = p[off++]; - cpx = p[off++]; - cpy = p[off++]; - path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); - break; - case 's': - ctlPtx = cpx; - ctlPty = cpy; - var len = path.len(); - var pathData = path.data; - if (prevCmd === CMD.C) { - ctlPtx += cpx - pathData[len - 4]; - ctlPty += cpy - pathData[len - 3]; - } - cmd = CMD.C; - x1 = cpx + p[off++]; - y1 = cpy + p[off++]; - cpx += p[off++]; - cpy += p[off++]; - path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); - break; - case 'Q': - x1 = p[off++]; - y1 = p[off++]; - cpx = p[off++]; - cpy = p[off++]; - cmd = CMD.Q; - path.addData(cmd, x1, y1, cpx, cpy); - break; - case 'q': - x1 = p[off++] + cpx; - y1 = p[off++] + cpy; - cpx += p[off++]; - cpy += p[off++]; - cmd = CMD.Q; - path.addData(cmd, x1, y1, cpx, cpy); - break; - case 'T': - ctlPtx = cpx; - ctlPty = cpy; - var len = path.len(); - var pathData = path.data; - if (prevCmd === CMD.Q) { - ctlPtx += cpx - pathData[len - 4]; - ctlPty += cpy - pathData[len - 3]; - } - cpx = p[off++]; - cpy = p[off++]; - cmd = CMD.Q; - path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); - break; - case 't': - ctlPtx = cpx; - ctlPty = cpy; - var len = path.len(); - var pathData = path.data; - if (prevCmd === CMD.Q) { - ctlPtx += cpx - pathData[len - 4]; - ctlPty += cpy - pathData[len - 3]; - } - cpx += p[off++]; - cpy += p[off++]; - cmd = CMD.Q; - path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); - break; - case 'A': - rx = p[off++]; - ry = p[off++]; - psi = p[off++]; - fa = p[off++]; - fs = p[off++]; - - x1 = cpx, y1 = cpy; - cpx = p[off++]; - cpy = p[off++]; - cmd = CMD.A; - processArc( - x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path - ); - break; - case 'a': - rx = p[off++]; - ry = p[off++]; - psi = p[off++]; - fa = p[off++]; - fs = p[off++]; - - x1 = cpx, y1 = cpy; - cpx += p[off++]; - cpy += p[off++]; - cmd = CMD.A; - processArc( - x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path - ); - break; - } - } - - if (cmdStr === 'z' || cmdStr === 'Z') { - cmd = CMD.Z; - path.addData(cmd); - // z may be in the middle of the path. - cpx = subpathX; - cpy = subpathY; - } - - prevCmd = cmd; - } - - path.toStatic(); - - return path; -} - -// TODO Optimize double memory cost problem -function createPathOptions(str, opts) { - var pathProxy = createPathProxyFromString(str); - opts = opts || {}; - opts.buildPath = function (path) { - if (path.setData) { - path.setData(pathProxy.data); - // Svg and vml renderer don't have context - var ctx = path.getContext(); - if (ctx) { - path.rebuildPath(ctx); - } - } - else { - var ctx = path; - pathProxy.rebuildPath(ctx); - } - }; - - opts.applyTransform = function (m) { - transformPath(pathProxy, m); - this.dirty(true); - }; - - return opts; -} - -/** - * Create a Path object from path string data - * http://www.w3.org/TR/SVG/paths.html#PathData - * @param {Object} opts Other options - */ -function createFromString(str, opts) { - return new Path(createPathOptions(str, opts)); -} - -/** - * Create a Path class from path string data - * @param {string} str - * @param {Object} opts Other options - */ -function extendFromString(str, opts) { - return Path.extend(createPathOptions(str, opts)); -} - -/** - * Merge multiple paths - */ -// TODO Apply transform -// TODO stroke dash -// TODO Optimize double memory cost problem -function mergePath(pathEls, opts) { - var pathList = []; - var len = pathEls.length; - for (var i = 0; i < len; i++) { - var pathEl = pathEls[i]; - if (!pathEl.path) { - pathEl.createPathProxy(); - } - if (pathEl.__dirtyPath) { - pathEl.buildPath(pathEl.path, pathEl.shape, true); - } - pathList.push(pathEl.path); - } - - var pathBundle = new Path(opts); - // Need path proxy. - pathBundle.createPathProxy(); - pathBundle.buildPath = function (path) { - path.appendPath(pathList); - // Svg and vml renderer don't have context - var ctx = path.getContext(); - if (ctx) { - path.rebuildPath(ctx); - } - }; - - return pathBundle; -} - -var path = (Object.freeze || Object)({ - createFromString: createFromString, - extendFromString: extendFromString, - mergePath: mergePath -}); - -/** - * @alias zrender/graphic/Text - * @extends module:zrender/graphic/Displayable - * @constructor - * @param {Object} opts - */ -var Text = function (opts) { // jshint ignore:line - Displayable.call(this, opts); -}; - -Text.prototype = { - - constructor: Text, - - type: 'text', - - brush: function (ctx, prevEl) { - var style = this.style; - - // Optimize, avoid normalize every time. - this.__dirty && normalizeTextStyle(style, true); - - // Use props with prefix 'text'. - style.fill = style.stroke = style.shadowBlur = style.shadowColor = - style.shadowOffsetX = style.shadowOffsetY = null; - - var text = style.text; - // Convert to string - text != null && (text += ''); - - // Do not apply style.bind in Text node. Because the real bind job - // is in textHelper.renderText, and performance of text render should - // be considered. - // style.bind(ctx, this, prevEl); - - if (!needDrawText(text, style)) { - // The current el.style is not applied - // and should not be used as cache. - ctx.__attrCachedBy = ContextCachedBy.NONE; - return; - } - - this.setTransform(ctx); - - renderText(this, ctx, text, style, null, prevEl); - - this.restoreTransform(ctx); - }, - - getBoundingRect: function () { - var style = this.style; - - // Optimize, avoid normalize every time. - this.__dirty && normalizeTextStyle(style, true); - - if (!this._rect) { - var text = style.text; - text != null ? (text += '') : (text = ''); - - var rect = getBoundingRect( - style.text + '', - style.font, - style.textAlign, - style.textVerticalAlign, - style.textPadding, - style.textLineHeight, - style.rich - ); - - rect.x += style.x || 0; - rect.y += style.y || 0; - - if (getStroke(style.textStroke, style.textStrokeWidth)) { - var w = style.textStrokeWidth; - rect.x -= w / 2; - rect.y -= w / 2; - rect.width += w; - rect.height += w; - } - - this._rect = rect; - } - - return this._rect; - } -}; - -inherits(Text, Displayable); - -/** - * 圆形 - * @module zrender/shape/Circle - */ - -var Circle = Path.extend({ - - type: 'circle', - - shape: { - cx: 0, - cy: 0, - r: 0 - }, - - - buildPath: function (ctx, shape, inBundle) { - // Better stroking in ShapeBundle - // Always do it may have performence issue ( fill may be 2x more cost) - if (inBundle) { - ctx.moveTo(shape.cx + shape.r, shape.cy); - } - // else { - // if (ctx.allocate && !ctx.data.length) { - // ctx.allocate(ctx.CMD_MEM_SIZE.A); - // } - // } - // Better stroking in ShapeBundle - // ctx.moveTo(shape.cx + shape.r, shape.cy); - ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true); - } -}); - -/** - * Sub-pixel optimize for canvas rendering, prevent from blur - * when rendering a thin vertical/horizontal line. - */ - -var round = Math.round; - -/** - * Sub pixel optimize line for canvas - * - * @param {Object} outputShape The modification will be performed on `outputShape`. - * `outputShape` and `inputShape` can be the same object. - * `outputShape` object can be used repeatly, because all of - * the `x1`, `x2`, `y1`, `y2` will be assigned in this method. - * @param {Object} [inputShape] - * @param {number} [inputShape.x1] - * @param {number} [inputShape.y1] - * @param {number} [inputShape.x2] - * @param {number} [inputShape.y2] - * @param {Object} [style] - * @param {number} [style.lineWidth] - */ -function subPixelOptimizeLine(outputShape, inputShape, style) { - var lineWidth = style && style.lineWidth; - - if (!inputShape || !lineWidth) { - return; - } - - var x1 = inputShape.x1; - var x2 = inputShape.x2; - var y1 = inputShape.y1; - var y2 = inputShape.y2; - - if (round(x1 * 2) === round(x2 * 2)) { - outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true); - } - else { - outputShape.x1 = x1; - outputShape.x2 = x2; - } - if (round(y1 * 2) === round(y2 * 2)) { - outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true); - } - else { - outputShape.y1 = y1; - outputShape.y2 = y2; - } -} - -/** - * Sub pixel optimize rect for canvas - * - * @param {Object} outputShape The modification will be performed on `outputShape`. - * `outputShape` and `inputShape` can be the same object. - * `outputShape` object can be used repeatly, because all of - * the `x`, `y`, `width`, `height` will be assigned in this method. - * @param {Object} [inputShape] - * @param {number} [inputShape.x] - * @param {number} [inputShape.y] - * @param {number} [inputShape.width] - * @param {number} [inputShape.height] - * @param {Object} [style] - * @param {number} [style.lineWidth] - */ -function subPixelOptimizeRect(outputShape, inputShape, style) { - var lineWidth = style && style.lineWidth; - - if (!inputShape || !lineWidth) { - return; - } - - var originX = inputShape.x; - var originY = inputShape.y; - var originWidth = inputShape.width; - var originHeight = inputShape.height; - - outputShape.x = subPixelOptimize(originX, lineWidth, true); - outputShape.y = subPixelOptimize(originY, lineWidth, true); - outputShape.width = Math.max( - subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x, - originWidth === 0 ? 0 : 1 - ); - outputShape.height = Math.max( - subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y, - originHeight === 0 ? 0 : 1 - ); -} - -/** - * Sub pixel optimize for canvas - * - * @param {number} position Coordinate, such as x, y - * @param {number} lineWidth Should be nonnegative integer. - * @param {boolean=} positiveOrNegative Default false (negative). - * @return {number} Optimized position. - */ -function subPixelOptimize(position, lineWidth, positiveOrNegative) { - // Assure that (position + lineWidth / 2) is near integer edge, - // otherwise line will be fuzzy in canvas. - var doubledPosition = round(position * 2); - return (doubledPosition + round(lineWidth)) % 2 === 0 - ? doubledPosition / 2 - : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2; -} - -/** - * 矩形 - * @module zrender/graphic/shape/Rect - */ - -// Avoid create repeatly. -var subPixelOptimizeOutputShape = {}; - -var Rect = Path.extend({ - - type: 'rect', - - shape: { - // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4 - // r缩写为1 相当于 [1, 1, 1, 1] - // r缩写为[1] 相当于 [1, 1, 1, 1] - // r缩写为[1, 2] 相当于 [1, 2, 1, 2] - // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2] - r: 0, - - x: 0, - y: 0, - width: 0, - height: 0 - }, - - buildPath: function (ctx, shape) { - var x; - var y; - var width; - var height; - - if (this.subPixelOptimize) { - subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style); - x = subPixelOptimizeOutputShape.x; - y = subPixelOptimizeOutputShape.y; - width = subPixelOptimizeOutputShape.width; - height = subPixelOptimizeOutputShape.height; - subPixelOptimizeOutputShape.r = shape.r; - shape = subPixelOptimizeOutputShape; - } - else { - x = shape.x; - y = shape.y; - width = shape.width; - height = shape.height; - } - - if (!shape.r) { - ctx.rect(x, y, width, height); - } - else { - buildPath(ctx, shape); - } - ctx.closePath(); - return; - } -}); - -/** - * 椭圆形状 - * @module zrender/graphic/shape/Ellipse - */ - -var Ellipse = Path.extend({ - - type: 'ellipse', - - shape: { - cx: 0, cy: 0, - rx: 0, ry: 0 - }, - - buildPath: function (ctx, shape) { - var k = 0.5522848; - var x = shape.cx; - var y = shape.cy; - var a = shape.rx; - var b = shape.ry; - var ox = a * k; // 水平控制点偏移量 - var oy = b * k; // 垂直控制点偏移量 - // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线 - ctx.moveTo(x - a, y); - ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b); - ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y); - ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b); - ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y); - ctx.closePath(); - } -}); - -/** - * 直线 - * @module zrender/graphic/shape/Line - */ - -// Avoid create repeatly. -var subPixelOptimizeOutputShape$1 = {}; - -var Line = Path.extend({ - - type: 'line', - - shape: { - // Start point - x1: 0, - y1: 0, - // End point - x2: 0, - y2: 0, - - percent: 1 - }, - - style: { - stroke: '#000', - fill: null - }, - - buildPath: function (ctx, shape) { - var x1; - var y1; - var x2; - var y2; - - if (this.subPixelOptimize) { - subPixelOptimizeLine(subPixelOptimizeOutputShape$1, shape, this.style); - x1 = subPixelOptimizeOutputShape$1.x1; - y1 = subPixelOptimizeOutputShape$1.y1; - x2 = subPixelOptimizeOutputShape$1.x2; - y2 = subPixelOptimizeOutputShape$1.y2; - } - else { - x1 = shape.x1; - y1 = shape.y1; - x2 = shape.x2; - y2 = shape.y2; - } - - var percent = shape.percent; - - if (percent === 0) { - return; - } - - ctx.moveTo(x1, y1); - - if (percent < 1) { - x2 = x1 * (1 - percent) + x2 * percent; - y2 = y1 * (1 - percent) + y2 * percent; - } - ctx.lineTo(x2, y2); - }, - - /** - * Get point at percent - * @param {number} percent - * @return {Array.} - */ - pointAt: function (p) { - var shape = this.shape; - return [ - shape.x1 * (1 - p) + shape.x2 * p, - shape.y1 * (1 - p) + shape.y2 * p - ]; - } -}); - -/** - * Catmull-Rom spline 插值折线 - * @module zrender/shape/util/smoothSpline - * @author pissang (https://www.github.com/pissang) - * Kener (@Kener-林峰, kener.linfeng@gmail.com) - * errorrik (errorrik@gmail.com) - */ - -/** - * @inner - */ -function interpolate(p0, p1, p2, p3, t, t2, t3) { - var v0 = (p2 - p0) * 0.5; - var v1 = (p3 - p1) * 0.5; - return (2 * (p1 - p2) + v0 + v1) * t3 - + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 - + v0 * t + p1; -} - -/** - * @alias module:zrender/shape/util/smoothSpline - * @param {Array} points 线段顶点数组 - * @param {boolean} isLoop - * @return {Array} - */ -var smoothSpline = function (points, isLoop) { - var len$$1 = points.length; - var ret = []; - - var distance$$1 = 0; - for (var i = 1; i < len$$1; i++) { - distance$$1 += distance(points[i - 1], points[i]); - } - - var segs = distance$$1 / 2; - segs = segs < len$$1 ? len$$1 : segs; - for (var i = 0; i < segs; i++) { - var pos = i / (segs - 1) * (isLoop ? len$$1 : len$$1 - 1); - var idx = Math.floor(pos); - - var w = pos - idx; - - var p0; - var p1 = points[idx % len$$1]; - var p2; - var p3; - if (!isLoop) { - p0 = points[idx === 0 ? idx : idx - 1]; - p2 = points[idx > len$$1 - 2 ? len$$1 - 1 : idx + 1]; - p3 = points[idx > len$$1 - 3 ? len$$1 - 1 : idx + 2]; - } - else { - p0 = points[(idx - 1 + len$$1) % len$$1]; - p2 = points[(idx + 1) % len$$1]; - p3 = points[(idx + 2) % len$$1]; - } - - var w2 = w * w; - var w3 = w * w2; - - 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) - ]); - } - return ret; -}; - -/** - * 贝塞尔平滑曲线 - * @module zrender/shape/util/smoothBezier - * @author pissang (https://www.github.com/pissang) - * Kener (@Kener-林峰, kener.linfeng@gmail.com) - * errorrik (errorrik@gmail.com) - */ - -/** - * 贝塞尔平滑曲线 - * @alias module:zrender/shape/util/smoothBezier - * @param {Array} points 线段顶点数组 - * @param {number} smooth 平滑等级, 0-1 - * @param {boolean} isLoop - * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内 - * 比如 [[0, 0], [100, 100]], 这个包围盒会与 - * 整个折线的包围盒做一个并集用来约束控制点。 - * @param {Array} 计算出来的控制点数组 - */ -var smoothBezier = function (points, smooth, isLoop, constraint) { - var cps = []; - - var v = []; - var v1 = []; - var v2 = []; - var prevPoint; - var nextPoint; - - var min$$1; - var max$$1; - if (constraint) { - min$$1 = [Infinity, Infinity]; - max$$1 = [-Infinity, -Infinity]; - for (var i = 0, len$$1 = points.length; i < len$$1; i++) { - min(min$$1, min$$1, points[i]); - max(max$$1, max$$1, points[i]); - } - // 与指定的包围盒做并集 - min(min$$1, min$$1, constraint[0]); - max(max$$1, max$$1, constraint[1]); - } - - for (var i = 0, len$$1 = points.length; i < len$$1; i++) { - var point = points[i]; - - if (isLoop) { - prevPoint = points[i ? i - 1 : len$$1 - 1]; - nextPoint = points[(i + 1) % len$$1]; - } - else { - if (i === 0 || i === len$$1 - 1) { - cps.push(clone$1(points[i])); - continue; - } - else { - prevPoint = points[i - 1]; - nextPoint = points[i + 1]; - } - } - - sub(v, nextPoint, prevPoint); - - // use degree to scale the handle length - scale(v, v, smooth); - - var d0 = distance(point, prevPoint); - var d1 = distance(point, nextPoint); - var sum = d0 + d1; - if (sum !== 0) { - d0 /= sum; - d1 /= sum; - } - - scale(v1, v, -d0); - scale(v2, v, d1); - var cp0 = add([], point, v1); - var cp1 = add([], point, v2); - if (constraint) { - max(cp0, cp0, min$$1); - min(cp0, cp0, max$$1); - max(cp1, cp1, min$$1); - min(cp1, cp1, max$$1); - } - cps.push(cp0); - cps.push(cp1); - } - - if (isLoop) { - cps.push(cps.shift()); - } - - return cps; -}; - -function buildPath$1(ctx, shape, closePath) { - var points = shape.points; - var smooth = shape.smooth; - if (points && points.length >= 2) { - if (smooth && smooth !== 'spline') { - var controlPoints = smoothBezier( - points, smooth, closePath, shape.smoothConstraint - ); - - ctx.moveTo(points[0][0], points[0][1]); - var len = points.length; - for (var i = 0; i < (closePath ? len : len - 1); i++) { - var cp1 = controlPoints[i * 2]; - var cp2 = controlPoints[i * 2 + 1]; - var p = points[(i + 1) % len]; - ctx.bezierCurveTo( - cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1] - ); - } - } - else { - if (smooth === 'spline') { - points = smoothSpline(points, closePath); - } - - ctx.moveTo(points[0][0], points[0][1]); - for (var i = 1, l = points.length; i < l; i++) { - ctx.lineTo(points[i][0], points[i][1]); - } - } - - closePath && ctx.closePath(); - } -} - -/** - * 多边形 - * @module zrender/shape/Polygon - */ - -var Polygon = Path.extend({ - - type: 'polygon', - - shape: { - points: null, - - smooth: false, - - smoothConstraint: null - }, - - buildPath: function (ctx, shape) { - buildPath$1(ctx, shape, true); - } -}); - -/** - * @module zrender/graphic/shape/Polyline - */ - -var Polyline = Path.extend({ - - type: 'polyline', - - shape: { - points: null, - - smooth: false, - - smoothConstraint: null - }, - - style: { - stroke: '#000', - - fill: null - }, - - buildPath: function (ctx, shape) { - buildPath$1(ctx, shape, false); - } -}); - -/** - * @param {Array.} colorStops - */ -var Gradient = function (colorStops) { - - this.colorStops = colorStops || []; - -}; - -Gradient.prototype = { - - constructor: Gradient, - - addColorStop: function (offset, color) { - this.colorStops.push({ - - offset: offset, - - color: color - }); - } - -}; - -/** - * x, y, x2, y2 are all percent from 0 to 1 - * @param {number} [x=0] - * @param {number} [y=0] - * @param {number} [x2=1] - * @param {number} [y2=0] - * @param {Array.} colorStops - * @param {boolean} [globalCoord=false] - */ -var LinearGradient = function (x, y, x2, y2, colorStops, globalCoord) { - // Should do nothing more in this constructor. Because gradient can be - // declard by `color: {type: 'linear', colorStops: ...}`, where - // this constructor will not be called. - - this.x = x == null ? 0 : x; - - this.y = y == null ? 0 : y; - - this.x2 = x2 == null ? 1 : x2; - - this.y2 = y2 == null ? 0 : y2; - - // Can be cloned - this.type = 'linear'; - - // If use global coord - this.global = globalCoord || false; - - Gradient.call(this, colorStops); -}; - -LinearGradient.prototype = { - - constructor: LinearGradient -}; - -inherits(LinearGradient, Gradient); - -// import RadialGradient from '../graphic/RadialGradient'; -// import Pattern from '../graphic/Pattern'; -// import * as vector from '../core/vector'; -// Most of the values can be separated by comma and/or white space. -var DILIMITER_REG = /[\s,]+/; - -/** - * For big svg string, this method might be time consuming. - * - * @param {string} svg xml string - * @return {Object} xml root. - */ -function parseXML(svg) { - if (isString(svg)) { - var parser = new DOMParser(); - svg = parser.parseFromString(svg, 'text/xml'); - } - - // Document node. If using $.get, doc node may be input. - if (svg.nodeType === 9) { - svg = svg.firstChild; - } - // nodeName of is also 'svg'. - while (svg.nodeName.toLowerCase() !== 'svg' || svg.nodeType !== 1) { - svg = svg.nextSibling; - } - - return svg; -} - -function SVGParser() { - this._defs = {}; - this._root = null; - - this._isDefine = false; - this._isText = false; -} - -SVGParser.prototype.parse = function (xml, opt) { - opt = opt || {}; - - var svg = parseXML(xml); - - if (!svg) { - throw new Error('Illegal svg'); - } - - var root = new Group(); - this._root = root; - // parse view port - var viewBox = svg.getAttribute('viewBox') || ''; - - // If width/height not specified, means "100%" of `opt.width/height`. - // TODO: Other percent value not supported yet. - var width = parseFloat(svg.getAttribute('width') || opt.width); - var height = parseFloat(svg.getAttribute('height') || opt.height); - // If width/height not specified, set as null for output. - isNaN(width) && (width = null); - isNaN(height) && (height = null); - - // Apply inline style on svg element. - parseAttributes(svg, root, null, true); - - var child = svg.firstChild; - while (child) { - this._parseNode(child, root); - child = child.nextSibling; - } - - var viewBoxRect; - var viewBoxTransform; - - if (viewBox) { - var viewBoxArr = trim(viewBox).split(DILIMITER_REG); - // Some invalid case like viewBox: 'none'. - if (viewBoxArr.length >= 4) { - viewBoxRect = { - x: parseFloat(viewBoxArr[0] || 0), - y: parseFloat(viewBoxArr[1] || 0), - width: parseFloat(viewBoxArr[2]), - height: parseFloat(viewBoxArr[3]) - }; - } - } - - if (viewBoxRect && width != null && height != null) { - viewBoxTransform = makeViewBoxTransform(viewBoxRect, width, height); - - if (!opt.ignoreViewBox) { - // If set transform on the output group, it probably bring trouble when - // some users only intend to show the clipped content inside the viewBox, - // but not intend to transform the output group. So we keep the output - // group no transform. If the user intend to use the viewBox as a - // camera, just set `opt.ignoreViewBox` as `true` and set transfrom - // manually according to the viewBox info in the output of this method. - var elRoot = root; - root = new Group(); - root.add(elRoot); - elRoot.scale = viewBoxTransform.scale.slice(); - elRoot.position = viewBoxTransform.position.slice(); - } - } - - // Some shapes might be overflow the viewport, which should be - // clipped despite whether the viewBox is used, as the SVG does. - if (!opt.ignoreRootClip && width != null && height != null) { - root.setClipPath(new Rect({ - shape: {x: 0, y: 0, width: width, height: height} - })); - } - - // Set width/height on group just for output the viewport size. - return { - root: root, - width: width, - height: height, - viewBoxRect: viewBoxRect, - viewBoxTransform: viewBoxTransform - }; -}; - -SVGParser.prototype._parseNode = function (xmlNode, parentGroup) { - - var nodeName = xmlNode.nodeName.toLowerCase(); - - // TODO - // support in svg, where nodeName is 'style', - // CSS classes is defined globally wherever the style tags are declared. - - if (nodeName === 'defs') { - // define flag - this._isDefine = true; - } - else if (nodeName === 'text') { - this._isText = true; - } - - var el; - if (this._isDefine) { - var parser = defineParsers[nodeName]; - if (parser) { - var def = parser.call(this, xmlNode); - var id = xmlNode.getAttribute('id'); - if (id) { - this._defs[id] = def; - } - } - } - else { - var parser = nodeParsers[nodeName]; - if (parser) { - el = parser.call(this, xmlNode, parentGroup); - parentGroup.add(el); - } - } - - var child = xmlNode.firstChild; - while (child) { - if (child.nodeType === 1) { - this._parseNode(child, el); - } - // Is text - if (child.nodeType === 3 && this._isText) { - this._parseText(child, el); - } - child = child.nextSibling; - } - - // Quit define - if (nodeName === 'defs') { - this._isDefine = false; - } - else if (nodeName === 'text') { - this._isText = false; - } -}; - -SVGParser.prototype._parseText = function (xmlNode, parentGroup) { - if (xmlNode.nodeType === 1) { - var dx = xmlNode.getAttribute('dx') || 0; - var dy = xmlNode.getAttribute('dy') || 0; - this._textX += parseFloat(dx); - this._textY += parseFloat(dy); - } - - var text = new Text({ - style: { - text: xmlNode.textContent, - transformText: true - }, - position: [this._textX || 0, this._textY || 0] - }); - - inheritStyle(parentGroup, text); - parseAttributes(xmlNode, text, this._defs); - - var fontSize = text.style.fontSize; - if (fontSize && fontSize < 9) { - // PENDING - text.style.fontSize = 9; - text.scale = text.scale || [1, 1]; - text.scale[0] *= fontSize / 9; - text.scale[1] *= fontSize / 9; - } - - var rect = text.getBoundingRect(); - this._textX += rect.width; - - parentGroup.add(text); - - return text; -}; - -var nodeParsers = { - 'g': function (xmlNode, parentGroup) { - var g = new Group(); - inheritStyle(parentGroup, g); - parseAttributes(xmlNode, g, this._defs); - - return g; - }, - 'rect': function (xmlNode, parentGroup) { - var rect = new Rect(); - inheritStyle(parentGroup, rect); - parseAttributes(xmlNode, rect, this._defs); - - rect.setShape({ - x: parseFloat(xmlNode.getAttribute('x') || 0), - y: parseFloat(xmlNode.getAttribute('y') || 0), - width: parseFloat(xmlNode.getAttribute('width') || 0), - height: parseFloat(xmlNode.getAttribute('height') || 0) - }); - - // console.log(xmlNode.getAttribute('transform')); - // console.log(rect.transform); - - return rect; - }, - 'circle': function (xmlNode, parentGroup) { - var circle = new Circle(); - inheritStyle(parentGroup, circle); - parseAttributes(xmlNode, circle, this._defs); - - circle.setShape({ - cx: parseFloat(xmlNode.getAttribute('cx') || 0), - cy: parseFloat(xmlNode.getAttribute('cy') || 0), - r: parseFloat(xmlNode.getAttribute('r') || 0) - }); - - return circle; - }, - 'line': function (xmlNode, parentGroup) { - var line = new Line(); - inheritStyle(parentGroup, line); - parseAttributes(xmlNode, line, this._defs); - - line.setShape({ - x1: parseFloat(xmlNode.getAttribute('x1') || 0), - y1: parseFloat(xmlNode.getAttribute('y1') || 0), - x2: parseFloat(xmlNode.getAttribute('x2') || 0), - y2: parseFloat(xmlNode.getAttribute('y2') || 0) - }); - - return line; - }, - 'ellipse': function (xmlNode, parentGroup) { - var ellipse = new Ellipse(); - inheritStyle(parentGroup, ellipse); - parseAttributes(xmlNode, ellipse, this._defs); - - ellipse.setShape({ - cx: parseFloat(xmlNode.getAttribute('cx') || 0), - cy: parseFloat(xmlNode.getAttribute('cy') || 0), - rx: parseFloat(xmlNode.getAttribute('rx') || 0), - ry: parseFloat(xmlNode.getAttribute('ry') || 0) - }); - return ellipse; - }, - 'polygon': function (xmlNode, parentGroup) { - var points = xmlNode.getAttribute('points'); - if (points) { - points = parsePoints(points); - } - var polygon = new Polygon({ - shape: { - points: points || [] - } - }); - - inheritStyle(parentGroup, polygon); - parseAttributes(xmlNode, polygon, this._defs); - - return polygon; - }, - 'polyline': function (xmlNode, parentGroup) { - var path = new Path(); - inheritStyle(parentGroup, path); - parseAttributes(xmlNode, path, this._defs); - - var points = xmlNode.getAttribute('points'); - if (points) { - points = parsePoints(points); - } - var polyline = new Polyline({ - shape: { - points: points || [] - } - }); - - return polyline; - }, - 'image': function (xmlNode, parentGroup) { - var img = new ZImage(); - inheritStyle(parentGroup, img); - parseAttributes(xmlNode, img, this._defs); - - img.setStyle({ - image: xmlNode.getAttribute('xlink:href'), - x: xmlNode.getAttribute('x'), - y: xmlNode.getAttribute('y'), - width: xmlNode.getAttribute('width'), - height: xmlNode.getAttribute('height') - }); - - return img; - }, - 'text': function (xmlNode, parentGroup) { - var x = xmlNode.getAttribute('x') || 0; - var y = xmlNode.getAttribute('y') || 0; - var dx = xmlNode.getAttribute('dx') || 0; - var dy = xmlNode.getAttribute('dy') || 0; - - this._textX = parseFloat(x) + parseFloat(dx); - this._textY = parseFloat(y) + parseFloat(dy); - - var g = new Group(); - inheritStyle(parentGroup, g); - parseAttributes(xmlNode, g, this._defs); - - return g; - }, - 'tspan': function (xmlNode, parentGroup) { - var x = xmlNode.getAttribute('x'); - var y = xmlNode.getAttribute('y'); - if (x != null) { - // new offset x - this._textX = parseFloat(x); - } - if (y != null) { - // new offset y - this._textY = parseFloat(y); - } - var dx = xmlNode.getAttribute('dx') || 0; - var dy = xmlNode.getAttribute('dy') || 0; - - var g = new Group(); - - inheritStyle(parentGroup, g); - parseAttributes(xmlNode, g, this._defs); - - - this._textX += dx; - this._textY += dy; - - return g; - }, - 'path': function (xmlNode, parentGroup) { - // TODO svg fill rule - // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule - // path.style.globalCompositeOperation = 'xor'; - var d = xmlNode.getAttribute('d') || ''; - - // Performance sensitive. - - var path = createFromString(d); - - inheritStyle(parentGroup, path); - parseAttributes(xmlNode, path, this._defs); - - return path; - } -}; - -var defineParsers = { - - 'lineargradient': function (xmlNode) { - var x1 = parseInt(xmlNode.getAttribute('x1') || 0, 10); - var y1 = parseInt(xmlNode.getAttribute('y1') || 0, 10); - var x2 = parseInt(xmlNode.getAttribute('x2') || 10, 10); - var y2 = parseInt(xmlNode.getAttribute('y2') || 0, 10); - - var gradient = new LinearGradient(x1, y1, x2, y2); - - _parseGradientColorStops(xmlNode, gradient); - - return gradient; - }, - - 'radialgradient': function (xmlNode) { - - } -}; - -function _parseGradientColorStops(xmlNode, gradient) { - - var stop = xmlNode.firstChild; - - while (stop) { - if (stop.nodeType === 1) { - var offset = stop.getAttribute('offset'); - if (offset.indexOf('%') > 0) { // percentage - offset = parseInt(offset, 10) / 100; - } - else if (offset) { // number from 0 to 1 - offset = parseFloat(offset); - } - else { - offset = 0; - } - - var stopColor = stop.getAttribute('stop-color') || '#000000'; - - gradient.addColorStop(offset, stopColor); - } - stop = stop.nextSibling; - } -} - -function inheritStyle(parent, child) { - if (parent && parent.__inheritedStyle) { - if (!child.__inheritedStyle) { - child.__inheritedStyle = {}; - } - defaults(child.__inheritedStyle, parent.__inheritedStyle); - } -} - -function parsePoints(pointsString) { - var list = trim(pointsString).split(DILIMITER_REG); - var points = []; - - for (var i = 0; i < list.length; i += 2) { - var x = parseFloat(list[i]); - var y = parseFloat(list[i + 1]); - points.push([x, y]); - } - return points; -} - -var attributesMap = { - 'fill': 'fill', - 'stroke': 'stroke', - 'stroke-width': 'lineWidth', - 'opacity': 'opacity', - 'fill-opacity': 'fillOpacity', - 'stroke-opacity': 'strokeOpacity', - 'stroke-dasharray': 'lineDash', - 'stroke-dashoffset': 'lineDashOffset', - 'stroke-linecap': 'lineCap', - 'stroke-linejoin': 'lineJoin', - 'stroke-miterlimit': 'miterLimit', - 'font-family': 'fontFamily', - 'font-size': 'fontSize', - 'font-style': 'fontStyle', - 'font-weight': 'fontWeight', - - 'text-align': 'textAlign', - 'alignment-baseline': 'textBaseline' -}; - -function parseAttributes(xmlNode, el, defs, onlyInlineStyle) { - var zrStyle = el.__inheritedStyle || {}; - var isTextEl = el.type === 'text'; - - // TODO Shadow - if (xmlNode.nodeType === 1) { - parseTransformAttribute(xmlNode, el); - - extend(zrStyle, parseStyleAttribute(xmlNode)); - - if (!onlyInlineStyle) { - for (var svgAttrName in attributesMap) { - if (attributesMap.hasOwnProperty(svgAttrName)) { - var attrValue = xmlNode.getAttribute(svgAttrName); - if (attrValue != null) { - zrStyle[attributesMap[svgAttrName]] = attrValue; - } - } - } - } - } - - var elFillProp = isTextEl ? 'textFill' : 'fill'; - var elStrokeProp = isTextEl ? 'textStroke' : 'stroke'; - - el.style = el.style || new Style(); - var elStyle = el.style; - - zrStyle.fill != null && elStyle.set(elFillProp, getPaint(zrStyle.fill, defs)); - zrStyle.stroke != null && elStyle.set(elStrokeProp, getPaint(zrStyle.stroke, defs)); - - each([ - 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize' - ], function (propName) { - var elPropName = (propName === 'lineWidth' && isTextEl) ? 'textStrokeWidth' : propName; - zrStyle[propName] != null && elStyle.set(elPropName, parseFloat(zrStyle[propName])); - }); - - if (!zrStyle.textBaseline || zrStyle.textBaseline === 'auto') { - zrStyle.textBaseline = 'alphabetic'; - } - if (zrStyle.textBaseline === 'alphabetic') { - zrStyle.textBaseline = 'bottom'; - } - if (zrStyle.textAlign === 'start') { - zrStyle.textAlign = 'left'; - } - if (zrStyle.textAlign === 'end') { - zrStyle.textAlign = 'right'; - } - - each(['lineDashOffset', 'lineCap', 'lineJoin', - 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign', 'textBaseline' - ], function (propName) { - zrStyle[propName] != null && elStyle.set(propName, zrStyle[propName]); - }); - - if (zrStyle.lineDash) { - el.style.lineDash = trim(zrStyle.lineDash).split(DILIMITER_REG); - } - - if (elStyle[elStrokeProp] && elStyle[elStrokeProp] !== 'none') { - // enable stroke - el[elStrokeProp] = true; - } - - el.__inheritedStyle = zrStyle; -} - - -var urlRegex = /url\(\s*#(.*?)\)/; -function getPaint(str, defs) { - // if (str === 'none') { - // return; - // } - var urlMatch = defs && str && str.match(urlRegex); - if (urlMatch) { - var url = trim(urlMatch[1]); - var def = defs[url]; - return def; - } - return str; -} - -var transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g; - -function parseTransformAttribute(xmlNode, node) { - var transform = xmlNode.getAttribute('transform'); - if (transform) { - transform = transform.replace(/,/g, ' '); - var m = null; - var transformOps = []; - transform.replace(transformRegex, function (str, type, value) { - transformOps.push(type, value); - }); - for (var i = transformOps.length - 1; i > 0; i -= 2) { - var value = transformOps[i]; - var type = transformOps[i - 1]; - m = m || create$1(); - switch (type) { - case 'translate': - value = trim(value).split(DILIMITER_REG); - translate(m, m, [parseFloat(value[0]), parseFloat(value[1] || 0)]); - break; - case 'scale': - value = trim(value).split(DILIMITER_REG); - scale$1(m, m, [parseFloat(value[0]), parseFloat(value[1] || value[0])]); - break; - case 'rotate': - value = trim(value).split(DILIMITER_REG); - rotate(m, m, parseFloat(value[0])); - break; - case 'skew': - value = trim(value).split(DILIMITER_REG); - console.warn('Skew transform is not supported yet'); - break; - case 'matrix': - var value = trim(value).split(DILIMITER_REG); - m[0] = parseFloat(value[0]); - m[1] = parseFloat(value[1]); - m[2] = parseFloat(value[2]); - m[3] = parseFloat(value[3]); - m[4] = parseFloat(value[4]); - m[5] = parseFloat(value[5]); - break; - } - } - node.setLocalTransform(m); - } -} - -// Value may contain space. -var styleRegex = /([^\s:;]+)\s*:\s*([^:;]+)/g; -function parseStyleAttribute(xmlNode) { - var style = xmlNode.getAttribute('style'); - var result = {}; - - if (!style) { - return result; - } - - var styleList = {}; - styleRegex.lastIndex = 0; - var styleRegResult; - while ((styleRegResult = styleRegex.exec(style)) != null) { - styleList[styleRegResult[1]] = styleRegResult[2]; - } - - for (var svgAttrName in attributesMap) { - if (attributesMap.hasOwnProperty(svgAttrName) && styleList[svgAttrName] != null) { - result[attributesMap[svgAttrName]] = styleList[svgAttrName]; - } - } - - return result; -} - -/** - * @param {Array.} viewBoxRect - * @param {number} width - * @param {number} height - * @return {Object} {scale, position} - */ -function makeViewBoxTransform(viewBoxRect, width, height) { - var scaleX = width / viewBoxRect.width; - var scaleY = height / viewBoxRect.height; - var scale = Math.min(scaleX, scaleY); - // preserveAspectRatio 'xMidYMid' - var viewBoxScale = [scale, scale]; - var viewBoxPosition = [ - -(viewBoxRect.x + viewBoxRect.width / 2) * scale + width / 2, - -(viewBoxRect.y + viewBoxRect.height / 2) * scale + height / 2 - ]; - - return { - scale: viewBoxScale, - position: viewBoxPosition - }; -} - -/** - * @param {string|XMLElement} xml - * @param {Object} [opt] - * @param {number} [opt.width] Default width if svg width not specified or is a percent value. - * @param {number} [opt.height] Default height if svg height not specified or is a percent value. - * @param {boolean} [opt.ignoreViewBox] - * @param {boolean} [opt.ignoreRootClip] - * @return {Object} result: - * { - * root: Group, The root of the the result tree of zrender shapes, - * width: number, the viewport width of the SVG, - * height: number, the viewport height of the SVG, - * viewBoxRect: {x, y, width, height}, the declared viewBox rect of the SVG, if exists, - * viewBoxTransform: the {scale, position} calculated by viewBox and viewport, is exists. - * } - */ -function parseSVG(xml, opt) { - var parser = new SVGParser(); - return parser.parse(xml, opt); -} - -// CompoundPath to improve performance - -var CompoundPath = Path.extend({ - - type: 'compound', - - shape: { - - paths: null - }, - - _updatePathDirty: function () { - var dirtyPath = this.__dirtyPath; - var paths = this.shape.paths; - for (var i = 0; i < paths.length; i++) { - // Mark as dirty if any subpath is dirty - dirtyPath = dirtyPath || paths[i].__dirtyPath; - } - this.__dirtyPath = dirtyPath; - this.__dirty = this.__dirty || dirtyPath; - }, - - beforeBrush: function () { - this._updatePathDirty(); - var paths = this.shape.paths || []; - var scale = this.getGlobalScale(); - // Update path scale - for (var i = 0; i < paths.length; i++) { - if (!paths[i].path) { - paths[i].createPathProxy(); - } - paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold); - } - }, - - buildPath: function (ctx, shape) { - var paths = shape.paths || []; - for (var i = 0; i < paths.length; i++) { - paths[i].buildPath(ctx, paths[i].shape, true); - } - }, - - afterBrush: function () { - var paths = this.shape.paths || []; - for (var i = 0; i < paths.length; i++) { - paths[i].__dirtyPath = false; - } - }, - - getBoundingRect: function () { - this._updatePathDirty(); - return Path.prototype.getBoundingRect.call(this); - } -}); - -/** - * Displayable for incremental rendering. It will be rendered in a separate layer - * IncrementalDisplay have two main methods. `clearDisplayables` and `addDisplayables` - * addDisplayables will render the added displayables incremetally. - * - * It use a not clearFlag to tell the painter don't clear the layer if it's the first element. - */ -// TODO Style override ? -function IncrementalDisplayble(opts) { - - Displayable.call(this, opts); - - this._displayables = []; - - this._temporaryDisplayables = []; - - this._cursor = 0; - - this.notClear = true; -} - -IncrementalDisplayble.prototype.incremental = true; - -IncrementalDisplayble.prototype.clearDisplaybles = function () { - this._displayables = []; - this._temporaryDisplayables = []; - this._cursor = 0; - this.dirty(); - - this.notClear = false; -}; - -IncrementalDisplayble.prototype.addDisplayable = function (displayable, notPersistent) { - if (notPersistent) { - this._temporaryDisplayables.push(displayable); - } - else { - this._displayables.push(displayable); - } - this.dirty(); -}; - -IncrementalDisplayble.prototype.addDisplayables = function (displayables, notPersistent) { - notPersistent = notPersistent || false; - for (var i = 0; i < displayables.length; i++) { - this.addDisplayable(displayables[i], notPersistent); - } -}; - -IncrementalDisplayble.prototype.eachPendingDisplayable = function (cb) { - for (var i = this._cursor; i < this._displayables.length; i++) { - cb && cb(this._displayables[i]); - } - for (var i = 0; i < this._temporaryDisplayables.length; i++) { - cb && cb(this._temporaryDisplayables[i]); - } -}; - -IncrementalDisplayble.prototype.update = function () { - this.updateTransform(); - for (var i = this._cursor; i < this._displayables.length; i++) { - var displayable = this._displayables[i]; - // PENDING - displayable.parent = this; - displayable.update(); - displayable.parent = null; - } - for (var i = 0; i < this._temporaryDisplayables.length; i++) { - var displayable = this._temporaryDisplayables[i]; - // PENDING - displayable.parent = this; - displayable.update(); - displayable.parent = null; - } -}; - -IncrementalDisplayble.prototype.brush = function (ctx, prevEl) { - // Render persistant displayables. - for (var i = this._cursor; i < this._displayables.length; i++) { - var displayable = this._displayables[i]; - displayable.beforeBrush && displayable.beforeBrush(ctx); - displayable.brush(ctx, i === this._cursor ? null : this._displayables[i - 1]); - displayable.afterBrush && displayable.afterBrush(ctx); - } - this._cursor = i; - // Render temporary displayables. - for (var i = 0; i < this._temporaryDisplayables.length; i++) { - var displayable = this._temporaryDisplayables[i]; - displayable.beforeBrush && displayable.beforeBrush(ctx); - displayable.brush(ctx, i === 0 ? null : this._temporaryDisplayables[i - 1]); - displayable.afterBrush && displayable.afterBrush(ctx); - } - - this._temporaryDisplayables = []; - - this.notClear = true; -}; - -var m = []; -IncrementalDisplayble.prototype.getBoundingRect = function () { - if (!this._rect) { - var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity); - for (var i = 0; i < this._displayables.length; i++) { - var displayable = this._displayables[i]; - var childRect = displayable.getBoundingRect().clone(); - if (displayable.needLocalTransform()) { - childRect.applyTransform(displayable.getLocalTransform(m)); - } - rect.union(childRect); - } - this._rect = rect; - } - return this._rect; -}; - -IncrementalDisplayble.prototype.contain = function (x, y) { - var localPos = this.transformCoordToLocal(x, y); - var rect = this.getBoundingRect(); - - if (rect.contain(localPos[0], localPos[1])) { - for (var i = 0; i < this._displayables.length; i++) { - var displayable = this._displayables[i]; - if (displayable.contain(x, y)) { - return true; - } - } - } - return false; -}; - -inherits(IncrementalDisplayble, Displayable); - -/** - * 圆弧 - * @module zrender/graphic/shape/Arc - */ - -var Arc = Path.extend({ - - type: 'arc', - - shape: { - - cx: 0, - - cy: 0, - - r: 0, - - startAngle: 0, - - endAngle: Math.PI * 2, - - clockwise: true - }, - - style: { - - stroke: '#000', - - fill: null - }, - - buildPath: function (ctx, shape) { - - var x = shape.cx; - var y = shape.cy; - var r = Math.max(shape.r, 0); - var startAngle = shape.startAngle; - var endAngle = shape.endAngle; - var clockwise = shape.clockwise; - - var unitX = Math.cos(startAngle); - var unitY = Math.sin(startAngle); - - ctx.moveTo(unitX * r + x, unitY * r + y); - ctx.arc(x, y, r, startAngle, endAngle, !clockwise); - } -}); - -/** - * 贝塞尔曲线 - * @module zrender/shape/BezierCurve - */ - -var out = []; - -function someVectorAt(shape, t, isTangent) { - var cpx2 = shape.cpx2; - var cpy2 = shape.cpy2; - if (cpx2 === null || cpy2 === null) { - 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) - ]; - } - else { - return [ - (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t), - (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t) - ]; - } -} - -var BezierCurve = Path.extend({ - - type: 'bezier-curve', - - shape: { - x1: 0, - y1: 0, - x2: 0, - y2: 0, - cpx1: 0, - cpy1: 0, - // cpx2: 0, - // cpy2: 0 - - // Curve show percent, for animating - percent: 1 - }, - - style: { - stroke: '#000', - fill: null - }, - - buildPath: function (ctx, shape) { - var x1 = shape.x1; - var y1 = shape.y1; - var x2 = shape.x2; - var y2 = shape.y2; - var cpx1 = shape.cpx1; - var cpy1 = shape.cpy1; - var cpx2 = shape.cpx2; - var cpy2 = shape.cpy2; - var percent = shape.percent; - if (percent === 0) { - return; - } - - ctx.moveTo(x1, y1); - - if (cpx2 == null || cpy2 == null) { - if (percent < 1) { - quadraticSubdivide( - x1, cpx1, x2, percent, out - ); - cpx1 = out[1]; - x2 = out[2]; - quadraticSubdivide( - y1, cpy1, y2, percent, out - ); - cpy1 = out[1]; - y2 = out[2]; - } - - ctx.quadraticCurveTo( - cpx1, cpy1, - x2, y2 - ); - } - else { - if (percent < 1) { - cubicSubdivide( - x1, cpx1, cpx2, x2, percent, out - ); - cpx1 = out[1]; - cpx2 = out[2]; - x2 = out[3]; - cubicSubdivide( - y1, cpy1, cpy2, y2, percent, out - ); - cpy1 = out[1]; - cpy2 = out[2]; - y2 = out[3]; - } - ctx.bezierCurveTo( - cpx1, cpy1, - cpx2, cpy2, - x2, y2 - ); - } - }, - - /** - * Get point at percent - * @param {number} t - * @return {Array.} - */ - pointAt: function (t) { - return someVectorAt(this.shape, t, false); - }, - - /** - * Get tangent at percent - * @param {number} t - * @return {Array.} - */ - tangentAt: function (t) { - var p = someVectorAt(this.shape, t, true); - return normalize(p, p); - } -}); - -/** - * 水滴形状 - * @module zrender/graphic/shape/Droplet - */ - -var Droplet = Path.extend({ - - type: 'droplet', - - shape: { - cx: 0, cy: 0, - width: 0, height: 0 - }, - - buildPath: function (ctx, shape) { - var x = shape.cx; - var y = shape.cy; - var a = shape.width; - var b = shape.height; - - ctx.moveTo(x, y + a); - ctx.bezierCurveTo( - x + a, - y + a, - x + a * 3 / 2, - y - a / 3, - x, - y - b - ); - ctx.bezierCurveTo( - x - a * 3 / 2, - y - a / 3, - x - a, - y + a, - x, - y + a - ); - ctx.closePath(); - } -}); - -/** - * 心形 - * @module zrender/graphic/shape/Heart - */ - -var Heart = Path.extend({ - - type: 'heart', - - shape: { - cx: 0, - cy: 0, - width: 0, - height: 0 - }, - - buildPath: function (ctx, shape) { - var x = shape.cx; - var y = shape.cy; - var a = shape.width; - var b = shape.height; - ctx.moveTo(x, y); - ctx.bezierCurveTo( - x + a / 2, y - b * 2 / 3, - x + a * 2, y + b / 3, - x, y + b - ); - ctx.bezierCurveTo( - x - a * 2, y + b / 3, - x - a / 2, y - b * 2 / 3, - x, y - ); - } -}); - -/** - * 正多边形 - * @module zrender/shape/Isogon - */ - -var PI$1 = Math.PI; -var sin = Math.sin; -var cos = Math.cos; - -var Isogon = Path.extend({ - - type: 'isogon', - - shape: { - x: 0, y: 0, - r: 0, n: 0 - }, - - buildPath: function (ctx, shape) { - var n = shape.n; - if (!n || n < 2) { - return; - } - - var x = shape.x; - var y = shape.y; - var r = shape.r; - - var dStep = 2 * PI$1 / n; - var deg = -PI$1 / 2; - - ctx.moveTo(x + r * cos(deg), y + r * sin(deg)); - for (var i = 0, end = n - 1; i < end; i++) { - deg += dStep; - ctx.lineTo(x + r * cos(deg), y + r * sin(deg)); - } - - ctx.closePath(); - - return; - } -}); - -/** - * 圆环 - * @module zrender/graphic/shape/Ring - */ - -var Ring = Path.extend({ - - type: 'ring', - - shape: { - cx: 0, - cy: 0, - r: 0, - r0: 0 - }, - - buildPath: function (ctx, shape) { - var x = shape.cx; - var y = shape.cy; - var PI2 = Math.PI * 2; - ctx.moveTo(x + shape.r, y); - ctx.arc(x, y, shape.r, 0, PI2, false); - ctx.moveTo(x + shape.r0, y); - ctx.arc(x, y, shape.r0, 0, PI2, true); - } -}); - -/** - * 玫瑰线 - * @module zrender/graphic/shape/Rose - */ - -var sin$1 = Math.sin; -var cos$1 = Math.cos; -var radian = Math.PI / 180; - -var Rose = Path.extend({ - - type: 'rose', - - shape: { - cx: 0, - cy: 0, - r: [], - k: 0, - n: 1 - }, - - style: { - stroke: '#000', - fill: null - }, - - buildPath: function (ctx, shape) { - var x; - var y; - var R = shape.r; - var r; - var k = shape.k; - var n = shape.n; - - var x0 = shape.cx; - var y0 = shape.cy; - - ctx.moveTo(x0, y0); - - for (var i = 0, len = R.length; i < len; i++) { - r = R[i]; - - for (var j = 0; j <= 360 * n; j++) { - x = r - * sin$1(k / n * j % 360 * radian) - * cos$1(j * radian) - + x0; - y = r - * sin$1(k / n * j % 360 * radian) - * sin$1(j * radian) - + y0; - ctx.lineTo(x, y); - } - } - } -}); - -// Fix weird bug in some version of IE11 (like 11.0.9600.178**), -// where exception "unexpected call to method or property access" -// might be thrown when calling ctx.fill or ctx.stroke after a path -// whose area size is zero is drawn and ctx.clip() is called and -// shadowBlur is set. See #4572, #3112, #5777. -// (e.g., -// ctx.moveTo(10, 10); -// ctx.lineTo(20, 10); -// ctx.closePath(); -// ctx.clip(); -// ctx.shadowBlur = 10; -// ... -// ctx.fill(); -// ) - -var shadowTemp = [ - ['shadowBlur', 0], - ['shadowColor', '#000'], - ['shadowOffsetX', 0], - ['shadowOffsetY', 0] -]; - -var fixClipWithShadow = function (orignalBrush) { - - // version string can be: '11.0' - return (env$1.browser.ie && env$1.browser.version >= 11) - - ? function () { - var clipPaths = this.__clipPaths; - var style = this.style; - var modified; - - if (clipPaths) { - for (var i = 0; i < clipPaths.length; i++) { - var clipPath = clipPaths[i]; - var shape = clipPath && clipPath.shape; - var type = clipPath && clipPath.type; - - if (shape && ( - (type === 'sector' && shape.startAngle === shape.endAngle) - || (type === 'rect' && (!shape.width || !shape.height)) - )) { - for (var j = 0; j < shadowTemp.length; j++) { - // It is save to put shadowTemp static, because shadowTemp - // will be all modified each item brush called. - shadowTemp[j][2] = style[shadowTemp[j][0]]; - style[shadowTemp[j][0]] = shadowTemp[j][1]; - } - modified = true; - break; - } - } - } - - orignalBrush.apply(this, arguments); - - if (modified) { - for (var j = 0; j < shadowTemp.length; j++) { - style[shadowTemp[j][0]] = shadowTemp[j][2]; - } - } - } - - : orignalBrush; -}; - -/** - * 扇形 - * @module zrender/graphic/shape/Sector - */ - -var Sector = Path.extend({ - - type: 'sector', - - shape: { - - cx: 0, - - cy: 0, - - r0: 0, - - r: 0, - - startAngle: 0, - - endAngle: Math.PI * 2, - - clockwise: true - }, - - brush: fixClipWithShadow(Path.prototype.brush), - - buildPath: function (ctx, shape) { - - var x = shape.cx; - var y = shape.cy; - var r0 = Math.max(shape.r0 || 0, 0); - var r = Math.max(shape.r, 0); - var startAngle = shape.startAngle; - var endAngle = shape.endAngle; - var clockwise = shape.clockwise; - - var unitX = Math.cos(startAngle); - var unitY = Math.sin(startAngle); - - ctx.moveTo(unitX * r0 + x, unitY * r0 + y); - - ctx.lineTo(unitX * r + x, unitY * r + y); - - ctx.arc(x, y, r, startAngle, endAngle, !clockwise); - - ctx.lineTo( - Math.cos(endAngle) * r0 + x, - Math.sin(endAngle) * r0 + y - ); - - if (r0 !== 0) { - ctx.arc(x, y, r0, endAngle, startAngle, clockwise); - } - - ctx.closePath(); - } -}); - -/** - * n角星(n>3) - * @module zrender/graphic/shape/Star - */ - -var PI$2 = Math.PI; -var cos$2 = Math.cos; -var sin$2 = Math.sin; - -var Star = Path.extend({ - - type: 'star', - - shape: { - cx: 0, - cy: 0, - n: 3, - r0: null, - r: 0 - }, - - buildPath: function (ctx, shape) { - - var n = shape.n; - if (!n || n < 2) { - return; - } - - var x = shape.cx; - var y = shape.cy; - var r = shape.r; - var r0 = shape.r0; - - // 如果未指定内部顶点外接圆半径,则自动计算 - if (r0 == null) { - r0 = n > 4 - // 相隔的外部顶点的连线的交点, - // 被取为内部交点,以此计算r0 - ? r * cos$2(2 * PI$2 / n) / cos$2(PI$2 / n) - // 二三四角星的特殊处理 - : r / 3; - } - - var dStep = PI$2 / n; - var deg = -PI$2 / 2; - var xStart = x + r * cos$2(deg); - var yStart = y + r * sin$2(deg); - deg += dStep; - - // 记录边界点,用于判断inside - ctx.moveTo(xStart, yStart); - for (var i = 0, end = n * 2 - 1, ri; i < end; i++) { - ri = i % 2 === 0 ? r0 : r; - ctx.lineTo(x + ri * cos$2(deg), y + ri * sin$2(deg)); - deg += dStep; - } - - ctx.closePath(); - } -}); - -/** - * 内外旋轮曲线 - * @module zrender/graphic/shape/Trochold - */ - -var cos$3 = Math.cos; -var sin$3 = Math.sin; - -var Trochoid = Path.extend({ - - type: 'trochoid', - - shape: { - cx: 0, - cy: 0, - r: 0, - r0: 0, - d: 0, - location: 'out' - }, - - style: { - stroke: '#000', - - fill: null - }, - - buildPath: function (ctx, shape) { - var x1; - var y1; - var x2; - var y2; - var R = shape.r; - var r = shape.r0; - var d = shape.d; - var offsetX = shape.cx; - var offsetY = shape.cy; - var delta = shape.location === 'out' ? 1 : -1; - - if (shape.location && R <= r) { - return; - } - - var num = 0; - var i = 1; - var theta; - - x1 = (R + delta * r) * cos$3(0) - - delta * d * cos$3(0) + offsetX; - y1 = (R + delta * r) * sin$3(0) - - d * sin$3(0) + offsetY; - - ctx.moveTo(x1, y1); - - // 计算结束时的i - do { - num++; - } - while ((r * num) % (R + delta * r) !== 0); - - do { - theta = Math.PI / 180 * i; - x2 = (R + delta * r) * cos$3(theta) - - delta * d * cos$3((R / r + delta) * theta) - + offsetX; - y2 = (R + delta * r) * sin$3(theta) - - d * sin$3((R / r + delta) * theta) - + offsetY; - ctx.lineTo(x2, y2); - i++; - } - while (i <= (r * num) / (R + delta * r) * 360); - - } -}); - -/** - * x, y, r are all percent from 0 to 1 - * @param {number} [x=0.5] - * @param {number} [y=0.5] - * @param {number} [r=0.5] - * @param {Array.} [colorStops] - * @param {boolean} [globalCoord=false] - */ -var RadialGradient = function (x, y, r, colorStops, globalCoord) { - // Should do nothing more in this constructor. Because gradient can be - // declard by `color: {type: 'radial', colorStops: ...}`, where - // this constructor will not be called. - - this.x = x == null ? 0.5 : x; - - this.y = y == null ? 0.5 : y; - - this.r = r == null ? 0.5 : r; - - // Can be cloned - this.type = 'radial'; - - // If use global coord - this.global = globalCoord || false; - - Gradient.call(this, colorStops); -}; - -RadialGradient.prototype = { - - constructor: RadialGradient -}; - -inherits(RadialGradient, Gradient); - -/** - * Do not mount those modules on 'src/zrender' for better tree shaking. - */ - -var svgURI = 'http://www.w3.org/2000/svg'; - -function createElement(name) { - return document.createElementNS(svgURI, name); -} - -// TODO -// 1. shadow -// 2. Image: sx, sy, sw, sh - -var CMD$3 = PathProxy.CMD; -var arrayJoin = Array.prototype.join; - -var NONE = 'none'; -var mathRound = Math.round; -var mathSin$3 = Math.sin; -var mathCos$3 = Math.cos; -var PI$3 = Math.PI; -var PI2$4 = Math.PI * 2; -var degree = 180 / PI$3; - -var EPSILON$3 = 1e-4; - -function round4(val) { - return mathRound(val * 1e4) / 1e4; -} - -function isAroundZero$1(val) { - return val < EPSILON$3 && val > -EPSILON$3; -} - -function pathHasFill(style, isText) { - var fill = isText ? style.textFill : style.fill; - return fill != null && fill !== NONE; -} - -function pathHasStroke(style, isText) { - var stroke = isText ? style.textStroke : style.stroke; - return stroke != null && stroke !== NONE; -} - -function setTransform(svgEl, m) { - if (m) { - attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')'); - } -} - -function attr(el, key, val) { - if (!val || val.type !== 'linear' && val.type !== 'radial') { - // Don't set attribute for gradient, since it need new dom nodes - el.setAttribute(key, val); - } -} - -function attrXLink(el, key, val) { - el.setAttributeNS('http://www.w3.org/1999/xlink', key, val); -} - -function bindStyle(svgEl, style, isText, el) { - if (pathHasFill(style, isText)) { - var fill = isText ? style.textFill : style.fill; - fill = fill === 'transparent' ? NONE : fill; - attr(svgEl, 'fill', fill); - attr(svgEl, 'fill-opacity', style.fillOpacity != null ? style.fillOpacity * style.opacity : style.opacity); - } - else { - attr(svgEl, 'fill', NONE); - } - - if (pathHasStroke(style, isText)) { - var stroke = isText ? style.textStroke : style.stroke; - stroke = stroke === 'transparent' ? NONE : stroke; - attr(svgEl, 'stroke', stroke); - var strokeWidth = isText - ? style.textStrokeWidth - : style.lineWidth; - var strokeScale = !isText && style.strokeNoScale - ? el.getLineScale() - : 1; - attr(svgEl, 'stroke-width', strokeWidth / strokeScale); - // stroke then fill for text; fill then stroke for others - attr(svgEl, 'paint-order', isText ? 'stroke' : 'fill'); - attr(svgEl, 'stroke-opacity', style.strokeOpacity != null ? style.strokeOpacity : style.opacity); - var lineDash = style.lineDash; - if (lineDash) { - attr(svgEl, 'stroke-dasharray', style.lineDash.join(',')); - attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0)); - } - else { - attr(svgEl, 'stroke-dasharray', ''); - } - - // PENDING - style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap); - style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin); - style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit); - } - else { - attr(svgEl, 'stroke', NONE); - } -} - -/*************************************************** - * PATH - **************************************************/ -function pathDataToString(path) { - var str = []; - var data = path.data; - var dataLength = path.len(); - for (var i = 0; i < dataLength;) { - var cmd = data[i++]; - var cmdStr = ''; - var nData = 0; - switch (cmd) { - case CMD$3.M: - cmdStr = 'M'; - nData = 2; - break; - case CMD$3.L: - cmdStr = 'L'; - nData = 2; - break; - case CMD$3.Q: - cmdStr = 'Q'; - nData = 4; - break; - case CMD$3.C: - cmdStr = 'C'; - nData = 6; - break; - case CMD$3.A: - var cx = data[i++]; - var cy = data[i++]; - var rx = data[i++]; - var ry = data[i++]; - var theta = data[i++]; - var dTheta = data[i++]; - var psi = data[i++]; - var clockwise = data[i++]; - - var dThetaPositive = Math.abs(dTheta); - var isCircle = isAroundZero$1(dThetaPositive - PI2$4) - || (clockwise ? dTheta >= PI2$4 : -dTheta >= PI2$4); - - // Mapping to 0~2PI - var unifiedTheta = dTheta > 0 ? dTheta % PI2$4 : (dTheta % PI2$4 + PI2$4); - - var large = false; - if (isCircle) { - large = true; - } - else if (isAroundZero$1(dThetaPositive)) { - large = false; - } - else { - large = (unifiedTheta >= PI$3) === !!clockwise; - } - - var x0 = round4(cx + rx * mathCos$3(theta)); - var y0 = round4(cy + ry * mathSin$3(theta)); - - // It will not draw if start point and end point are exactly the same - // We need to shift the end point with a small value - // FIXME A better way to draw circle ? - if (isCircle) { - if (clockwise) { - dTheta = PI2$4 - 1e-4; - } - else { - dTheta = -PI2$4 + 1e-4; - } - - large = true; - - if (i === 9) { - // Move to (x0, y0) only when CMD.A comes at the - // first position of a shape. - // For instance, when drawing a ring, CMD.A comes - // after CMD.M, so it's unnecessary to move to - // (x0, y0). - str.push('M', x0, y0); - } - } - - var x = round4(cx + rx * mathCos$3(theta + dTheta)); - var y = round4(cy + ry * mathSin$3(theta + dTheta)); - - // FIXME Ellipse - str.push('A', round4(rx), round4(ry), - mathRound(psi * degree), +large, +clockwise, x, y); - break; - case CMD$3.Z: - cmdStr = 'Z'; - break; - case CMD$3.R: - var x = round4(data[i++]); - var y = round4(data[i++]); - var w = round4(data[i++]); - var h = round4(data[i++]); - str.push( - 'M', x, y, - 'L', x + w, y, - 'L', x + w, y + h, - 'L', x, y + h, - 'L', x, y - ); - break; - } - cmdStr && str.push(cmdStr); - for (var j = 0; j < nData; j++) { - // PENDING With scale - str.push(round4(data[i++])); - } - } - return str.join(' '); -} - -var svgPath = {}; -svgPath.brush = function (el) { - var style = el.style; - - var svgEl = el.__svgEl; - if (!svgEl) { - svgEl = createElement('path'); - el.__svgEl = svgEl; - } - - if (!el.path) { - el.createPathProxy(); - } - var path = el.path; - - if (el.__dirtyPath) { - path.beginPath(); - path.subPixelOptimize = false; - el.buildPath(path, el.shape); - el.__dirtyPath = false; - - var pathStr = pathDataToString(path); - if (pathStr.indexOf('NaN') < 0) { - // Ignore illegal path, which may happen such in out-of-range - // data in Calendar series. - attr(svgEl, 'd', pathStr); - } - } - - bindStyle(svgEl, style, false, el); - setTransform(svgEl, el.transform); - - if (style.text != null) { - svgTextDrawRectText(el, el.getBoundingRect()); - } - else { - removeOldTextNode(el); - } -}; - -/*************************************************** - * IMAGE - **************************************************/ -var svgImage = {}; -svgImage.brush = function (el) { - var style = el.style; - var image = style.image; - - if (image instanceof HTMLImageElement) { - var src = image.src; - image = src; - } - if (!image) { - return; - } - - var x = style.x || 0; - var y = style.y || 0; - - var dw = style.width; - var dh = style.height; - - var svgEl = el.__svgEl; - if (!svgEl) { - svgEl = createElement('image'); - el.__svgEl = svgEl; - } - - if (image !== el.__imageSrc) { - attrXLink(svgEl, 'href', image); - // Caching image src - el.__imageSrc = image; - } - - attr(svgEl, 'width', dw); - attr(svgEl, 'height', dh); - - attr(svgEl, 'x', x); - attr(svgEl, 'y', y); - - setTransform(svgEl, el.transform); - - if (style.text != null) { - svgTextDrawRectText(el, el.getBoundingRect()); - } - else { - removeOldTextNode(el); - } -}; - -/*************************************************** - * TEXT - **************************************************/ -var svgText = {}; -var _tmpTextHostRect = new BoundingRect(); -var _tmpTextBoxPos = {}; -var _tmpTextTransform = []; -var TEXT_ALIGN_TO_ANCHRO = { - left: 'start', - right: 'end', - center: 'middle', - middle: 'middle' -}; - -/** - * @param {module:zrender/Element} el - * @param {Object|boolean} [hostRect] {x, y, width, height} - * If set false, rect text is not used. - */ -var svgTextDrawRectText = function (el, hostRect) { - var style = el.style; - var elTransform = el.transform; - var needTransformTextByHostEl = el instanceof Text || style.transformText; - - el.__dirty && normalizeTextStyle(style, true); - - var text = style.text; - // Convert to string - text != null && (text += ''); - if (!needDrawText(text, style)) { - return; - } - // render empty text for svg if no text but need draw text. - text == null && (text = ''); - - // Follow the setting in the canvas renderer, if not transform the - // text, transform the hostRect, by which the text is located. - if (!needTransformTextByHostEl && elTransform) { - _tmpTextHostRect.copy(hostRect); - _tmpTextHostRect.applyTransform(elTransform); - hostRect = _tmpTextHostRect; - } - - var textSvgEl = el.__textSvgEl; - if (!textSvgEl) { - textSvgEl = createElement('text'); - el.__textSvgEl = textSvgEl; - } - - // style.font has been normalized by `normalizeTextStyle`. - var textSvgElStyle = textSvgEl.style; - var font = style.font || DEFAULT_FONT$1; - var computedFont = textSvgEl.__computedFont; - if (font !== textSvgEl.__styleFont) { - textSvgElStyle.font = textSvgEl.__styleFont = font; - // The computedFont might not be the orginal font if it is illegal font. - computedFont = textSvgEl.__computedFont = textSvgElStyle.font; - } - - var textPadding = style.textPadding; - var textLineHeight = style.textLineHeight; - - var contentBlock = el.__textCotentBlock; - if (!contentBlock || el.__dirtyText) { - contentBlock = el.__textCotentBlock = parsePlainText( - text, computedFont, textPadding, textLineHeight, style.truncate - ); - } - - var outerHeight = contentBlock.outerHeight; - var lineHeight = contentBlock.lineHeight; - - getBoxPosition(_tmpTextBoxPos, el, style, hostRect); - var baseX = _tmpTextBoxPos.baseX; - var baseY = _tmpTextBoxPos.baseY; - var textAlign = _tmpTextBoxPos.textAlign || 'left'; - var textVerticalAlign = _tmpTextBoxPos.textVerticalAlign; - - setTextTransform( - textSvgEl, needTransformTextByHostEl, elTransform, style, hostRect, baseX, baseY - ); - - var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign); - var textX = baseX; - var textY = boxY; - - // TODO needDrawBg - if (textPadding) { - textX = getTextXForPadding$1(baseX, textAlign, textPadding); - textY += textPadding[0]; - } - - // `textBaseline` is set as 'middle'. - textY += lineHeight / 2; - - bindStyle(textSvgEl, style, true, el); - - // FIXME - // Add a in svg, where nodeName is 'style',\n // CSS classes is defined globally wherever the style tags are declared.\n\n if (nodeName === 'defs') {\n // define flag\n this._isDefine = true;\n }\n else if (nodeName === 'text') {\n this._isText = true;\n }\n\n var el;\n if (this._isDefine) {\n var parser = defineParsers[nodeName];\n if (parser) {\n var def = parser.call(this, xmlNode);\n var id = xmlNode.getAttribute('id');\n if (id) {\n this._defs[id] = def;\n }\n }\n }\n else {\n var parser = nodeParsers[nodeName];\n if (parser) {\n el = parser.call(this, xmlNode, parentGroup);\n parentGroup.add(el);\n }\n }\n\n var child = xmlNode.firstChild;\n while (child) {\n if (child.nodeType === 1) {\n this._parseNode(child, el);\n }\n // Is text\n if (child.nodeType === 3 && this._isText) {\n this._parseText(child, el);\n }\n child = child.nextSibling;\n }\n\n // Quit define\n if (nodeName === 'defs') {\n this._isDefine = false;\n }\n else if (nodeName === 'text') {\n this._isText = false;\n }\n};\n\nSVGParser.prototype._parseText = function (xmlNode, parentGroup) {\n if (xmlNode.nodeType === 1) {\n var dx = xmlNode.getAttribute('dx') || 0;\n var dy = xmlNode.getAttribute('dy') || 0;\n this._textX += parseFloat(dx);\n this._textY += parseFloat(dy);\n }\n\n var text = new Text({\n style: {\n text: xmlNode.textContent,\n transformText: true\n },\n position: [this._textX || 0, this._textY || 0]\n });\n\n inheritStyle(parentGroup, text);\n parseAttributes(xmlNode, text, this._defs);\n\n var fontSize = text.style.fontSize;\n if (fontSize && fontSize < 9) {\n // PENDING\n text.style.fontSize = 9;\n text.scale = text.scale || [1, 1];\n text.scale[0] *= fontSize / 9;\n text.scale[1] *= fontSize / 9;\n }\n\n var rect = text.getBoundingRect();\n this._textX += rect.width;\n\n parentGroup.add(text);\n\n return text;\n};\n\nvar nodeParsers = {\n 'g': function (xmlNode, parentGroup) {\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n\n return g;\n },\n 'rect': function (xmlNode, parentGroup) {\n var rect = new Rect();\n inheritStyle(parentGroup, rect);\n parseAttributes(xmlNode, rect, this._defs);\n\n rect.setShape({\n x: parseFloat(xmlNode.getAttribute('x') || 0),\n y: parseFloat(xmlNode.getAttribute('y') || 0),\n width: parseFloat(xmlNode.getAttribute('width') || 0),\n height: parseFloat(xmlNode.getAttribute('height') || 0)\n });\n\n // console.log(xmlNode.getAttribute('transform'));\n // console.log(rect.transform);\n\n return rect;\n },\n 'circle': function (xmlNode, parentGroup) {\n var circle = new Circle();\n inheritStyle(parentGroup, circle);\n parseAttributes(xmlNode, circle, this._defs);\n\n circle.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || 0),\n cy: parseFloat(xmlNode.getAttribute('cy') || 0),\n r: parseFloat(xmlNode.getAttribute('r') || 0)\n });\n\n return circle;\n },\n 'line': function (xmlNode, parentGroup) {\n var line = new Line();\n inheritStyle(parentGroup, line);\n parseAttributes(xmlNode, line, this._defs);\n\n line.setShape({\n x1: parseFloat(xmlNode.getAttribute('x1') || 0),\n y1: parseFloat(xmlNode.getAttribute('y1') || 0),\n x2: parseFloat(xmlNode.getAttribute('x2') || 0),\n y2: parseFloat(xmlNode.getAttribute('y2') || 0)\n });\n\n return line;\n },\n 'ellipse': function (xmlNode, parentGroup) {\n var ellipse = new Ellipse();\n inheritStyle(parentGroup, ellipse);\n parseAttributes(xmlNode, ellipse, this._defs);\n\n ellipse.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || 0),\n cy: parseFloat(xmlNode.getAttribute('cy') || 0),\n rx: parseFloat(xmlNode.getAttribute('rx') || 0),\n ry: parseFloat(xmlNode.getAttribute('ry') || 0)\n });\n return ellipse;\n },\n 'polygon': function (xmlNode, parentGroup) {\n var points = xmlNode.getAttribute('points');\n if (points) {\n points = parsePoints(points);\n }\n var polygon = new Polygon({\n shape: {\n points: points || []\n }\n });\n\n inheritStyle(parentGroup, polygon);\n parseAttributes(xmlNode, polygon, this._defs);\n\n return polygon;\n },\n 'polyline': function (xmlNode, parentGroup) {\n var path = new Path();\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defs);\n\n var points = xmlNode.getAttribute('points');\n if (points) {\n points = parsePoints(points);\n }\n var polyline = new Polyline({\n shape: {\n points: points || []\n }\n });\n\n return polyline;\n },\n 'image': function (xmlNode, parentGroup) {\n var img = new ZImage();\n inheritStyle(parentGroup, img);\n parseAttributes(xmlNode, img, this._defs);\n\n img.setStyle({\n image: xmlNode.getAttribute('xlink:href'),\n x: xmlNode.getAttribute('x'),\n y: xmlNode.getAttribute('y'),\n width: xmlNode.getAttribute('width'),\n height: xmlNode.getAttribute('height')\n });\n\n return img;\n },\n 'text': function (xmlNode, parentGroup) {\n var x = xmlNode.getAttribute('x') || 0;\n var y = xmlNode.getAttribute('y') || 0;\n var dx = xmlNode.getAttribute('dx') || 0;\n var dy = xmlNode.getAttribute('dy') || 0;\n\n this._textX = parseFloat(x) + parseFloat(dx);\n this._textY = parseFloat(y) + parseFloat(dy);\n\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n\n return g;\n },\n 'tspan': function (xmlNode, parentGroup) {\n var x = xmlNode.getAttribute('x');\n var y = xmlNode.getAttribute('y');\n if (x != null) {\n // new offset x\n this._textX = parseFloat(x);\n }\n if (y != null) {\n // new offset y\n this._textY = parseFloat(y);\n }\n var dx = xmlNode.getAttribute('dx') || 0;\n var dy = xmlNode.getAttribute('dy') || 0;\n\n var g = new Group();\n\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n\n\n this._textX += dx;\n this._textY += dy;\n\n return g;\n },\n 'path': function (xmlNode, parentGroup) {\n // TODO svg fill rule\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n // path.style.globalCompositeOperation = 'xor';\n var d = xmlNode.getAttribute('d') || '';\n\n // Performance sensitive.\n\n var path = createFromString(d);\n\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defs);\n\n return path;\n }\n};\n\nvar defineParsers = {\n\n 'lineargradient': function (xmlNode) {\n var x1 = parseInt(xmlNode.getAttribute('x1') || 0, 10);\n var y1 = parseInt(xmlNode.getAttribute('y1') || 0, 10);\n var x2 = parseInt(xmlNode.getAttribute('x2') || 10, 10);\n var y2 = parseInt(xmlNode.getAttribute('y2') || 0, 10);\n\n var gradient = new LinearGradient(x1, y1, x2, y2);\n\n _parseGradientColorStops(xmlNode, gradient);\n\n return gradient;\n },\n\n 'radialgradient': function (xmlNode) {\n\n }\n};\n\nfunction _parseGradientColorStops(xmlNode, gradient) {\n\n var stop = xmlNode.firstChild;\n\n while (stop) {\n if (stop.nodeType === 1) {\n var offset = stop.getAttribute('offset');\n if (offset.indexOf('%') > 0) { // percentage\n offset = parseInt(offset, 10) / 100;\n }\n else if (offset) { // number from 0 to 1\n offset = parseFloat(offset);\n }\n else {\n offset = 0;\n }\n\n var stopColor = stop.getAttribute('stop-color') || '#000000';\n\n gradient.addColorStop(offset, stopColor);\n }\n stop = stop.nextSibling;\n }\n}\n\nfunction inheritStyle(parent, child) {\n if (parent && parent.__inheritedStyle) {\n if (!child.__inheritedStyle) {\n child.__inheritedStyle = {};\n }\n defaults(child.__inheritedStyle, parent.__inheritedStyle);\n }\n}\n\nfunction parsePoints(pointsString) {\n var list = trim(pointsString).split(DILIMITER_REG);\n var points = [];\n\n for (var i = 0; i < list.length; i += 2) {\n var x = parseFloat(list[i]);\n var y = parseFloat(list[i + 1]);\n points.push([x, y]);\n }\n return points;\n}\n\nvar attributesMap = {\n 'fill': 'fill',\n 'stroke': 'stroke',\n 'stroke-width': 'lineWidth',\n 'opacity': 'opacity',\n 'fill-opacity': 'fillOpacity',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-dasharray': 'lineDash',\n 'stroke-dashoffset': 'lineDashOffset',\n 'stroke-linecap': 'lineCap',\n 'stroke-linejoin': 'lineJoin',\n 'stroke-miterlimit': 'miterLimit',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n\n 'text-align': 'textAlign',\n 'alignment-baseline': 'textBaseline'\n};\n\nfunction parseAttributes(xmlNode, el, defs, onlyInlineStyle) {\n var zrStyle = el.__inheritedStyle || {};\n var isTextEl = el.type === 'text';\n\n // TODO Shadow\n if (xmlNode.nodeType === 1) {\n parseTransformAttribute(xmlNode, el);\n\n extend(zrStyle, parseStyleAttribute(xmlNode));\n\n if (!onlyInlineStyle) {\n for (var svgAttrName in attributesMap) {\n if (attributesMap.hasOwnProperty(svgAttrName)) {\n var attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n zrStyle[attributesMap[svgAttrName]] = attrValue;\n }\n }\n }\n }\n }\n\n var elFillProp = isTextEl ? 'textFill' : 'fill';\n var elStrokeProp = isTextEl ? 'textStroke' : 'stroke';\n\n el.style = el.style || new Style();\n var elStyle = el.style;\n\n zrStyle.fill != null && elStyle.set(elFillProp, getPaint(zrStyle.fill, defs));\n zrStyle.stroke != null && elStyle.set(elStrokeProp, getPaint(zrStyle.stroke, defs));\n\n each([\n 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n ], function (propName) {\n var elPropName = (propName === 'lineWidth' && isTextEl) ? 'textStrokeWidth' : propName;\n zrStyle[propName] != null && elStyle.set(elPropName, parseFloat(zrStyle[propName]));\n });\n\n if (!zrStyle.textBaseline || zrStyle.textBaseline === 'auto') {\n zrStyle.textBaseline = 'alphabetic';\n }\n if (zrStyle.textBaseline === 'alphabetic') {\n zrStyle.textBaseline = 'bottom';\n }\n if (zrStyle.textAlign === 'start') {\n zrStyle.textAlign = 'left';\n }\n if (zrStyle.textAlign === 'end') {\n zrStyle.textAlign = 'right';\n }\n\n each(['lineDashOffset', 'lineCap', 'lineJoin',\n 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign', 'textBaseline'\n ], function (propName) {\n zrStyle[propName] != null && elStyle.set(propName, zrStyle[propName]);\n });\n\n if (zrStyle.lineDash) {\n el.style.lineDash = trim(zrStyle.lineDash).split(DILIMITER_REG);\n }\n\n if (elStyle[elStrokeProp] && elStyle[elStrokeProp] !== 'none') {\n // enable stroke\n el[elStrokeProp] = true;\n }\n\n el.__inheritedStyle = zrStyle;\n}\n\n\nvar urlRegex = /url\\(\\s*#(.*?)\\)/;\nfunction getPaint(str, defs) {\n // if (str === 'none') {\n // return;\n // }\n var urlMatch = defs && str && str.match(urlRegex);\n if (urlMatch) {\n var url = trim(urlMatch[1]);\n var def = defs[url];\n return def;\n }\n return str;\n}\n\nvar transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.e,]*)\\)/g;\n\nfunction parseTransformAttribute(xmlNode, node) {\n var transform = xmlNode.getAttribute('transform');\n if (transform) {\n transform = transform.replace(/,/g, ' ');\n var m = null;\n var transformOps = [];\n transform.replace(transformRegex, function (str, type, value) {\n transformOps.push(type, value);\n });\n for (var i = transformOps.length - 1; i > 0; i -= 2) {\n var value = transformOps[i];\n var type = transformOps[i - 1];\n m = m || matrix.create();\n switch (type) {\n case 'translate':\n value = trim(value).split(DILIMITER_REG);\n matrix.translate(m, m, [parseFloat(value[0]), parseFloat(value[1] || 0)]);\n break;\n case 'scale':\n value = trim(value).split(DILIMITER_REG);\n matrix.scale(m, m, [parseFloat(value[0]), parseFloat(value[1] || value[0])]);\n break;\n case 'rotate':\n value = trim(value).split(DILIMITER_REG);\n matrix.rotate(m, m, parseFloat(value[0]));\n break;\n case 'skew':\n value = trim(value).split(DILIMITER_REG);\n console.warn('Skew transform is not supported yet');\n break;\n case 'matrix':\n var value = trim(value).split(DILIMITER_REG);\n m[0] = parseFloat(value[0]);\n m[1] = parseFloat(value[1]);\n m[2] = parseFloat(value[2]);\n m[3] = parseFloat(value[3]);\n m[4] = parseFloat(value[4]);\n m[5] = parseFloat(value[5]);\n break;\n }\n }\n node.setLocalTransform(m);\n }\n}\n\n// Value may contain space.\nvar styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseStyleAttribute(xmlNode) {\n var style = xmlNode.getAttribute('style');\n var result = {};\n\n if (!style) {\n return result;\n }\n\n var styleList = {};\n styleRegex.lastIndex = 0;\n var styleRegResult;\n while ((styleRegResult = styleRegex.exec(style)) != null) {\n styleList[styleRegResult[1]] = styleRegResult[2];\n }\n\n for (var svgAttrName in attributesMap) {\n if (attributesMap.hasOwnProperty(svgAttrName) && styleList[svgAttrName] != null) {\n result[attributesMap[svgAttrName]] = styleList[svgAttrName];\n }\n }\n\n return result;\n}\n\n/**\n * @param {Array.} viewBoxRect\n * @param {number} width\n * @param {number} height\n * @return {Object} {scale, position}\n */\nexport function makeViewBoxTransform(viewBoxRect, width, height) {\n var scaleX = width / viewBoxRect.width;\n var scaleY = height / viewBoxRect.height;\n var scale = Math.min(scaleX, scaleY);\n // preserveAspectRatio 'xMidYMid'\n var viewBoxScale = [scale, scale];\n var viewBoxPosition = [\n -(viewBoxRect.x + viewBoxRect.width / 2) * scale + width / 2,\n -(viewBoxRect.y + viewBoxRect.height / 2) * scale + height / 2\n ];\n\n return {\n scale: viewBoxScale,\n position: viewBoxPosition\n };\n}\n\n/**\n * @param {string|XMLElement} xml\n * @param {Object} [opt]\n * @param {number} [opt.width] Default width if svg width not specified or is a percent value.\n * @param {number} [opt.height] Default height if svg height not specified or is a percent value.\n * @param {boolean} [opt.ignoreViewBox]\n * @param {boolean} [opt.ignoreRootClip]\n * @return {Object} result:\n * {\n * root: Group, The root of the the result tree of zrender shapes,\n * width: number, the viewport width of the SVG,\n * height: number, the viewport height of the SVG,\n * viewBoxRect: {x, y, width, height}, the declared viewBox rect of the SVG, if exists,\n * viewBoxTransform: the {scale, position} calculated by viewBox and viewport, is exists.\n * }\n */\nexport function parseSVG(xml, opt) {\n var parser = new SVGParser();\n return parser.parse(xml, opt);\n}","// CompoundPath to improve performance\n\nimport Path from './Path';\n\nexport default Path.extend({\n\n type: 'compound',\n\n shape: {\n\n paths: null\n },\n\n _updatePathDirty: function () {\n var dirtyPath = this.__dirtyPath;\n var paths = this.shape.paths;\n for (var i = 0; i < paths.length; i++) {\n // Mark as dirty if any subpath is dirty\n dirtyPath = dirtyPath || paths[i].__dirtyPath;\n }\n this.__dirtyPath = dirtyPath;\n this.__dirty = this.__dirty || dirtyPath;\n },\n\n beforeBrush: function () {\n this._updatePathDirty();\n var paths = this.shape.paths || [];\n var scale = this.getGlobalScale();\n // Update path scale\n for (var i = 0; i < paths.length; i++) {\n if (!paths[i].path) {\n paths[i].createPathProxy();\n }\n paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n }\n },\n\n buildPath: function (ctx, shape) {\n var paths = shape.paths || [];\n for (var i = 0; i < paths.length; i++) {\n paths[i].buildPath(ctx, paths[i].shape, true);\n }\n },\n\n afterBrush: function () {\n var paths = this.shape.paths || [];\n for (var i = 0; i < paths.length; i++) {\n paths[i].__dirtyPath = false;\n }\n },\n\n getBoundingRect: function () {\n this._updatePathDirty();\n return Path.prototype.getBoundingRect.call(this);\n }\n});","/**\n * Displayable for incremental rendering. It will be rendered in a separate layer\n * IncrementalDisplay have two main methods. `clearDisplayables` and `addDisplayables`\n * addDisplayables will render the added displayables incremetally.\n *\n * It use a not clearFlag to tell the painter don't clear the layer if it's the first element.\n */\nimport { inherits } from '../core/util';\nimport Displayble from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\n\n// TODO Style override ?\nfunction IncrementalDisplayble(opts) {\n\n Displayble.call(this, opts);\n\n this._displayables = [];\n\n this._temporaryDisplayables = [];\n\n this._cursor = 0;\n\n this.notClear = true;\n}\n\nIncrementalDisplayble.prototype.incremental = true;\n\nIncrementalDisplayble.prototype.clearDisplaybles = function () {\n this._displayables = [];\n this._temporaryDisplayables = [];\n this._cursor = 0;\n this.dirty();\n\n this.notClear = false;\n};\n\nIncrementalDisplayble.prototype.addDisplayable = function (displayable, notPersistent) {\n if (notPersistent) {\n this._temporaryDisplayables.push(displayable);\n }\n else {\n this._displayables.push(displayable);\n }\n this.dirty();\n};\n\nIncrementalDisplayble.prototype.addDisplayables = function (displayables, notPersistent) {\n notPersistent = notPersistent || false;\n for (var i = 0; i < displayables.length; i++) {\n this.addDisplayable(displayables[i], notPersistent);\n }\n};\n\nIncrementalDisplayble.prototype.eachPendingDisplayable = function (cb) {\n for (var i = this._cursor; i < this._displayables.length; i++) {\n cb && cb(this._displayables[i]);\n }\n for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n cb && cb(this._temporaryDisplayables[i]);\n }\n};\n\nIncrementalDisplayble.prototype.update = function () {\n this.updateTransform();\n for (var i = this._cursor; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n // PENDING\n displayable.parent = this;\n displayable.update();\n displayable.parent = null;\n }\n for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n var displayable = this._temporaryDisplayables[i];\n // PENDING\n displayable.parent = this;\n displayable.update();\n displayable.parent = null;\n }\n};\n\nIncrementalDisplayble.prototype.brush = function (ctx, prevEl) {\n // Render persistant displayables.\n for (var i = this._cursor; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n displayable.beforeBrush && displayable.beforeBrush(ctx);\n displayable.brush(ctx, i === this._cursor ? null : this._displayables[i - 1]);\n displayable.afterBrush && displayable.afterBrush(ctx);\n }\n this._cursor = i;\n // Render temporary displayables.\n for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n var displayable = this._temporaryDisplayables[i];\n displayable.beforeBrush && displayable.beforeBrush(ctx);\n displayable.brush(ctx, i === 0 ? null : this._temporaryDisplayables[i - 1]);\n displayable.afterBrush && displayable.afterBrush(ctx);\n }\n\n this._temporaryDisplayables = [];\n\n this.notClear = true;\n};\n\nvar m = [];\nIncrementalDisplayble.prototype.getBoundingRect = function () {\n if (!this._rect) {\n var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n for (var i = 0; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n var childRect = displayable.getBoundingRect().clone();\n if (displayable.needLocalTransform()) {\n childRect.applyTransform(displayable.getLocalTransform(m));\n }\n rect.union(childRect);\n }\n this._rect = rect;\n }\n return this._rect;\n};\n\nIncrementalDisplayble.prototype.contain = function (x, y) {\n var localPos = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n\n if (rect.contain(localPos[0], localPos[1])) {\n for (var i = 0; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n if (displayable.contain(x, y)) {\n return true;\n }\n }\n }\n return false;\n};\n\ninherits(IncrementalDisplayble, Displayble);\n\nexport default IncrementalDisplayble;","/**\n * 圆弧\n * @module zrender/graphic/shape/Arc\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n type: 'arc',\n\n shape: {\n\n cx: 0,\n\n cy: 0,\n\n r: 0,\n\n startAngle: 0,\n\n endAngle: Math.PI * 2,\n\n clockwise: true\n },\n\n style: {\n\n stroke: '#000',\n\n fill: null\n },\n\n buildPath: function (ctx, shape) {\n\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\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n }\n});","/**\n * 贝塞尔曲线\n * @module zrender/shape/BezierCurve\n */\n\nimport Path from '../Path';\nimport * as vec2 from '../../core/vector';\nimport {\n quadraticSubdivide,\n cubicSubdivide,\n quadraticAt,\n cubicAt,\n quadraticDerivativeAt,\n cubicDerivativeAt\n} from '../../core/curve';\n\nvar out = [];\n\nfunction someVectorAt(shape, t, isTangent) {\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n if (cpx2 === null || cpy2 === null) {\n return [\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\n ];\n }\n else {\n return [\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\n ];\n }\n}\n\nexport default Path.extend({\n\n type: 'bezier-curve',\n\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\n // Curve show percent, for animating\n percent: 1\n },\n\n style: {\n stroke: '#000',\n fill: null\n },\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 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(\n x1, cpx1, x2, percent, out\n );\n cpx1 = out[1];\n x2 = out[2];\n quadraticSubdivide(\n y1, cpy1, y2, percent, out\n );\n cpy1 = out[1];\n y2 = out[2];\n }\n\n ctx.quadraticCurveTo(\n cpx1, cpy1,\n x2, y2\n );\n }\n else {\n if (percent < 1) {\n cubicSubdivide(\n x1, cpx1, cpx2, x2, percent, out\n );\n cpx1 = out[1];\n cpx2 = out[2];\n x2 = out[3];\n cubicSubdivide(\n y1, cpy1, cpy2, y2, percent, out\n );\n cpy1 = out[1];\n cpy2 = out[2];\n y2 = out[3];\n }\n ctx.bezierCurveTo(\n cpx1, cpy1,\n cpx2, cpy2,\n x2, y2\n );\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 * 水滴形状\n * @module zrender/graphic/shape/Droplet\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n type: 'droplet',\n\n shape: {\n cx: 0, cy: 0,\n width: 0, height: 0\n },\n\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var a = shape.width;\n var b = shape.height;\n\n ctx.moveTo(x, y + a);\n ctx.bezierCurveTo(\n x + a,\n y + a,\n x + a * 3 / 2,\n y - a / 3,\n x,\n y - b\n );\n ctx.bezierCurveTo(\n x - a * 3 / 2,\n y - a / 3,\n x - a,\n y + a,\n x,\n y + a\n );\n ctx.closePath();\n }\n});","/**\n * 心形\n * @module zrender/graphic/shape/Heart\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n type: 'heart',\n\n shape: {\n cx: 0,\n cy: 0,\n width: 0,\n height: 0\n },\n\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var a = shape.width;\n var b = shape.height;\n ctx.moveTo(x, y);\n ctx.bezierCurveTo(\n x + a / 2, y - b * 2 / 3,\n x + a * 2, y + b / 3,\n x, y + b\n );\n ctx.bezierCurveTo(\n x - a * 2, y + b / 3,\n x - a / 2, y - b * 2 / 3,\n x, y\n );\n }\n});","/**\n * 正多边形\n * @module zrender/shape/Isogon\n */\n\nimport Path from '../Path';\n\nvar PI = Math.PI;\nvar sin = Math.sin;\nvar cos = Math.cos;\n\nexport default Path.extend({\n\n type: 'isogon',\n\n shape: {\n x: 0, y: 0,\n r: 0, n: 0\n },\n\n buildPath: function (ctx, shape) {\n var n = shape.n;\n if (!n || n < 2) {\n return;\n }\n\n var x = shape.x;\n var y = shape.y;\n var r = shape.r;\n\n var dStep = 2 * PI / n;\n var deg = -PI / 2;\n\n ctx.moveTo(x + r * cos(deg), y + r * sin(deg));\n for (var i = 0, end = n - 1; i < end; i++) {\n deg += dStep;\n ctx.lineTo(x + r * cos(deg), y + r * sin(deg));\n }\n\n ctx.closePath();\n\n return;\n }\n});","/**\n * 圆环\n * @module zrender/graphic/shape/Ring\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n type: 'ring',\n\n shape: {\n cx: 0,\n cy: 0,\n r: 0,\n r0: 0\n },\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 * 玫瑰线\n * @module zrender/graphic/shape/Rose\n */\n\nimport Path from '../Path';\n\nvar sin = Math.sin;\nvar cos = Math.cos;\nvar radian = Math.PI / 180;\n\nexport default Path.extend({\n\n type: 'rose',\n\n shape: {\n cx: 0,\n cy: 0,\n r: [],\n k: 0,\n n: 1\n },\n\n style: {\n stroke: '#000',\n fill: null\n },\n\n buildPath: function (ctx, shape) {\n var x;\n var y;\n var R = shape.r;\n var r;\n var k = shape.k;\n var n = shape.n;\n\n var x0 = shape.cx;\n var y0 = shape.cy;\n\n ctx.moveTo(x0, y0);\n\n for (var i = 0, len = R.length; i < len; i++) {\n r = R[i];\n\n for (var j = 0; j <= 360 * n; j++) {\n x = r\n * sin(k / n * j % 360 * radian)\n * cos(j * radian)\n + x0;\n y = r\n * sin(k / n * j % 360 * radian)\n * sin(j * radian)\n + y0;\n ctx.lineTo(x, y);\n }\n }\n }\n});","import env from '../../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// )\n\nvar shadowTemp = [\n ['shadowBlur', 0],\n ['shadowColor', '#000'],\n ['shadowOffsetX', 0],\n ['shadowOffsetY', 0]\n];\n\nexport default function (orignalBrush) {\n\n // version string can be: '11.0'\n return (env.browser.ie && env.browser.version >= 11)\n\n ? 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 && (\n (type === 'sector' && shape.startAngle === shape.endAngle)\n || (type === 'rect' && (!shape.width || !shape.height))\n )) {\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 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 }\n\n : orignalBrush;\n}\n","/**\n * 扇形\n * @module zrender/graphic/shape/Sector\n */\n\nimport Path from '../Path';\nimport fixClipWithShadow from '../helper/fixClipWithShadow';\n\nexport default Path.extend({\n\n type: 'sector',\n\n shape: {\n\n cx: 0,\n\n cy: 0,\n\n r0: 0,\n\n r: 0,\n\n startAngle: 0,\n\n endAngle: Math.PI * 2,\n\n clockwise: true\n },\n\n brush: fixClipWithShadow(Path.prototype.brush),\n\n buildPath: function (ctx, shape) {\n\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\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n\n ctx.moveTo(unitX * r0 + x, unitY * r0 + y);\n\n ctx.lineTo(unitX * r + x, unitY * r + y);\n\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n\n ctx.lineTo(\n Math.cos(endAngle) * r0 + x,\n Math.sin(endAngle) * r0 + y\n );\n\n if (r0 !== 0) {\n ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n }\n\n ctx.closePath();\n }\n});","/**\n * n角星(n>3)\n * @module zrender/graphic/shape/Star\n */\n\nimport Path from '../Path';\n\nvar PI = Math.PI;\nvar cos = Math.cos;\nvar sin = Math.sin;\n\nexport default Path.extend({\n\n type: 'star',\n\n shape: {\n cx: 0,\n cy: 0,\n n: 3,\n r0: null,\n r: 0\n },\n\n buildPath: function (ctx, shape) {\n\n var n = shape.n;\n if (!n || n < 2) {\n return;\n }\n\n var x = shape.cx;\n var y = shape.cy;\n var r = shape.r;\n var r0 = shape.r0;\n\n // 如果未指定内部顶点外接圆半径,则自动计算\n if (r0 == null) {\n r0 = n > 4\n // 相隔的外部顶点的连线的交点,\n // 被取为内部交点,以此计算r0\n ? r * cos(2 * PI / n) / cos(PI / n)\n // 二三四角星的特殊处理\n : r / 3;\n }\n\n var dStep = PI / n;\n var deg = -PI / 2;\n var xStart = x + r * cos(deg);\n var yStart = y + r * sin(deg);\n deg += dStep;\n\n // 记录边界点,用于判断inside\n ctx.moveTo(xStart, yStart);\n for (var i = 0, end = n * 2 - 1, ri; i < end; i++) {\n ri = i % 2 === 0 ? r0 : r;\n ctx.lineTo(x + ri * cos(deg), y + ri * sin(deg));\n deg += dStep;\n }\n\n ctx.closePath();\n }\n});","/**\n * 内外旋轮曲线\n * @module zrender/graphic/shape/Trochold\n */\n\nimport Path from '../Path';\n\nvar cos = Math.cos;\nvar sin = Math.sin;\n\nexport default Path.extend({\n\n type: 'trochoid',\n\n shape: {\n cx: 0,\n cy: 0,\n r: 0,\n r0: 0,\n d: 0,\n location: 'out'\n },\n\n style: {\n stroke: '#000',\n\n fill: null\n },\n\n buildPath: function (ctx, shape) {\n var x1;\n var y1;\n var x2;\n var y2;\n var R = shape.r;\n var r = shape.r0;\n var d = shape.d;\n var offsetX = shape.cx;\n var offsetY = shape.cy;\n var delta = shape.location === 'out' ? 1 : -1;\n\n if (shape.location && R <= r) {\n return;\n }\n\n var num = 0;\n var i = 1;\n var theta;\n\n x1 = (R + delta * r) * cos(0)\n - delta * d * cos(0) + offsetX;\n y1 = (R + delta * r) * sin(0)\n - d * sin(0) + offsetY;\n\n ctx.moveTo(x1, y1);\n\n // 计算结束时的i\n do {\n num++;\n }\n while ((r * num) % (R + delta * r) !== 0);\n\n do {\n theta = Math.PI / 180 * i;\n x2 = (R + delta * r) * cos(theta)\n - delta * d * cos((R / r + delta) * theta)\n + offsetX;\n y2 = (R + delta * r) * sin(theta)\n - d * sin((R / r + delta) * theta)\n + offsetY;\n ctx.lineTo(x2, y2);\n i++;\n }\n while (i <= (r * num) / (R + delta * r) * 360);\n\n }\n});","import * as zrUtil from '../core/util';\nimport Gradient from './Gradient';\n\n/**\n * x, y, r are all percent from 0 to 1\n * @param {number} [x=0.5]\n * @param {number} [y=0.5]\n * @param {number} [r=0.5]\n * @param {Array.} [colorStops]\n * @param {boolean} [globalCoord=false]\n */\nvar RadialGradient = function (x, y, r, colorStops, globalCoord) {\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {type: 'radial', colorStops: ...}`, where\n // this constructor will not be called.\n\n this.x = x == null ? 0.5 : x;\n\n this.y = y == null ? 0.5 : y;\n\n this.r = r == null ? 0.5 : r;\n\n // Can be cloned\n this.type = 'radial';\n\n // If use global coord\n this.global = globalCoord || false;\n\n Gradient.call(this, colorStops);\n};\n\nRadialGradient.prototype = {\n\n constructor: RadialGradient\n};\n\nzrUtil.inherits(RadialGradient, Gradient);\n\nexport default RadialGradient;","/**\n * Do not mount those modules on 'src/zrender' for better tree shaking.\n */\n\nimport * as zrUtil from './core/util';\nimport * as matrix from './core/matrix';\nimport * as vector from './core/vector';\nimport * as colorTool from './tool/color';\nimport * as pathTool from './tool/path';\nimport {parseSVG} from './tool/parseSVG';\n\n\nexport {default as Group} from './container/Group';\nexport {default as Path} from './graphic/Path';\nexport {default as Image} from './graphic/Image';\nexport {default as CompoundPath} from './graphic/CompoundPath';\nexport {default as Text} from './graphic/Text';\nexport {default as IncrementalDisplayable} from './graphic/IncrementalDisplayable';\n\nexport {default as Arc} from './graphic/shape/Arc';\nexport {default as BezierCurve} from './graphic/shape/BezierCurve';\nexport {default as Circle} from './graphic/shape/Circle';\nexport {default as Droplet} from './graphic/shape/Droplet';\nexport {default as Ellipse} from './graphic/shape/Ellipse';\nexport {default as Heart} from './graphic/shape/Heart';\nexport {default as Isogon} from './graphic/shape/Isogon';\nexport {default as Line} from './graphic/shape/Line';\nexport {default as Polygon} from './graphic/shape/Polygon';\nexport {default as Polyline} from './graphic/shape/Polyline';\nexport {default as Rect} from './graphic/shape/Rect';\nexport {default as Ring} from './graphic/shape/Ring';\nexport {default as Rose} from './graphic/shape/Rose';\nexport {default as Sector} from './graphic/shape/Sector';\nexport {default as Star} from './graphic/shape/Star';\nexport {default as Trochoid} from './graphic/shape/Trochoid';\n\nexport {default as LinearGradient} from './graphic/LinearGradient';\nexport {default as RadialGradient} from './graphic/RadialGradient';\nexport {default as Pattern} from './graphic/Pattern';\nexport {default as BoundingRect} from './core/BoundingRect';\n\nexport {matrix};\nexport {vector};\nexport {colorTool as color};\nexport {pathTool as path};\nexport {zrUtil as util};\n\nexport {parseSVG};\n","\nvar svgURI = 'http://www.w3.org/2000/svg';\n\nexport function createElement(name) {\n return document.createElementNS(svgURI, name);\n}","// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\n\nimport {createElement} from './core';\nimport PathProxy from '../core/PathProxy';\nimport BoundingRect from '../core/BoundingRect';\nimport * as matrix from '../core/matrix';\nimport * as textContain from '../contain/text';\nimport * as textHelper from '../graphic/helper/text';\nimport Text from '../graphic/Text';\n\nvar CMD = PathProxy.CMD;\nvar arrayJoin = Array.prototype.join;\n\nvar NONE = 'none';\nvar mathRound = Math.round;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\nvar PI2 = Math.PI * 2;\nvar degree = 180 / PI;\n\nvar EPSILON = 1e-4;\n\nfunction round4(val) {\n return mathRound(val * 1e4) / 1e4;\n}\n\nfunction isAroundZero(val) {\n return val < EPSILON && val > -EPSILON;\n}\n\nfunction pathHasFill(style, isText) {\n var fill = isText ? style.textFill : style.fill;\n return fill != null && fill !== NONE;\n}\n\nfunction pathHasStroke(style, isText) {\n var stroke = isText ? style.textStroke : style.stroke;\n return stroke != null && stroke !== NONE;\n}\n\nfunction setTransform(svgEl, m) {\n if (m) {\n attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')');\n }\n}\n\nfunction attr(el, key, val) {\n if (!val || val.type !== 'linear' && val.type !== 'radial') {\n // Don't set attribute for gradient, since it need new dom nodes\n el.setAttribute(key, val);\n }\n}\n\nfunction attrXLink(el, key, val) {\n el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\n\nfunction bindStyle(svgEl, style, isText, el) {\n if (pathHasFill(style, isText)) {\n var fill = isText ? style.textFill : style.fill;\n fill = fill === 'transparent' ? NONE : fill;\n attr(svgEl, 'fill', fill);\n attr(svgEl, 'fill-opacity', style.fillOpacity != null ? style.fillOpacity * style.opacity : style.opacity);\n }\n else {\n attr(svgEl, 'fill', NONE);\n }\n\n if (pathHasStroke(style, isText)) {\n var stroke = isText ? style.textStroke : style.stroke;\n stroke = stroke === 'transparent' ? NONE : stroke;\n attr(svgEl, 'stroke', stroke);\n var strokeWidth = isText\n ? style.textStrokeWidth\n : style.lineWidth;\n var strokeScale = !isText && style.strokeNoScale\n ? el.getLineScale()\n : 1;\n attr(svgEl, 'stroke-width', strokeWidth / strokeScale);\n // stroke then fill for text; fill then stroke for others\n attr(svgEl, 'paint-order', isText ? 'stroke' : 'fill');\n attr(svgEl, 'stroke-opacity', style.strokeOpacity != null ? style.strokeOpacity : style.opacity);\n var lineDash = style.lineDash;\n if (lineDash) {\n attr(svgEl, 'stroke-dasharray', style.lineDash.join(','));\n attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0));\n }\n else {\n attr(svgEl, 'stroke-dasharray', '');\n }\n\n // PENDING\n style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);\n style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);\n style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit);\n }\n else {\n attr(svgEl, 'stroke', NONE);\n }\n}\n\n/***************************************************\n * PATH\n **************************************************/\nfunction pathDataToString(path) {\n var str = [];\n var data = path.data;\n var dataLength = path.len();\n for (var i = 0; i < dataLength;) {\n var cmd = data[i++];\n var cmdStr = '';\n var nData = 0;\n switch (cmd) {\n case CMD.M:\n cmdStr = 'M';\n nData = 2;\n break;\n case CMD.L:\n cmdStr = 'L';\n nData = 2;\n break;\n case CMD.Q:\n cmdStr = 'Q';\n nData = 4;\n break;\n case CMD.C:\n cmdStr = 'C';\n nData = 6;\n break;\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++];\n var psi = data[i++];\n var clockwise = data[i++];\n\n var dThetaPositive = Math.abs(dTheta);\n var isCircle = isAroundZero(dThetaPositive - PI2)\n || (clockwise ? dTheta >= PI2 : -dTheta >= PI2);\n\n // Mapping to 0~2PI\n var unifiedTheta = dTheta > 0 ? dTheta % PI2 : (dTheta % PI2 + PI2);\n\n var large = false;\n if (isCircle) {\n large = true;\n }\n else if (isAroundZero(dThetaPositive)) {\n large = false;\n }\n else {\n large = (unifiedTheta >= PI) === !!clockwise;\n }\n\n var x0 = round4(cx + rx * mathCos(theta));\n var y0 = round4(cy + ry * mathSin(theta));\n\n // It will not draw if start point and end point are exactly the same\n // We need to shift the end point with a small value\n // FIXME A better way to draw circle ?\n if (isCircle) {\n if (clockwise) {\n dTheta = PI2 - 1e-4;\n }\n else {\n dTheta = -PI2 + 1e-4;\n }\n\n large = true;\n\n if (i === 9) {\n // Move to (x0, y0) only when CMD.A comes at the\n // first position of a shape.\n // For instance, when drawing a ring, CMD.A comes\n // after CMD.M, so it's unnecessary to move to\n // (x0, y0).\n str.push('M', x0, y0);\n }\n }\n\n var x = round4(cx + rx * mathCos(theta + dTheta));\n var y = round4(cy + ry * mathSin(theta + dTheta));\n\n // FIXME Ellipse\n str.push('A', round4(rx), round4(ry),\n mathRound(psi * degree), +large, +clockwise, x, y);\n break;\n case CMD.Z:\n cmdStr = 'Z';\n break;\n case CMD.R:\n var x = round4(data[i++]);\n var y = round4(data[i++]);\n var w = round4(data[i++]);\n var h = round4(data[i++]);\n str.push(\n 'M', x, y,\n 'L', x + w, y,\n 'L', x + w, y + h,\n 'L', x, y + h,\n 'L', x, y\n );\n break;\n }\n cmdStr && str.push(cmdStr);\n for (var j = 0; j < nData; j++) {\n // PENDING With scale\n str.push(round4(data[i++]));\n }\n }\n return str.join(' ');\n}\n\nvar svgPath = {};\nexport {svgPath as path};\n\nsvgPath.brush = function (el) {\n var style = el.style;\n\n var svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('path');\n el.__svgEl = svgEl;\n }\n\n if (!el.path) {\n el.createPathProxy();\n }\n var path = el.path;\n\n if (el.__dirtyPath) {\n path.beginPath();\n path.subPixelOptimize = false;\n el.buildPath(path, el.shape);\n el.__dirtyPath = false;\n\n var pathStr = pathDataToString(path);\n if (pathStr.indexOf('NaN') < 0) {\n // Ignore illegal path, which may happen such in out-of-range\n // data in Calendar series.\n attr(svgEl, 'd', pathStr);\n }\n }\n\n bindStyle(svgEl, style, false, el);\n setTransform(svgEl, el.transform);\n\n if (style.text != null) {\n svgTextDrawRectText(el, el.getBoundingRect());\n }\n else {\n removeOldTextNode(el);\n }\n};\n\n/***************************************************\n * IMAGE\n **************************************************/\nvar svgImage = {};\nexport {svgImage as image};\n\nsvgImage.brush = function (el) {\n var style = el.style;\n var image = style.image;\n\n if (image instanceof HTMLImageElement) {\n var src = image.src;\n image = src;\n }\n if (!image) {\n return;\n }\n\n var x = style.x || 0;\n var y = style.y || 0;\n\n var dw = style.width;\n var dh = style.height;\n\n var svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('image');\n el.__svgEl = svgEl;\n }\n\n if (image !== el.__imageSrc) {\n attrXLink(svgEl, 'href', image);\n // Caching image src\n el.__imageSrc = image;\n }\n\n attr(svgEl, 'width', dw);\n attr(svgEl, 'height', dh);\n\n attr(svgEl, 'x', x);\n attr(svgEl, 'y', y);\n\n setTransform(svgEl, el.transform);\n\n if (style.text != null) {\n svgTextDrawRectText(el, el.getBoundingRect());\n }\n else {\n removeOldTextNode(el);\n }\n};\n\n/***************************************************\n * TEXT\n **************************************************/\nvar svgText = {};\nexport {svgText as text};\nvar _tmpTextHostRect = new BoundingRect();\nvar _tmpTextBoxPos = {};\nvar _tmpTextTransform = [];\nvar TEXT_ALIGN_TO_ANCHRO = {\n left: 'start',\n right: 'end',\n center: 'middle',\n middle: 'middle'\n};\n\n/**\n * @param {module:zrender/Element} el\n * @param {Object|boolean} [hostRect] {x, y, width, height}\n * If set false, rect text is not used.\n */\nvar svgTextDrawRectText = function (el, hostRect) {\n var style = el.style;\n var elTransform = el.transform;\n var needTransformTextByHostEl = el instanceof Text || style.transformText;\n\n el.__dirty && textHelper.normalizeTextStyle(style, true);\n\n var text = style.text;\n // Convert to string\n text != null && (text += '');\n if (!textHelper.needDrawText(text, style)) {\n return;\n }\n // render empty text for svg if no text but need draw text.\n text == null && (text = '');\n\n // Follow the setting in the canvas renderer, if not transform the\n // text, transform the hostRect, by which the text is located.\n if (!needTransformTextByHostEl && elTransform) {\n _tmpTextHostRect.copy(hostRect);\n _tmpTextHostRect.applyTransform(elTransform);\n hostRect = _tmpTextHostRect;\n }\n\n var textSvgEl = el.__textSvgEl;\n if (!textSvgEl) {\n textSvgEl = createElement('text');\n el.__textSvgEl = textSvgEl;\n }\n\n // style.font has been normalized by `normalizeTextStyle`.\n var textSvgElStyle = textSvgEl.style;\n var font = style.font || textContain.DEFAULT_FONT;\n var computedFont = textSvgEl.__computedFont;\n if (font !== textSvgEl.__styleFont) {\n textSvgElStyle.font = textSvgEl.__styleFont = font;\n // The computedFont might not be the orginal font if it is illegal font.\n computedFont = textSvgEl.__computedFont = textSvgElStyle.font;\n }\n\n var textPadding = style.textPadding;\n var textLineHeight = style.textLineHeight;\n\n var contentBlock = el.__textCotentBlock;\n if (!contentBlock || el.__dirtyText) {\n contentBlock = el.__textCotentBlock = textContain.parsePlainText(\n text, computedFont, textPadding, textLineHeight, style.truncate\n );\n }\n\n var outerHeight = contentBlock.outerHeight;\n var lineHeight = contentBlock.lineHeight;\n\n textHelper.getBoxPosition(_tmpTextBoxPos, el, style, hostRect);\n var baseX = _tmpTextBoxPos.baseX;\n var baseY = _tmpTextBoxPos.baseY;\n var textAlign = _tmpTextBoxPos.textAlign || 'left';\n var textVerticalAlign = _tmpTextBoxPos.textVerticalAlign;\n\n setTextTransform(\n textSvgEl, needTransformTextByHostEl, elTransform, style, hostRect, baseX, baseY\n );\n\n var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n var textX = baseX;\n var textY = boxY;\n\n // TODO needDrawBg\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n textY += textPadding[0];\n }\n\n // `textBaseline` is set as 'middle'.\n textY += lineHeight / 2;\n\n bindStyle(textSvgEl, style, true, el);\n\n // FIXME\n // Add a in svg, where nodeName is 'style',\n // CSS classes is defined globally wherever the style tags are declared.\n\n if (nodeName === 'defs') {\n // define flag\n this._isDefine = true;\n }\n else if (nodeName === 'text') {\n this._isText = true;\n }\n\n let el;\n if (this._isDefine) {\n const parser = defineParsers[nodeName];\n if (parser) {\n const def = parser.call(this, xmlNode);\n const id = xmlNode.getAttribute('id');\n if (id) {\n this._defs[id] = def;\n }\n }\n }\n else {\n const parser = nodeParsers[nodeName];\n if (parser) {\n el = parser.call(this, xmlNode, parentGroup);\n parentGroup.add(el);\n }\n }\n\n if (el) { // No parsers available\n let child = xmlNode.firstChild as SVGElement;\n while (child) {\n if (child.nodeType === 1) {\n // el should be a group if it has child.\n this._parseNode(child, el as Group);\n }\n // Is text\n if (child.nodeType === 3 && this._isText) {\n this._parseText(child, el as Group);\n }\n child = child.nextSibling as SVGElement;\n }\n }\n // Quit define\n if (nodeName === 'defs') {\n this._isDefine = false;\n }\n else if (nodeName === 'text') {\n this._isText = false;\n }\n }\n\n _parseText(xmlNode: SVGElement, parentGroup: Group) {\n if (xmlNode.nodeType === 1) {\n const dx = xmlNode.getAttribute('dx') || 0;\n const dy = xmlNode.getAttribute('dy') || 0;\n this._textX += parseFloat(dx as string);\n this._textY += parseFloat(dy as string);\n }\n\n const text = new TSpan({\n style: {\n text: xmlNode.textContent\n },\n x: this._textX || 0,\n y: this._textY || 0\n });\n\n inheritStyle(parentGroup, text);\n parseAttributes(xmlNode, text, this._defs);\n\n const textStyle = text.style as TextStyleOptionExtended;\n const fontSize = textStyle.fontSize;\n if (fontSize && fontSize < 9) {\n // PENDING\n textStyle.fontSize = 9;\n text.scaleX *= fontSize / 9;\n text.scaleY *= fontSize / 9;\n }\n\n const font = (textStyle.fontSize || textStyle.fontFamily) && [\n textStyle.fontStyle,\n textStyle.fontWeight,\n (textStyle.fontSize || 12) + 'px',\n // If font properties are defined, `fontFamily` should not be ignored.\n textStyle.fontFamily || 'sans-serif'\n ].join(' ');\n // Make font\n textStyle.font = font;\n\n const rect = text.getBoundingRect();\n this._textX += rect.width;\n\n parentGroup.add(text);\n\n return text;\n }\n\n static internalField = (function () {\n\n nodeParsers = {\n 'g': function (xmlNode: SVGElement, parentGroup: Group) {\n const g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n\n return g;\n },\n 'rect': function (xmlNode: SVGElement, parentGroup: Group) {\n const rect = new Rect();\n inheritStyle(parentGroup, rect);\n parseAttributes(xmlNode, rect, this._defs);\n\n rect.setShape({\n x: parseFloat(xmlNode.getAttribute('x') || '0'),\n y: parseFloat(xmlNode.getAttribute('y') || '0'),\n width: parseFloat(xmlNode.getAttribute('width') || '0'),\n height: parseFloat(xmlNode.getAttribute('height') || '0')\n });\n\n return rect;\n },\n 'circle': function (xmlNode: SVGElement, parentGroup: Group) {\n const circle = new Circle();\n inheritStyle(parentGroup, circle);\n parseAttributes(xmlNode, circle, this._defs);\n\n circle.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n r: parseFloat(xmlNode.getAttribute('r') || '0')\n });\n\n return circle;\n },\n 'line': function (xmlNode: SVGElement, parentGroup: Group) {\n const line = new Line();\n inheritStyle(parentGroup, line);\n parseAttributes(xmlNode, line, this._defs);\n\n line.setShape({\n x1: parseFloat(xmlNode.getAttribute('x1') || '0'),\n y1: parseFloat(xmlNode.getAttribute('y1') || '0'),\n x2: parseFloat(xmlNode.getAttribute('x2') || '0'),\n y2: parseFloat(xmlNode.getAttribute('y2') || '0')\n });\n\n return line;\n },\n 'ellipse': function (xmlNode: SVGElement, parentGroup: Group) {\n const ellipse = new Ellipse();\n inheritStyle(parentGroup, ellipse);\n parseAttributes(xmlNode, ellipse, this._defs);\n\n ellipse.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n rx: parseFloat(xmlNode.getAttribute('rx') || '0'),\n ry: parseFloat(xmlNode.getAttribute('ry') || '0')\n });\n return ellipse;\n },\n 'polygon': function (xmlNode: SVGElement, parentGroup: Group) {\n const pointsStr = xmlNode.getAttribute('points');\n let pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n const polygon = new Polygon({\n shape: {\n points: pointsArr || []\n }\n });\n\n inheritStyle(parentGroup, polygon);\n parseAttributes(xmlNode, polygon, this._defs);\n\n return polygon;\n },\n 'polyline': function (xmlNode: SVGElement, parentGroup: Group) {\n const path = new Path();\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defs);\n\n const pointsStr = xmlNode.getAttribute('points');\n let pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n const polyline = new Polyline({\n shape: {\n points: pointsArr || []\n }\n });\n\n return polyline;\n },\n 'image': function (xmlNode: SVGElement, parentGroup: Group) {\n const img = new ZRImage();\n inheritStyle(parentGroup, img);\n parseAttributes(xmlNode, img, this._defs);\n\n img.setStyle({\n image: xmlNode.getAttribute('xlink:href'),\n x: +xmlNode.getAttribute('x'),\n y: +xmlNode.getAttribute('y'),\n width: +xmlNode.getAttribute('width'),\n height: +xmlNode.getAttribute('height')\n });\n\n return img;\n },\n 'text': function (xmlNode: SVGElement, parentGroup: Group) {\n const x = xmlNode.getAttribute('x') || '0';\n const y = xmlNode.getAttribute('y') || '0';\n const dx = xmlNode.getAttribute('dx') || '0';\n const dy = xmlNode.getAttribute('dy') || '0';\n\n this._textX = parseFloat(x) + parseFloat(dx);\n this._textY = parseFloat(y) + parseFloat(dy);\n\n const g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n\n return g;\n },\n 'tspan': function (xmlNode: SVGElement, parentGroup: Group) {\n const x = xmlNode.getAttribute('x');\n const y = xmlNode.getAttribute('y');\n if (x != null) {\n // new offset x\n this._textX = parseFloat(x);\n }\n if (y != null) {\n // new offset y\n this._textY = parseFloat(y);\n }\n const dx = xmlNode.getAttribute('dx') || 0;\n const dy = xmlNode.getAttribute('dy') || 0;\n\n const g = new Group();\n\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n\n this._textX += dx as number;\n this._textY += dy as number;\n\n return g;\n },\n 'path': function (xmlNode: SVGElement, parentGroup: Group) {\n // TODO svg fill rule\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n // path.style.globalCompositeOperation = 'xor';\n const d = xmlNode.getAttribute('d') || '';\n\n // Performance sensitive.\n\n const path = createFromString(d);\n\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defs);\n\n return path;\n }\n };\n\n\n })();\n}\n\nconst defineParsers: Dictionary<(xmlNode: SVGElement) => any> = {\n\n 'lineargradient': function (xmlNode: SVGElement) {\n const x1 = parseInt(xmlNode.getAttribute('x1') || '0', 10);\n const y1 = parseInt(xmlNode.getAttribute('y1') || '0', 10);\n const x2 = parseInt(xmlNode.getAttribute('x2') || '10', 10);\n const y2 = parseInt(xmlNode.getAttribute('y2') || '0', 10);\n\n const gradient = new LinearGradient(x1, y1, x2, y2);\n\n _parseGradientColorStops(xmlNode, gradient);\n\n return gradient as LinearGradientObject;\n }\n\n // 'radialgradient': function (xmlNode) {\n\n // }\n};\n\nfunction _parseGradientColorStops(xmlNode: SVGElement, gradient: GradientObject) {\n\n let stop = xmlNode.firstChild as SVGStopElement;\n\n while (stop) {\n if (stop.nodeType === 1) {\n const offsetStr = stop.getAttribute('offset');\n let offset: number;\n if (offsetStr.indexOf('%') > 0) { // percentage\n offset = parseInt(offsetStr, 10) / 100;\n }\n else if (offsetStr) { // number from 0 to 1\n offset = parseFloat(offsetStr);\n }\n else {\n offset = 0;\n }\n\n const stopColor = stop.getAttribute('stop-color') || '#000000';\n\n gradient.colorStops.push({\n offset: offset,\n color: stopColor\n });\n }\n stop = stop.nextSibling as SVGStopElement;\n }\n}\n\nfunction inheritStyle(parent: Element, child: Element) {\n if (parent && (parent as ElementExtended).__inheritedStyle) {\n if (!(child as ElementExtended).__inheritedStyle) {\n (child as ElementExtended).__inheritedStyle = {};\n }\n defaults((child as ElementExtended).__inheritedStyle, (parent as ElementExtended).__inheritedStyle);\n }\n}\n\nfunction parsePoints(pointsString: string) {\n const list = trim(pointsString).split(DILIMITER_REG);\n const points = [];\n\n for (let i = 0; i < list.length; i += 2) {\n const x = parseFloat(list[i]);\n const y = parseFloat(list[i + 1]);\n points.push([x, y]);\n }\n return points;\n}\n\nconst attributesMap = {\n 'fill': 'fill',\n 'stroke': 'stroke',\n 'stroke-width': 'lineWidth',\n 'opacity': 'opacity',\n 'fill-opacity': 'fillOpacity',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-dasharray': 'lineDash',\n 'stroke-dashoffset': 'lineDashOffset',\n 'stroke-linecap': 'lineCap',\n 'stroke-linejoin': 'lineJoin',\n 'stroke-miterlimit': 'miterLimit',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n\n 'text-align': 'textAlign',\n 'alignment-baseline': 'textBaseline'\n};\n\nfunction parseAttributes(\n xmlNode: SVGElement,\n el: Element,\n defs: DefsMap,\n onlyInlineStyle?: boolean\n) {\n const disp = el as DisplayableExtended;\n const zrStyle = disp.__inheritedStyle || {};\n\n // TODO Shadow\n if (xmlNode.nodeType === 1) {\n parseTransformAttribute(xmlNode, el);\n\n extend(zrStyle, parseStyleAttribute(xmlNode));\n\n if (!onlyInlineStyle) {\n for (let svgAttrName in attributesMap) {\n if (attributesMap.hasOwnProperty(svgAttrName)) {\n const attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n zrStyle[attributesMap[svgAttrName as keyof typeof attributesMap]] = attrValue;\n }\n }\n }\n }\n }\n\n disp.style = disp.style || {};\n\n zrStyle.fill != null && (disp.style.fill = getPaint(zrStyle.fill, defs));\n zrStyle.stroke != null && (disp.style.stroke = getPaint(zrStyle.stroke, defs));\n\n each([\n 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n ], function (propName) {\n zrStyle[propName] != null && (disp.style[propName] = parseFloat(zrStyle[propName]));\n });\n\n if (!zrStyle.textBaseline || zrStyle.textBaseline === 'auto') {\n zrStyle.textBaseline = 'alphabetic';\n }\n if (zrStyle.textBaseline === 'alphabetic') {\n zrStyle.textBaseline = 'bottom';\n }\n if (zrStyle.textAlign === 'start') {\n zrStyle.textAlign = 'left';\n }\n if (zrStyle.textAlign === 'end') {\n zrStyle.textAlign = 'right';\n }\n\n each(['lineDashOffset', 'lineCap', 'lineJoin',\n 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign', 'textBaseline'\n ], function (propName) {\n zrStyle[propName] != null && (disp.style[propName] = zrStyle[propName]);\n });\n\n if (zrStyle.lineDash) {\n disp.style.lineDash = map(trim(zrStyle.lineDash).split(DILIMITER_REG), function (str) {\n return parseFloat(str);\n });\n }\n\n disp.__inheritedStyle = zrStyle;\n}\n\n\nconst urlRegex = /url\\(\\s*#(.*?)\\)/;\nfunction getPaint(str: string, defs: DefsMap) {\n // if (str === 'none') {\n // return;\n // }\n const urlMatch = defs && str && str.match(urlRegex);\n if (urlMatch) {\n const url = trim(urlMatch[1]);\n const def = defs[url];\n return def;\n }\n return str;\n}\n\nconst transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.e,]*)\\)/g;\n\nfunction parseTransformAttribute(xmlNode: SVGElement, node: Element) {\n let transform = xmlNode.getAttribute('transform');\n if (transform) {\n transform = transform.replace(/,/g, ' ');\n const transformOps: string[] = [];\n let m = null;\n transform.replace(transformRegex, function (str: string, type: string, value: string) {\n transformOps.push(type, value);\n return '';\n });\n for (let i = transformOps.length - 1; i > 0; i -= 2) {\n let value = transformOps[i];\n let type = transformOps[i - 1];\n let valueArr: string[];\n m = m || matrix.create();\n switch (type) {\n case 'translate':\n valueArr = trim(value).split(DILIMITER_REG);\n matrix.translate(m, m, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || '0')]);\n break;\n case 'scale':\n valueArr = trim(value).split(DILIMITER_REG);\n matrix.scale(m, m, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || valueArr[0])]);\n break;\n case 'rotate':\n valueArr = trim(value).split(DILIMITER_REG);\n matrix.rotate(m, m, parseFloat(valueArr[0]));\n break;\n case 'skew':\n valueArr = trim(value).split(DILIMITER_REG);\n console.warn('Skew transform is not supported yet');\n break;\n case 'matrix':\n valueArr = trim(value).split(DILIMITER_REG);\n m[0] = parseFloat(valueArr[0]);\n m[1] = parseFloat(valueArr[1]);\n m[2] = parseFloat(valueArr[2]);\n m[3] = parseFloat(valueArr[3]);\n m[4] = parseFloat(valueArr[4]);\n m[5] = parseFloat(valueArr[5]);\n break;\n }\n }\n node.setLocalTransform(m);\n }\n}\n\n// Value may contain space.\nconst styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseStyleAttribute(xmlNode: SVGElement) {\n const style = xmlNode.getAttribute('style');\n const result: Dictionary = {};\n\n if (!style) {\n return result;\n }\n\n const styleList: Dictionary = {};\n styleRegex.lastIndex = 0;\n let styleRegResult;\n while ((styleRegResult = styleRegex.exec(style)) != null) {\n styleList[styleRegResult[1]] = styleRegResult[2];\n }\n\n for (const svgAttrName in attributesMap) {\n if (attributesMap.hasOwnProperty(svgAttrName) && styleList[svgAttrName] != null) {\n result[attributesMap[svgAttrName as keyof typeof attributesMap]] = styleList[svgAttrName];\n }\n }\n\n return result;\n}\n\nexport function makeViewBoxTransform(viewBoxRect: RectLike, width: number, height: number): {\n scale: number\n x: number\n y: number\n} {\n const scaleX = width / viewBoxRect.width;\n const scaleY = height / viewBoxRect.height;\n const scale = Math.min(scaleX, scaleY);\n // preserveAspectRatio 'xMidYMid'\n\n return {\n scale,\n x: -(viewBoxRect.x + viewBoxRect.width / 2) * scale + width / 2,\n y: -(viewBoxRect.y + viewBoxRect.height / 2) * scale + height / 2\n };\n}\n\nexport function parseSVG(xml: string | Document | SVGElement, opt: SVGParserOption): SVGParserResult {\n const parser = new SVGParser();\n return parser.parse(xml, opt);\n}","// CompoundPath to improve performance\n\nimport Path from './Path';\n\ninterface CompoundPathShape {\n paths: Path[]\n}\n\nexport default class CompoundPath extends Path {\n\n type = 'compound'\n\n shape: CompoundPathShape\n\n private _updatePathDirty() {\n const paths = this.shape.paths;\n let dirtyPath = this.shapeChanged();\n for (let i = 0; i < paths.length; i++) {\n // Mark as dirty if any subpath is dirty\n dirtyPath = dirtyPath || paths[i].shapeChanged();\n }\n if (dirtyPath) {\n this.dirtyShape();\n }\n }\n\n beforeBrush() {\n this._updatePathDirty();\n const paths = this.shape.paths || [];\n const scale = this.getGlobalScale();\n // Update path scale\n for (let i = 0; i < paths.length; i++) {\n if (!paths[i].path) {\n paths[i].createPathProxy();\n }\n paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n }\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: CompoundPathShape) {\n const paths = shape.paths || [];\n for (let i = 0; i < paths.length; i++) {\n paths[i].buildPath(ctx, paths[i].shape, true);\n }\n }\n\n afterBrush() {\n const paths = this.shape.paths || [];\n for (let i = 0; i < paths.length; i++) {\n paths[i].pathUpdated();\n }\n }\n\n getBoundingRect() {\n this._updatePathDirty.call(this);\n return Path.prototype.getBoundingRect.call(this);\n }\n}","/**\n * Displayable for incremental rendering. It will be rendered in a separate layer\n * IncrementalDisplay have two main methods. `clearDisplayables` and `addDisplayables`\n * addDisplayables will render the added displayables incremetally.\n *\n * It use a notClear flag to tell the painter don't clear the layer if it's the first element.\n *\n * It's not available for SVG rendering.\n */\nimport Displayble from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray } from '../core/matrix';\nimport { Group } from '../export';\n\nconst m: MatrixArray = [];\n// TODO Style override ?\n\nexport default class IncrementalDisplayble extends Displayble {\n\n notClear: boolean = true\n\n incremental = true\n\n private _displayables: Displayble[] = []\n private _temporaryDisplayables: Displayble[] = []\n\n private _cursor = 0\n\n traverse(\n cb: (this: T, el: this) => void,\n context: T\n ) {\n cb.call(context, this);\n }\n\n useStyle() {\n // Use an empty style\n // PENDING\n this.style = {};\n }\n // getCurrentCursor / updateCursorAfterBrush\n // is used in graphic.ts. It's not provided for developers\n getCursor() {\n return this._cursor;\n }\n // Update cursor after brush.\n innerAfterBrush() {\n this._cursor = this._displayables.length;\n }\n\n clearDisplaybles() {\n this._displayables = [];\n this._temporaryDisplayables = [];\n this._cursor = 0;\n this.markRedraw();\n\n this.notClear = false;\n }\n\n clearTemporalDisplayables() {\n this._temporaryDisplayables = [];\n }\n\n addDisplayable(displayable: Displayble, notPersistent?: boolean) {\n if (notPersistent) {\n this._temporaryDisplayables.push(displayable);\n }\n else {\n this._displayables.push(displayable);\n }\n this.markRedraw();\n }\n\n addDisplayables(displayables: Displayble[], notPersistent?: boolean) {\n notPersistent = notPersistent || false;\n for (let i = 0; i < displayables.length; i++) {\n this.addDisplayable(displayables[i], notPersistent);\n }\n }\n\n getDisplayables(): Displayble[] {\n return this._displayables;\n }\n\n getTemporalDisplayables(): Displayble[] {\n return this._temporaryDisplayables;\n }\n\n eachPendingDisplayable(cb: (displayable: Displayble) => void) {\n for (let i = this._cursor; i < this._displayables.length; i++) {\n cb && cb(this._displayables[i]);\n }\n for (let i = 0; i < this._temporaryDisplayables.length; i++) {\n cb && cb(this._temporaryDisplayables[i]);\n }\n }\n\n update() {\n this.updateTransform();\n for (let i = this._cursor; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n // PENDING\n displayable.parent = this as unknown as Group;\n displayable.update();\n displayable.parent = null;\n }\n for (let i = 0; i < this._temporaryDisplayables.length; i++) {\n const displayable = this._temporaryDisplayables[i];\n // PENDING\n displayable.parent = this as unknown as Group;\n displayable.update();\n displayable.parent = null;\n }\n }\n\n getBoundingRect() {\n if (!this._rect) {\n const rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n for (let i = 0; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n const childRect = displayable.getBoundingRect().clone();\n if (displayable.needLocalTransform()) {\n childRect.applyTransform(displayable.getLocalTransform(m));\n }\n rect.union(childRect);\n }\n this._rect = rect;\n }\n return this._rect;\n }\n\n contain(x: number, y: number): boolean {\n const localPos = this.transformCoordToLocal(x, y);\n const rect = this.getBoundingRect();\n\n if (rect.contain(localPos[0], localPos[1])) {\n for (let i = 0; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n if (displayable.contain(x, y)) {\n return true;\n }\n }\n }\n return false;\n }\n\n}","\nimport LRU from '../../core/LRU';\nimport { ImageLike } from '../../core/types';\n\nconst globalImageCache = new LRU(50);\n\ntype PendingWrap = {\n hostEl: {dirty: () => void}\n cb: (image: ImageLike, payload: any) => void\n cbPayload: any\n}\n\ntype CachedImageObj = {\n image: ImageLike\n pending: PendingWrap[]\n}\n\nexport function findExistImage(newImageOrSrc: string | ImageLike): ImageLike {\n if (typeof newImageOrSrc === 'string') {\n const cachedImgObj = globalImageCache.get(newImageOrSrc);\n return cachedImgObj && cachedImgObj.image;\n }\n else {\n return newImageOrSrc;\n }\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 newImageOrSrc\n * @param image Existent image.\n * @param hostEl For calling `dirty`.\n * @param cb params: (image, cbPayload)\n * @param cbPayload Payload on cb calling.\n * @return image\n */\nexport function createOrUpdateImage(\n newImageOrSrc: string | ImageLike,\n image: ImageLike,\n hostEl: { dirty: () => void },\n cb?: (image: ImageLike, payload: T) => void,\n cbPayload?: T\n) {\n if (!newImageOrSrc) {\n return image;\n }\n else if (typeof newImageOrSrc === 'string') {\n\n // Image should not be loaded repeatly.\n if ((image && (image as any).__zrImageSrc === newImageOrSrc) || !hostEl) {\n return image;\n }\n\n // Only when there is no existent image or existent image src\n // is different, this method is responsible for load.\n const cachedImgObj = globalImageCache.get(newImageOrSrc);\n\n const pendingWrap = {hostEl: hostEl, cb: cb, cbPayload: cbPayload};\n\n if (cachedImgObj) {\n image = cachedImgObj.image;\n !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n }\n else {\n image = new Image();\n image.onload = image.onerror = imageOnLoad;\n\n globalImageCache.put(\n newImageOrSrc,\n (image as any).__cachedImgObj = {\n image: image,\n pending: [pendingWrap]\n }\n );\n\n image.src = (image as any).__zrImageSrc = newImageOrSrc;\n }\n\n return image;\n }\n // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas\n else {\n return newImageOrSrc;\n }\n}\n\nfunction imageOnLoad(this: any) {\n const cachedImgObj = this.__cachedImgObj;\n this.onload = this.onerror = this.__cachedImgObj = null;\n\n for (let i = 0; i < cachedImgObj.pending.length; i++) {\n const pendingWrap = cachedImgObj.pending[i];\n const cb = pendingWrap.cb;\n cb && cb(this, pendingWrap.cbPayload);\n pendingWrap.hostEl.dirty();\n }\n cachedImgObj.pending.length = 0;\n}\n\nexport function isImageReady(image: ImageLike) {\n return image && image.width && image.height;\n}\n\n","import * as imageHelper from '../helper/image';\nimport {\n extend,\n retrieve2,\n retrieve3,\n reduce\n} from '../../core/util';\nimport { TextAlign, TextVerticalAlign, ImageLike, Dictionary } from '../../core/types';\nimport { TextStyleProps } from '../Text';\nimport { getLineHeight, getWidth } from '../../contain/text';\n\nconst STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\n\ninterface InnerTruncateOption {\n maxIteration?: number\n // If truncate result are less than minChar, ellipsis will not show\n // which is better for user hint in some cases\n minChar?: number\n // When all truncated, use the placeholder\n placeholder?: string\n\n maxIterations?: number\n}\n\ninterface InnerPreparedTruncateOption extends Required {\n font: string\n\n ellipsis: string\n ellipsisWidth: number\n contentWidth: number\n\n containerWidth: number\n cnCharWidth: number\n ascCharWidth: number\n}\n\n/**\n * Show ellipsis if overflow.\n */\nexport function truncateText(\n text: string,\n containerWidth: number,\n font: string,\n ellipsis: string,\n options: InnerTruncateOption\n): string {\n if (!containerWidth) {\n return '';\n }\n\n const textLines = (text + '').split('\\n');\n options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n\n // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n for (let i = 0, len = textLines.length; i < len; i++) {\n textLines[i] = truncateSingleLine(textLines[i], options as InnerPreparedTruncateOption);\n }\n\n return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(\n containerWidth: number,\n font: string,\n ellipsis: string,\n options: InnerTruncateOption\n): InnerPreparedTruncateOption {\n options = options || {};\n let preparedOpts = extend({}, options) as InnerPreparedTruncateOption;\n\n preparedOpts.font = font;\n ellipsis = retrieve2(ellipsis, '...');\n preparedOpts.maxIterations = retrieve2(options.maxIterations, 2);\n const minChar = preparedOpts.minChar = retrieve2(options.minChar, 0);\n // FIXME\n // Other languages?\n preparedOpts.cnCharWidth = getWidth('国', font);\n // FIXME\n // Consider proportional font?\n const ascCharWidth = preparedOpts.ascCharWidth = getWidth('a', font);\n preparedOpts.placeholder = retrieve2(options.placeholder, '');\n\n // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n let contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n for (let i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n\n let ellipsisWidth = getWidth(ellipsis, font);\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n\n contentWidth = containerWidth - ellipsisWidth;\n\n preparedOpts.ellipsis = ellipsis;\n preparedOpts.ellipsisWidth = ellipsisWidth;\n preparedOpts.contentWidth = contentWidth;\n preparedOpts.containerWidth = containerWidth;\n\n return preparedOpts;\n}\n\nfunction truncateSingleLine(textLine: string, options: InnerPreparedTruncateOption): string {\n const containerWidth = options.containerWidth;\n const font = options.font;\n const contentWidth = options.contentWidth;\n\n if (!containerWidth) {\n return '';\n }\n\n let lineWidth = getWidth(textLine, font);\n\n if (lineWidth <= containerWidth) {\n return textLine;\n }\n\n for (let j = 0; ; j++) {\n if (lineWidth <= contentWidth || j >= options.maxIterations) {\n textLine += options.ellipsis;\n break;\n }\n\n const subLength = j === 0\n ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)\n : lineWidth > 0\n ? Math.floor(textLine.length * contentWidth / lineWidth)\n : 0;\n\n textLine = textLine.substr(0, subLength);\n lineWidth = getWidth(textLine, font);\n }\n\n if (textLine === '') {\n textLine = options.placeholder;\n }\n\n return textLine;\n}\n\nfunction estimateLength(\n text: string, contentWidth: number, ascCharWidth: number, cnCharWidth: number\n): number {\n let width = 0;\n let i = 0;\n for (let len = text.length; i < len && width < contentWidth; i++) {\n const charCode = text.charCodeAt(i);\n width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n }\n return i;\n}\n\nexport interface PlainTextContentBlock {\n lineHeight: number\n contentHeight: number\n // Line height of actual content.\n calculatedLineHeight: number\n\n height: number\n outerHeight: number\n\n width: number\n\n lines: string[]\n}\n\nexport function parsePlainText(\n text: string,\n style?: TextStyleProps\n): PlainTextContentBlock {\n text != null && (text += '');\n\n // textPadding has been normalized\n const overflow = style.overflow;\n const padding = style.padding as number[];\n const font = style.font;\n const truncate = overflow === 'truncate';\n const calculatedLineHeight = getLineHeight(font);\n const lineHeight = retrieve2(style.lineHeight, calculatedLineHeight);\n\n const truncateLineOverflow = style.lineOverflow === 'truncate';\n\n let width = style.width;\n let lines: string[];\n\n if (width != null && overflow === 'break' || overflow === 'breakAll') {\n lines = text ? wrapText(text, style.font, width, overflow === 'breakAll', 0).lines : [];\n }\n else {\n lines = text ? text.split('\\n') : [];\n }\n\n const contentHeight = lines.length * lineHeight;\n const height = retrieve2(style.height, contentHeight);\n\n // Truncate lines.\n if (contentHeight > height && truncateLineOverflow) {\n const lineCount = Math.floor(height / lineHeight);\n\n lines = lines.slice(0, lineCount);\n\n // TODO If show ellipse for line truncate\n // if (style.ellipsis) {\n // const options = prepareTruncateOptions(width, font, style.ellipsis, {\n // minChar: style.truncateMinChar,\n // placeholder: style.placeholder\n // });\n // lines[lineCount - 1] = truncateSingleLine(lastLine, options);\n // }\n }\n\n let outerHeight = height;\n let outerWidth = width;\n if (padding) {\n outerHeight += padding[0] + padding[2];\n if (outerWidth != null) {\n outerWidth += padding[1] + padding[3];\n }\n }\n\n\n if (text && truncate && outerWidth != null) {\n const options = prepareTruncateOptions(width, font, style.ellipsis, {\n minChar: style.truncateMinChar,\n placeholder: style.placeholder\n });\n // Having every line has '...' when truncate multiple lines.\n for (let i = 0; i < lines.length; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n\n if (width == null) {\n let maxWidth = 0;\n // Calculate width\n for (let i = 0; i < lines.length; i++) {\n maxWidth = Math.max(getWidth(lines[i], font), maxWidth);\n }\n width = maxWidth;\n }\n\n return {\n lines: lines,\n height: height,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n calculatedLineHeight: calculatedLineHeight,\n contentHeight: contentHeight,\n width: width\n };\n}\n\nclass RichTextToken {\n styleName: string\n text: string\n width: number\n height: number\n\n // Width and height of actual text content.\n contentHeight: number\n contentWidth: number\n\n lineHeight: number\n font: string\n align: TextAlign\n verticalAlign: TextVerticalAlign\n\n textPadding: number[]\n percentWidth?: string\n\n isLineHolder: boolean\n}\nclass RichTextLine {\n lineHeight: number\n width: number\n tokens: RichTextToken[] = []\n\n constructor(tokens?: RichTextToken[]) {\n if (tokens) {\n this.tokens = tokens;\n }\n }\n}\nexport class RichTextContentBlock {\n // width/height of content\n width: number = 0\n height: number = 0\n // Calculated text height\n contentWidth: number = 0\n contentHeight: number = 0\n // outerWidth/outerHeight with padding\n outerWidth: number = 0\n outerHeight: number = 0\n lines: RichTextLine[] = []\n}\n\ntype WrapInfo = {\n width: number,\n accumWidth: number,\n breakAll: boolean\n}\n/**\n * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'\n * Also consider 'bbbb{a|xxx\\nzzz}xxxx\\naaaa'.\n * If styleName is undefined, it is plain text.\n */\nexport function parseRichText(text: string, style: TextStyleProps) {\n const contentBlock = new RichTextContentBlock();\n\n text != null && (text += '');\n if (!text) {\n return contentBlock;\n }\n\n const topWidth = style.width;\n const topHeight = style.height;\n const overflow = style.overflow;\n let wrapInfo: WrapInfo = (overflow === 'break' || overflow === 'breakAll') && topWidth != null\n ? {width: topWidth, accumWidth: 0, breakAll: overflow === 'breakAll'}\n : null;\n\n let lastIndex = STYLE_REG.lastIndex = 0;\n let result;\n while ((result = STYLE_REG.exec(text)) != null) {\n const matchedIndex = result.index;\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex), style, wrapInfo);\n }\n pushTokens(contentBlock, result[2], style, wrapInfo, result[1]);\n lastIndex = STYLE_REG.lastIndex;\n }\n\n if (lastIndex < text.length) {\n pushTokens(contentBlock, text.substring(lastIndex, text.length), style, wrapInfo);\n }\n\n // For `textWidth: xx%`\n let pendingList = [];\n\n let calculatedHeight = 0;\n let calculatedWidth = 0;\n\n const stlPadding = style.padding as number[];\n\n const truncate = overflow === 'truncate';\n const truncateLine = style.lineOverflow === 'truncate';\n\n let prevToken: RichTextToken;\n // Calculate layout info of tokens.\n outer: for (let i = 0; i < contentBlock.lines.length; i++) {\n const line = contentBlock.lines[i];\n let lineHeight = 0;\n let lineWidth = 0;\n\n for (let j = 0; j < line.tokens.length; j++) {\n const token = line.tokens[j];\n const tokenStyle = token.styleName && style.rich[token.styleName] || {};\n // textPadding should not inherit from style.\n const textPadding = token.textPadding = tokenStyle.padding as number[];\n const paddingH = textPadding ? textPadding[1] + textPadding[3] : 0;\n\n const font = token.font = tokenStyle.font || style.font;\n\n token.contentHeight = getLineHeight(font);\n // textHeight can be used when textVerticalAlign is specified in token.\n let tokenHeight = retrieve2(\n // textHeight should not be inherited, consider it can be specified\n // as box height of the block.\n tokenStyle.height, token.contentHeight\n );\n token.lineHeight = retrieve3(\n tokenStyle.lineHeight, style.lineHeight, tokenHeight\n );\n\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n\n token.align = tokenStyle && tokenStyle.align || style.align;\n token.verticalAlign = tokenStyle && tokenStyle.verticalAlign || 'middle';\n\n if (truncateLine && topHeight != null && calculatedHeight + token.lineHeight > topHeight) {\n // TODO Add ellipsis on the previous token.\n // prevToken.text =\n if (j > 0) {\n line.tokens = line.tokens.slice(0, j);\n contentBlock.lines = contentBlock.lines.slice(0, i + 1);\n }\n else {\n contentBlock.lines = contentBlock.lines.slice(0, i);\n }\n break outer;\n }\n\n let styleTokenWidth = tokenStyle.width;\n let tokenWidthNotSpecified = styleTokenWidth == null || styleTokenWidth === 'auto';\n\n // Percent width, can be `100%`, can be used in drawing separate\n // line when box width is needed to be auto.\n if (typeof styleTokenWidth === 'string' && styleTokenWidth.charAt(styleTokenWidth.length - 1) === '%') {\n token.percentWidth = styleTokenWidth;\n pendingList.push(token);\n\n token.contentWidth = getWidth(token.text, font);\n // Do not truncate in this case, because there is no user case\n // and it is too complicated.\n }\n else {\n if (tokenWidthNotSpecified) {\n // FIXME: If image is not loaded and textWidth is not specified, calling\n // `getBoundingRect()` will not get correct result.\n const textBackgroundColor = tokenStyle.backgroundColor;\n let bgImg = textBackgroundColor && (textBackgroundColor as { image: ImageLike }).image;\n\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n if (imageHelper.isImageReady(bgImg)) {\n // Update token width from image size.\n token.width = Math.max(token.width, bgImg.width * tokenHeight / bgImg.height);\n }\n }\n }\n\n const remainTruncWidth = truncate && topWidth != null\n ? topWidth - lineWidth : null;\n\n if (remainTruncWidth != null && remainTruncWidth < token.width) {\n if (!tokenWidthNotSpecified || remainTruncWidth < paddingH) {\n token.text = '';\n token.width = token.contentWidth = 0;\n }\n else {\n token.text = truncateText(\n token.text, remainTruncWidth - paddingH, font, style.ellipsis,\n {minChar: style.truncateMinChar}\n );\n token.width = token.contentWidth = getWidth(token.text, font);\n }\n }\n else {\n token.contentWidth = getWidth(token.text, font);\n }\n }\n\n token.width += paddingH;\n\n lineWidth += token.width;\n tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n\n prevToken = token;\n }\n\n line.width = lineWidth;\n line.lineHeight = lineHeight;\n\n calculatedHeight += lineHeight;\n calculatedWidth = Math.max(calculatedWidth, lineWidth);\n }\n\n contentBlock.outerWidth = contentBlock.width = retrieve2(topWidth, calculatedWidth);\n contentBlock.outerHeight = contentBlock.height = retrieve2(topHeight, calculatedHeight);\n contentBlock.contentHeight = calculatedHeight;\n contentBlock.contentWidth = calculatedWidth;\n\n if (stlPadding) {\n contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n }\n\n for (let i = 0; i < pendingList.length; i++) {\n const token = pendingList[i];\n const percentWidth = token.percentWidth;\n // Should not base on outerWidth, because token can not be placed out of padding.\n token.width = parseInt(percentWidth, 10) / 100 * contentBlock.width;\n }\n\n return contentBlock;\n}\n\ntype TokenStyle = TextStyleProps['rich'][string];\n\nfunction pushTokens(\n block: RichTextContentBlock,\n str: string,\n style: TextStyleProps,\n wrapInfo: WrapInfo,\n styleName?: string\n) {\n const isEmptyStr = str === '';\n const tokenStyle: TokenStyle = styleName && style.rich[styleName] || {};\n const lines = block.lines;\n const font = tokenStyle.font || style.font;\n let newLine = false;\n let strLines;\n let linesWidths;\n\n if (wrapInfo) {\n const tokenPadding = tokenStyle.padding as number[];\n let tokenPaddingH = tokenPadding ? tokenPadding[1] + tokenPadding[3] : 0;\n if (tokenStyle.width != null && tokenStyle.width !== 'auto') {\n // Wrap the whole token if tokenWidth if fixed.\n const outerWidth = parsePercent(tokenStyle.width, wrapInfo.width) + tokenPaddingH;\n if (lines.length > 0) { // Not first line\n if (outerWidth + wrapInfo.accumWidth > wrapInfo.width) {\n // TODO Support wrap text in token.\n strLines = str.split('\\n');\n newLine = true;\n }\n }\n\n wrapInfo.accumWidth = outerWidth;\n }\n else {\n const res = wrapText(str, font, wrapInfo.width, wrapInfo.breakAll, wrapInfo.accumWidth);\n wrapInfo.accumWidth = res.accumWidth + tokenPaddingH;\n linesWidths = res.linesWidths;\n strLines = res.lines;\n }\n }\n else {\n strLines = str.split('\\n');\n }\n\n for (let i = 0; i < strLines.length; i++) {\n const text = strLines[i];\n const token = new RichTextToken();\n token.styleName = styleName;\n token.text = text;\n token.isLineHolder = !text && !isEmptyStr;\n\n if (typeof tokenStyle.width === 'number') {\n token.width = tokenStyle.width;\n }\n else {\n token.width = linesWidths\n ? linesWidths[i] // Caculated width in the wrap\n : getWidth(text, font);\n }\n\n // The first token should be appended to the last line if not new line.\n if (!i && !newLine) {\n const tokens = (lines[lines.length - 1] || (lines[0] = new RichTextLine())).tokens;\n\n // Consider cases:\n // (1) ''.split('\\n') => ['', '\\n', ''], the '' at the first item\n // (which is a placeholder) should be replaced by new token.\n // (2) A image backage, where token likes {a|}.\n // (3) A redundant '' will affect textAlign in line.\n // (4) tokens with the same tplName should not be merged, because\n // they should be displayed in different box (with border and padding).\n const tokensLen = tokens.length;\n (tokensLen === 1 && tokens[0].isLineHolder)\n ? (tokens[0] = token)\n // Consider text is '', only insert when it is the \"lineHolder\" or\n // \"emptyStr\". Otherwise a redundant '' will affect textAlign in line.\n : ((text || !tokensLen || isEmptyStr) && tokens.push(token));\n }\n // Other tokens always start a new line.\n else {\n // If there is '', insert it as a placeholder.\n lines.push(new RichTextLine([token]));\n }\n }\n}\n\n\nfunction isLatin(ch: string) {\n let code = ch.charCodeAt(0);\n return code >= 0x21 && code <= 0xFF;\n}\n\nconst breakCharMap = reduce(',&?/;] '.split(''), function (obj, ch) {\n obj[ch] = true;\n return obj;\n}, {} as Dictionary);\n/**\n * If break by word. For latin languages.\n */\nfunction isWordBreakChar(ch: string) {\n if (isLatin(ch)) {\n if (breakCharMap[ch]) {\n return true;\n }\n return false;\n }\n return true;\n}\n\nfunction wrapText(\n text: string,\n font: string,\n lineWidth: number,\n isBreakAll: boolean,\n lastAccumWidth: number\n) {\n let lines: string[] = [];\n let linesWidths: number[] = [];\n let line = '';\n let currentWord = '';\n let currentWordWidth = 0;\n let accumWidth = 0;\n\n for (let i = 0; i < text.length; i++) {\n\n const ch = text.charAt(i);\n if (ch === '\\n') {\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n // Reset\n line = '';\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = 0;\n continue;\n }\n\n const chWidth = getWidth(ch, font);\n const inWord = isBreakAll ? false : !isWordBreakChar(ch);\n\n if (!lines.length\n ? lastAccumWidth + accumWidth + chWidth > lineWidth\n : accumWidth + chWidth > lineWidth\n ) {\n if (!accumWidth) { // If nothing appended yet.\n if (inWord) {\n // The word length is still too long for one line\n // Force break the word\n lines.push(currentWord);\n linesWidths.push(currentWordWidth);\n\n currentWord = ch;\n currentWordWidth = chWidth;\n }\n else {\n // lineWidth is too small for ch\n lines.push(ch);\n linesWidths.push(chWidth);\n }\n }\n else if (line || currentWord) {\n if (inWord) {\n if (!line) {\n // The one word is still too long for one line\n // Force break the word\n // TODO Keep the word?\n line = currentWord;\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = currentWordWidth;\n }\n\n lines.push(line);\n linesWidths.push(accumWidth - currentWordWidth);\n\n // Break the whole word\n currentWord += ch;\n currentWordWidth += chWidth;\n line = '';\n accumWidth = currentWordWidth;\n }\n else {\n // Append lastWord if have\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n currentWord = '';\n currentWordWidth = 0;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n\n line = ch;\n accumWidth = chWidth;\n }\n }\n\n continue;\n }\n\n accumWidth += chWidth;\n\n if (inWord) {\n currentWord += ch;\n currentWordWidth += chWidth;\n }\n else {\n // Append whole word\n if (currentWord) {\n line += currentWord;\n // Reset\n currentWord = '';\n currentWordWidth = 0;\n }\n\n // Append character\n line += ch;\n }\n }\n\n if (!lines.length && !line) {\n line = text;\n currentWord = '';\n currentWordWidth = 0;\n }\n\n // Append last line.\n if (currentWord) {\n line += currentWord;\n }\n if (line) {\n lines.push(line);\n linesWidths.push(accumWidth);\n }\n\n if (lines.length === 1) {\n // No new line.\n accumWidth += lastAccumWidth;\n }\n\n return {\n // Accum width of last line\n accumWidth,\n lines: lines,\n linesWidths\n };\n}\n\nfunction parsePercent(value: string | number, maxValue: number) {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n return parseFloat(value);\n }\n return value;\n}","/**\n * RichText is a container that manages complex text label.\n * It will parse text string and create sub displayble elements respectively.\n */\nimport { TextAlign, TextVerticalAlign, ImageLike, Dictionary, MapToType } from '../core/types';\nimport { parseRichText, parsePlainText } from './helper/parseText';\nimport TSpan, { TSpanStyleProps } from './TSpan';\nimport { retrieve2, isString, each, normalizeCssArray, trim, retrieve3, extend, keys, defaults } from '../core/util';\nimport { DEFAULT_FONT, adjustTextX, adjustTextY } from '../contain/text';\nimport ZRImage from './Image';\nimport Rect from './shape/Rect';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray, copy } from '../core/matrix';\nimport Displayable, { DisplayableStatePropNames, DisplayableProps, DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable';\nimport Path from './Path';\nimport { ZRenderType } from '../zrender';\nimport Animator from '../animation/Animator';\nimport Transformable from '../core/Transformable';\nimport { ElementCommonState } from '../Element';\n\ntype TextContentBlock = ReturnType\ntype TextLine = TextContentBlock['lines'][0]\ntype TextToken = TextLine['tokens'][0]\n\n// TODO Default value?\nexport interface TextStylePropsPart {\n // TODO Text is assigned inside zrender\n text?: string\n\n fill?: string\n stroke?: string\n\n opacity?: number\n fillOpacity?: number\n strokeOpacity?: number\n /**\n * textStroke may be set as some color as a default\n * value in upper applicaion, where the default value\n * of lineWidth should be 0 to make sure that\n * user can choose to do not use text stroke.\n */\n lineWidth?: number\n lineDash?: false | number[]\n lineDashOffset?: number\n borderDash?: false | number[]\n borderDashOffset?: number\n\n /**\n * If `fontSize` or `fontFamily` exists, `font` will be reset by\n * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`.\n * So do not visit it directly in upper application (like echarts),\n * but use `contain/text#makeFont` instead.\n */\n font?: string\n /**\n * The same as font. Use font please.\n * @deprecated\n */\n textFont?: string\n\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontStyle?: 'normal' | 'italic' | 'oblique'\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | number\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontFamily?: string\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n * Should be 12 but not '12px'.\n */\n fontSize?: number | string\n\n align?: TextAlign\n verticalAlign?: TextVerticalAlign\n\n /**\n * Line height. Default to be text height of '国'\n */\n lineHeight?: number\n /**\n * Width of text block. Not include padding\n * Used for background, truncate, wrap\n */\n width?: number | string\n /**\n * Height of text block. Not include padding\n * Used for background, truncate\n */\n height?: number\n /**\n * Reserved for special functinality, like 'hr'.\n */\n tag?: string\n\n textShadowColor?: string\n textShadowBlur?: number\n textShadowOffsetX?: number\n textShadowOffsetY?: number\n\n // Shadow, background, border of text box.\n backgroundColor?: string | {\n image: ImageLike | string\n }\n\n /**\n * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`\n */\n padding?: number | number[]\n /**\n * Margin of label. Used when layouting the label.\n */\n margin?: number\n\n borderColor?: string\n borderWidth?: number\n borderRadius?: number | number[]\n\n /**\n * Shadow color for background box.\n */\n shadowColor?: string\n /**\n * Shadow blur for background box.\n */\n shadowBlur?: number\n /**\n * Shadow offset x for background box.\n */\n shadowOffsetX?: number\n /**\n * Shadow offset y for background box.\n */\n shadowOffsetY?: number\n}\nexport interface TextStyleProps extends TextStylePropsPart {\n\n text?: string\n\n x?: number\n y?: number\n\n /**\n * Only support number in the top block.\n */\n width?: number\n /**\n * Text styles for rich text.\n */\n rich?: Dictionary\n\n /**\n * Strategy when calculated text width exceeds textWidth.\n * break: break by word\n * break: will break inside the word\n * truncate: truncate the text and show ellipsis\n * Do nothing if not set\n */\n overflow?: 'break' | 'breakAll' | 'truncate'\n\n /**\n * Strategy when text lines exceeds textHeight.\n * Do nothing if not set\n */\n lineOverflow?: 'truncate'\n\n /**\n * Epllipsis used if text is truncated\n */\n ellipsis?: string\n /**\n * Placeholder used if text is truncated to empty\n */\n placeholder?: string\n /**\n * Min characters for truncating\n */\n truncateMinChar?: number\n}\n\nexport interface TextProps extends DisplayableProps {\n style?: TextStyleProps\n\n zlevel?: number\n z?: number\n z2?: number\n\n culling?: boolean\n cursor?: string\n}\n\nexport type TextState = Pick & ElementCommonState\n\nexport type DefaultTextStyle = Pick & {\n autoStroke?: boolean\n};\n\nconst DEFAULT_RICH_TEXT_COLOR = {\n fill: '#000'\n};\nconst DEFAULT_STROKE_LINE_WIDTH = 2;\n\n// const DEFAULT_TEXT_STYLE: TextStyleProps = {\n// x: 0,\n// y: 0,\n// fill: '#000',\n// stroke: null,\n// opacity: 0,\n// fillOpacity:\n// }\n\nexport const DEFAULT_TEXT_ANIMATION_PROPS: MapToType = {\n style: defaults, MapToType>({\n fill: true,\n stroke: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineWidth: true,\n fontSize: true,\n lineHeight: true,\n width: true,\n height: true,\n textShadowColor: true,\n textShadowBlur: true,\n textShadowOffsetX: true,\n textShadowOffsetY: true,\n backgroundColor: true,\n padding: true, // TODO needs normalize padding before animate\n borderColor: true,\n borderWidth: true,\n borderRadius: true // TODO needs normalize radius before animate\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\n\ninterface ZRText {\n animate(key?: '', loop?: boolean): Animator\n animate(key: 'style', loop?: boolean): Animator\n\n getState(stateName: string): TextState\n ensureState(stateName: string): TextState\n\n states: Dictionary\n stateProxy: (stateName: string) => TextState\n}\n\nclass ZRText extends Displayable {\n\n type = 'text'\n\n style: TextStyleProps\n\n /**\n * How to handling label overlap\n *\n * hidden:\n */\n overlap: 'hidden' | 'show' | 'blur'\n\n /**\n * Calculated transform after the text is attached on some element.\n * Will override the default transform.\n */\n attachedTransform: Transformable\n\n private _children: (ZRImage | Rect | TSpan)[] = []\n\n private _childCursor: 0\n\n private _defaultStyle: DefaultTextStyle = DEFAULT_RICH_TEXT_COLOR\n\n constructor(opts?: TextProps) {\n super();\n this.attr(opts);\n }\n\n childrenRef() {\n return this._children;\n }\n\n update() {\n // Update children\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n // Set common properties.\n child.zlevel = this.zlevel;\n child.z = this.z;\n child.z2 = this.z2;\n child.culling = this.culling;\n child.cursor = this.cursor;\n child.invisible = this.invisible;\n }\n\n const attachedTransform = this.attachedTransform;\n if (attachedTransform) {\n attachedTransform.updateTransform();\n const m = attachedTransform.transform;\n if (m) {\n this.transform = this.transform || [];\n // Copy to the transform will be actually used.\n copy(this.transform, m);\n }\n else {\n this.transform = null;\n }\n }\n else {\n super.update();\n }\n }\n\n\n getComputedTransform() {\n if (this.__hostTarget) {\n // Update host target transform\n this.__hostTarget.getComputedTransform();\n // Update text position.\n this.__hostTarget.updateInnerText(true);\n }\n\n return this.attachedTransform ? this.attachedTransform.getComputedTransform()\n : super.getComputedTransform();\n }\n\n private _updateSubTexts() {\n // Reset child visit cursor\n this._childCursor = 0;\n\n normalizeTextStyle(this.style);\n this.style.rich\n ? this._updateRichTexts()\n : this._updatePlainTexts();\n\n this._children.length = this._childCursor;\n\n this.styleUpdated();\n }\n\n addSelfToZr(zr: ZRenderType) {\n super.addSelfToZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n // Also need mount __zr for case like hover detection.\n // The case: hover on a label (position: 'top') causes host el\n // scaled and label Y position lifts a bit so that out of the\n // pointer, then mouse move should be able to trigger \"mouseout\".\n this._children[i].__zr = zr;\n }\n }\n\n removeSelfFromZr(zr: ZRenderType) {\n super.removeSelfFromZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n this._children[i].__zr = null;\n }\n }\n\n getBoundingRect(): BoundingRect {\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n if (!this._rect) {\n // TODO: Optimize when using width and overflow: wrap/truncate\n const tmpRect = new BoundingRect(0, 0, 0, 0);\n const children = this._children;\n const tmpMat: MatrixArray = [];\n let rect = null;\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const childRect = child.getBoundingRect();\n const transform = child.getLocalTransform(tmpMat);\n\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n this._rect = rect || tmpRect;\n }\n return this._rect;\n }\n\n // Can be set in Element. To calculate text fill automatically when textContent is inside element\n setDefaultTextStyle(defaultTextStyle: DefaultTextStyle) {\n // Use builtin if defaultTextStyle is not given.\n this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR;\n }\n\n setTextContent(textContent: never) {\n throw new Error('Can\\'t attach text on another text');\n }\n\n // getDefaultStyleValue(key: T): TextStyleProps[T] {\n // // Default value is on the prototype.\n // return this.style.prototype[key];\n // }\n\n protected _mergeStyle(targetStyle: TextStyleProps, sourceStyle: TextStyleProps) {\n if (!sourceStyle) {\n return targetStyle;\n }\n\n // DO deep merge on rich configurations.\n const sourceRich = sourceStyle.rich;\n const targetRich = targetStyle.rich || (sourceRich && {}); // Create a new one if source have rich but target don't\n\n extend(targetStyle, sourceStyle);\n\n if (sourceRich && targetRich) {\n // merge rich and assign rich again.\n this._mergeRich(targetRich, sourceRich);\n targetStyle.rich = targetRich;\n }\n else if (targetRich) {\n // If source rich not exists. DON'T override the target rich\n targetStyle.rich = targetRich;\n }\n\n return targetStyle;\n }\n\n private _mergeRich(targetRich: TextStyleProps['rich'], sourceRich: TextStyleProps['rich']) {\n const richNames = keys(sourceRich);\n // Merge by rich names.\n for (let i = 0; i < richNames.length; i++) {\n const richName = richNames[i];\n targetRich[richName] = targetRich[richName] || {};\n extend(targetRich[richName], sourceRich[richName]);\n }\n }\n\n protected _getAnimationStyleProps() {\n return DEFAULT_TEXT_ANIMATION_PROPS;\n }\n\n\n private _getOrCreateChild(Ctor: {new(): TSpan}): TSpan\n private _getOrCreateChild(Ctor: {new(): ZRImage}): ZRImage\n private _getOrCreateChild(Ctor: {new(): Rect}): Rect\n private _getOrCreateChild(Ctor: {new(): TSpan | Rect | ZRImage}): TSpan | Rect | ZRImage {\n let child = this._children[this._childCursor];\n if (!child || !(child instanceof Ctor)) {\n child = new Ctor();\n }\n this._children[this._childCursor++] = child;\n child.__zr = this.__zr;\n // TODO to users parent can only be group.\n child.parent = this as any;\n return child;\n }\n\n private _updatePlainTexts() {\n const style = this.style;\n const textFont = style.font || DEFAULT_FONT;\n const textPadding = style.padding as number[];\n\n const text = getStyleText(style);\n const contentBlock = parsePlainText(text, style);\n const needDrawBg = needDrawBackground(style);\n const bgColorDrawn = !!(style.backgroundColor);\n\n let outerHeight = contentBlock.outerHeight;\n\n const textLines = contentBlock.lines;\n const lineHeight = contentBlock.lineHeight;\n\n const defaultStyle = this._defaultStyle;\n\n const baseX = style.x || 0;\n const baseY = style.y || 0;\n const textAlign = style.align || defaultStyle.align || 'left';\n const verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top';\n\n let textX = baseX;\n let textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign);\n\n if (needDrawBg || textPadding) {\n // Consider performance, do not call getTextWidth util necessary.\n let outerWidth = contentBlock.width;\n textPadding && (outerWidth += textPadding[1] + textPadding[3]);\n const boxX = adjustTextX(baseX, outerWidth, textAlign);\n const boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n\n needDrawBg && this._renderBackground(style, boxX, boxY, outerWidth, outerHeight);\n }\n\n // `textBaseline` is set as 'middle'.\n textY += lineHeight / 2;\n\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n if (verticalAlign === 'top') {\n textY += textPadding[0];\n }\n else if (verticalAlign === 'bottom') {\n textY -= textPadding[2];\n }\n }\n\n let defaultLineWidth = 0;\n let useDefaultFill = false;\n const textFill = getFill(\n 'fill' in style\n ? style.fill\n : (useDefaultFill = true, defaultStyle.fill)\n );\n const textStroke = getStroke(\n 'stroke' in style\n ? style.stroke\n : (!bgColorDrawn\n && (!defaultStyle.autoStroke || useDefaultFill)\n )\n ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null\n );\n\n const hasShadow = style.textShadowBlur > 0;\n\n const fixedBoundingRect = style.width != null\n && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll');\n const calculatedLineHeight = contentBlock.calculatedLineHeight;\n\n for (let i = 0; i < textLines.length; i++) {\n const el = this._getOrCreateChild(TSpan);\n // Always create new style.\n const subElStyle: TSpanStyleProps = el.createStyle();\n el.useStyle(subElStyle);\n subElStyle.text = textLines[i];\n subElStyle.x = textX;\n subElStyle.y = textY;\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 if (textAlign) {\n subElStyle.textAlign = textAlign;\n }\n // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n subElStyle.textBaseline = 'middle';\n subElStyle.opacity = style.opacity;\n // Fill after stroke so the outline will not cover the main part.\n subElStyle.strokeFirst = true;\n\n if (hasShadow) {\n subElStyle.shadowBlur = style.textShadowBlur || 0;\n subElStyle.shadowColor = style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = style.textShadowOffsetY || 0;\n }\n\n if (textStroke) {\n subElStyle.stroke = textStroke as string;\n subElStyle.lineWidth = style.lineWidth || defaultLineWidth;\n subElStyle.lineDash = style.lineDash;\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n }\n if (textFill) {\n subElStyle.fill = textFill as string;\n }\n\n subElStyle.font = textFont;\n\n textY += lineHeight;\n\n if (fixedBoundingRect) {\n el.setBoundingRect(new BoundingRect(\n adjustTextX(subElStyle.x, style.width, subElStyle.textAlign as TextAlign),\n adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline as TextVerticalAlign),\n style.width,\n calculatedLineHeight\n ));\n }\n }\n }\n\n\n private _updateRichTexts() {\n const style = this.style;\n\n // TODO Only parse when text changed?\n const text = getStyleText(style);\n const contentBlock = parseRichText(text, style);\n\n const contentWidth = contentBlock.width;\n const outerWidth = contentBlock.outerWidth;\n const outerHeight = contentBlock.outerHeight;\n const textPadding = style.padding as number[];\n\n const baseX = style.x || 0;\n const baseY = style.y || 0;\n const defaultStyle = this._defaultStyle;\n const textAlign = style.align || defaultStyle.align;\n const verticalAlign = style.verticalAlign || defaultStyle.verticalAlign;\n\n const boxX = adjustTextX(baseX, outerWidth, textAlign);\n const boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n let xLeft = boxX;\n let lineTop = boxY;\n\n if (textPadding) {\n xLeft += textPadding[3];\n lineTop += textPadding[0];\n }\n\n let xRight = xLeft + contentWidth;\n\n if (needDrawBackground(style)) {\n this._renderBackground(style, boxX, boxY, outerWidth, outerHeight);\n }\n const bgColorDrawn = !!(style.backgroundColor);\n\n for (let i = 0; i < contentBlock.lines.length; i++) {\n const line = contentBlock.lines[i];\n const tokens = line.tokens;\n const tokenCount = tokens.length;\n const lineHeight = line.lineHeight;\n\n let remainedWidth = line.width;\n let leftIndex = 0;\n let lineXLeft = xLeft;\n let lineXRight = xRight;\n let rightIndex = tokenCount - 1;\n let token;\n\n while (\n leftIndex < tokenCount\n && (token = tokens[leftIndex], !token.align || token.align === 'left')\n ) {\n this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn);\n remainedWidth -= token.width;\n lineXLeft += token.width;\n leftIndex++;\n }\n\n while (\n rightIndex >= 0\n && (token = tokens[rightIndex], token.align === 'right')\n ) {\n this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn);\n remainedWidth -= token.width;\n lineXRight -= token.width;\n rightIndex--;\n }\n\n // The other tokens are placed as textAlign 'center' if there is enough space.\n lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2;\n while (leftIndex <= rightIndex) {\n token = tokens[leftIndex];\n // Consider width specified by user, use 'center' rather than 'left'.\n this._placeToken(\n token, style, lineHeight, lineTop,\n lineXLeft + token.width / 2, 'center', bgColorDrawn\n );\n lineXLeft += token.width;\n leftIndex++;\n }\n\n lineTop += lineHeight;\n }\n }\n\n private _placeToken(\n token: TextToken,\n style: TextStyleProps,\n lineHeight: number,\n lineTop: number,\n x: number,\n textAlign: string,\n parentBgColorDrawn: boolean\n ) {\n const tokenStyle = style.rich[token.styleName] || {};\n tokenStyle.text = token.text;\n\n // 'ctx.textBaseline' is always set as 'middle', for sake of\n // the bias of \"Microsoft YaHei\".\n const verticalAlign = token.verticalAlign;\n let y = lineTop + lineHeight / 2;\n if (verticalAlign === 'top') {\n y = lineTop + token.height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y = lineTop + lineHeight - token.height / 2;\n }\n\n const needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle);\n needDrawBg && this._renderBackground(\n tokenStyle,\n textAlign === 'right'\n ? x - token.width\n : textAlign === 'center'\n ? x - token.width / 2\n : x,\n y - token.height / 2,\n token.width,\n token.height\n );\n const bgColorDrawn = !!tokenStyle.backgroundColor;\n\n const textPadding = token.textPadding;\n if (textPadding) {\n x = getTextXForPadding(x, textAlign, textPadding);\n }\n\n const el = this._getOrCreateChild(TSpan);\n const subElStyle: TSpanStyleProps = el.createStyle();\n // Always create new style.\n el.useStyle(subElStyle);\n\n const defaultStyle = this._defaultStyle;\n let useDefaultFill = false;\n let defaultLineWidth = 0;\n const textFill = getStroke(\n 'fill' in tokenStyle ? tokenStyle.fill\n : 'fill' in style ? style.fill\n : (useDefaultFill = true, defaultStyle.fill)\n );\n const textStroke = getStroke(\n 'stroke' in tokenStyle ? tokenStyle.stroke\n : 'stroke' in style ? style.stroke\n : (\n !bgColorDrawn\n && !parentBgColorDrawn\n && (!defaultStyle.autoStroke || useDefaultFill)\n ) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null\n );\n\n const hasShadow = tokenStyle.textShadowBlur > 0\n || style.textShadowBlur > 0;\n\n subElStyle.text = token.text;\n subElStyle.x = x;\n subElStyle.y = y;\n if (hasShadow) {\n subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0;\n subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0;\n }\n\n subElStyle.textAlign = textAlign as CanvasTextAlign;\n // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n subElStyle.textBaseline = 'middle';\n subElStyle.font = token.font || DEFAULT_FONT;\n\n if (textStroke) {\n subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth);\n subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash);\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n subElStyle.stroke = textStroke;\n }\n if (textFill) {\n subElStyle.fill = textFill;\n }\n\n const textWidth = token.contentWidth;\n const textHeight = token.contentHeight;\n // NOTE: Should not call dirtyStyle after setBoundingRect. Or it will be cleared.\n el.setBoundingRect(new BoundingRect(\n adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign as TextAlign),\n adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline as TextVerticalAlign),\n textWidth,\n textHeight\n ));\n }\n\n private _renderBackground(\n style: TextStylePropsPart,\n x: number,\n y: number,\n width: number,\n height: number\n ) {\n const textBackgroundColor = style.backgroundColor;\n const textBorderWidth = style.borderWidth;\n const textBorderColor = style.borderColor;\n const isPlainBg = isString(textBackgroundColor);\n const textBorderRadius = style.borderRadius;\n const self = this;\n\n let rectEl: Rect;\n let imgEl: ZRImage;\n if (isPlainBg || (textBorderWidth && textBorderColor)) {\n // Background is color\n rectEl = this._getOrCreateChild(Rect);\n rectEl.useStyle(rectEl.createStyle()); // Create an empty style.\n rectEl.style.fill = null;\n const rectShape = rectEl.shape;\n rectShape.x = x;\n rectShape.y = y;\n rectShape.width = width;\n rectShape.height = height;\n rectShape.r = textBorderRadius;\n rectEl.dirtyShape();\n }\n\n if (isPlainBg) {\n const rectStyle = rectEl.style;\n rectStyle.fill = textBackgroundColor as string || null;\n rectStyle.opacity = retrieve2(style.opacity, 1);\n rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1);\n }\n else if (textBackgroundColor && (textBackgroundColor as {image: ImageLike}).image) {\n imgEl = this._getOrCreateChild(ZRImage);\n imgEl.onload = function () {\n // Refresh and relayout after image loaded.\n self.dirtyStyle();\n };\n const imgStyle = imgEl.style;\n imgStyle.image = (textBackgroundColor as {image: ImageLike}).image;\n imgStyle.x = x;\n imgStyle.y = y;\n imgStyle.width = width;\n imgStyle.height = height;\n }\n\n if (textBorderWidth && textBorderColor) {\n const rectStyle = rectEl.style;\n rectStyle.lineWidth = textBorderWidth;\n rectStyle.stroke = textBorderColor;\n rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1);\n rectStyle.lineDash = style.borderDash;\n rectStyle.lineDashOffset = style.borderDashOffset || 0;\n\n // Making shadow looks better.\n if (rectEl.hasFill() && rectEl.hasStroke()) {\n rectStyle.strokeFirst = true;\n rectStyle.lineWidth *= 2;\n }\n }\n\n const shadowStyle = (rectEl || imgEl).style;\n shadowStyle.shadowBlur = style.shadowBlur || 0;\n shadowStyle.shadowColor = style.shadowColor || 'transparent';\n shadowStyle.shadowOffsetX = style.shadowOffsetX || 0;\n shadowStyle.shadowOffsetY = style.shadowOffsetY || 0;\n }\n\n static makeFont(style: TextStylePropsPart): string {\n // FIXME in node-canvas fontWeight is before fontStyle\n // Use `fontSize` `fontFamily` to check whether font properties are defined.\n let font = '';\n if (style.fontSize || style.fontFamily || style.fontWeight) {\n let fontSize = '';\n if (\n typeof style.fontSize === 'string'\n && (\n style.fontSize.indexOf('px') !== -1\n || style.fontSize.indexOf('rem') !== -1\n || style.fontSize.indexOf('em') !== -1\n )\n ) {\n fontSize = style.fontSize;\n }\n else if (!isNaN(+style.fontSize)) {\n fontSize = style.fontSize + 'px';\n }\n else {\n fontSize = '12px';\n }\n font = [\n style.fontStyle,\n style.fontWeight,\n fontSize,\n // If font properties are defined, `fontFamily` should not be ignored.\n style.fontFamily || 'sans-serif'\n ].join(' ');\n }\n return font && trim(font) || style.textFont || style.font;\n }\n}\n\n\nconst VALID_TEXT_ALIGN = {left: true, right: 1, center: 1};\nconst VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1};\n\nexport function normalizeTextStyle(style: TextStyleProps): TextStyleProps {\n normalizeStyle(style);\n each(style.rich, normalizeStyle);\n return style;\n}\n\nfunction normalizeStyle(style: TextStylePropsPart) {\n if (style) {\n style.font = ZRText.makeFont(style);\n let textAlign = style.align;\n // 'middle' is invalid, convert it to 'center'\n (textAlign as string) === 'middle' && (textAlign = 'center');\n style.align = (\n textAlign == null || VALID_TEXT_ALIGN[textAlign]\n ) ? textAlign : 'left';\n\n // Compatible with textBaseline.\n let verticalAlign = style.verticalAlign;\n (verticalAlign as string) === 'center' && (verticalAlign = 'middle');\n style.verticalAlign = (\n verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]\n ) ? verticalAlign : 'top';\n\n // TODO Should not change the orignal value.\n const textPadding = style.padding;\n if (textPadding) {\n style.padding = normalizeCssArray(style.padding);\n }\n }\n}\n\n/**\n * @param stroke If specified, do not check style.textStroke.\n * @param lineWidth If specified, do not check style.textStroke.\n */\nfunction getStroke(\n stroke?: TextStylePropsPart['stroke'],\n lineWidth?: number\n) {\n return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n ? null\n : ((stroke as any).image || (stroke as any).colorStops)\n ? '#000'\n : stroke;\n}\n\nfunction getFill(\n fill?: TextStylePropsPart['fill']\n) {\n return (fill == null || fill === 'none')\n ? null\n // TODO pattern and gradient?\n : ((fill as any).image || (fill as any).colorStops)\n ? '#000'\n : fill;\n}\n\nfunction getTextXForPadding(x: number, textAlign: string, textPadding: number[]): number {\n return textAlign === 'right'\n ? (x - textPadding[1])\n : textAlign === 'center'\n ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n : (x + textPadding[3]);\n}\n\nfunction getStyleText(style: TextStylePropsPart): string {\n // Compat: set number to text is supported.\n // set null/undefined to text is supported.\n let text = style.text;\n text != null && (text += '');\n return text;\n}\n\n/**\n * If needs draw background\n * @param style Style of element\n */\nfunction needDrawBackground(style: TextStylePropsPart): boolean {\n return !!(\n style.backgroundColor\n || (style.borderWidth && style.borderColor)\n );\n}\n\nexport default ZRText;","/**\n * 圆弧\n */\n\nimport Path, { PathProps } from '../Path';\n\nclass ArcShape {\n cx = 0;\n cy = 0;\n r = 0;\n startAngle = 0;\n endAngle = Math.PI * 2\n clockwise? = true\n}\n\ninterface ArcProps extends PathProps {\n shape?: Partial\n}\n\nclass Arc extends Path {\n\n shape: ArcShape\n\n constructor(opts?: ArcProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new ArcShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: ArcShape) {\n\n const x = shape.cx;\n const y = shape.cy;\n const r = Math.max(shape.r, 0);\n const startAngle = shape.startAngle;\n const endAngle = shape.endAngle;\n const clockwise = shape.clockwise;\n\n const unitX = Math.cos(startAngle);\n const unitY = Math.sin(startAngle);\n\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n }\n}\n\nArc.prototype.type = 'arc';\n\nexport default Arc;","/**\n * 贝塞尔曲线\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as vec2 from '../../core/vector';\nimport {\n quadraticSubdivide,\n cubicSubdivide,\n quadraticAt,\n cubicAt,\n quadraticDerivativeAt,\n cubicDerivativeAt\n} from '../../core/curve';\n\nconst out: number[] = [];\n\nclass BezierCurveShape {\n x1 = 0\n y1 = 0\n x2 = 0\n y2 = 0\n cpx1 = 0\n cpy1 = 0\n cpx2?: number\n cpy2?: number\n // Curve show percent, for animating\n percent = 1\n}\n\nfunction someVectorAt(shape: BezierCurveShape, t: number, isTangent: boolean) {\n const cpx2 = shape.cpx2;\n const cpy2 = shape.cpy2;\n if (cpx2 === null || cpy2 === null) {\n return [\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\n ];\n }\n else {\n return [\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\n ];\n }\n}\n\ninterface BezierCurveProps extends PathProps {\n shape?: Partial\n}\nclass BezierCurve extends Path {\n\n shape: BezierCurveShape\n\n constructor(opts?: BezierCurveProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new BezierCurveShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: BezierCurveShape) {\n let x1 = shape.x1;\n let y1 = shape.y1;\n let x2 = shape.x2;\n let y2 = shape.y2;\n let cpx1 = shape.cpx1;\n let cpy1 = shape.cpy1;\n let cpx2 = shape.cpx2;\n let cpy2 = shape.cpy2;\n let percent = shape.percent;\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(\n cpx1, cpy1,\n x2, y2\n );\n }\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 ctx.bezierCurveTo(\n cpx1, cpy1,\n cpx2, cpy2,\n x2, y2\n );\n }\n }\n\n /**\n * Get point at percent\n */\n pointAt(t: number) {\n return someVectorAt(this.shape, t, false);\n }\n\n /**\n * Get tangent at percent\n */\n tangentAt(t: number) {\n const p = someVectorAt(this.shape, t, true);\n return vec2.normalize(p, p);\n }\n};\n\nBezierCurve.prototype.type = 'bezier-curve';\n\nexport default BezierCurve;\n","/**\n * 水滴形状\n */\n\nimport Path, { PathProps } from '../Path';\n\nclass DropletShape {\n cx = 0\n cy = 0\n width = 0\n height = 0\n}\n\ninterface DropletProps extends PathProps {\n shape?: Partial\n}\nclass Droplet extends Path {\n\n shape: DropletShape\n\n constructor(opts?: DropletProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new DropletShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: DropletShape) {\n const x = shape.cx;\n const y = shape.cy;\n const a = shape.width;\n const b = shape.height;\n\n ctx.moveTo(x, y + a);\n ctx.bezierCurveTo(\n x + a,\n y + a,\n x + a * 3 / 2,\n y - a / 3,\n x,\n y - b\n );\n ctx.bezierCurveTo(\n x - a * 3 / 2,\n y - a / 3,\n x - a,\n y + a,\n x,\n y + a\n );\n ctx.closePath();\n }\n}\n\nDroplet.prototype.type = 'droplet';\n\nexport default Droplet;\n","/**\n * 心形\n */\n\nimport Path, { PathProps } from '../Path';\n\nclass HeartShape {\n cx = 0\n cy = 0\n width = 0\n height = 0\n}\n\ninterface HeartProps extends PathProps {\n shape?: Partial\n}\nclass Heart extends Path {\n\n shape: HeartShape\n\n constructor(opts?: HeartProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new HeartShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: HeartShape) {\n const x = shape.cx;\n const y = shape.cy;\n const a = shape.width;\n const b = shape.height;\n ctx.moveTo(x, y);\n ctx.bezierCurveTo(\n x + a / 2, y - b * 2 / 3,\n x + a * 2, y + b / 3,\n x, y + b\n );\n ctx.bezierCurveTo(\n x - a * 2, y + b / 3,\n x - a / 2, y - b * 2 / 3,\n x, y\n );\n }\n}\n\n\nHeart.prototype.type = 'heart';\n\nexport default Heart;","/**\n * 正多边形\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst PI = Math.PI;\nconst sin = Math.sin;\nconst cos = Math.cos;\n\nclass IsogonShape {\n x = 0\n y = 0\n r = 0\n n = 0\n}\n\ninterface IsogonProps extends PathProps {\n shape?: Partial\n}\nclass Isogon extends Path {\n\n shape: IsogonShape\n\n constructor(opts?: IsogonProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new IsogonShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: IsogonShape) {\n const n = shape.n;\n if (!n || n < 2) {\n return;\n }\n\n const x = shape.x;\n const y = shape.y;\n const r = shape.r;\n\n const dStep = 2 * PI / n;\n let deg = -PI / 2;\n\n ctx.moveTo(x + r * cos(deg), y + r * sin(deg));\n for (let i = 0, end = n - 1; i < end; i++) {\n deg += dStep;\n ctx.lineTo(x + r * cos(deg), y + r * sin(deg));\n }\n\n ctx.closePath();\n\n return;\n }\n}\n\nIsogon.prototype.type = 'isogon';\n\nexport default Isogon;\n","/**\n * 圆环\n */\n\nimport Path, { PathProps } from '../Path';\n\nclass RingShape {\n cx = 0\n cy = 0\n r = 0\n r0 = 0\n}\n\ninterface RingProps extends PathProps {\n shape?: Partial\n}\nclass Ring extends Path {\n\n shape: RingShape\n\n constructor(opts?: RingProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new RingShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: RingShape) {\n const x = shape.cx;\n const y = shape.cy;\n const 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\nRing.prototype.type = 'ring';\nexport default Ring;","/**\n * 玫瑰线\n * @module zrender/graphic/shape/Rose\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst sin = Math.sin;\nconst cos = Math.cos;\nconst radian = Math.PI / 180;\n\nclass RoseShape {\n cx = 0\n cy = 0\n r: number[] = []\n k = 0\n n = 1\n}\n\ninterface RoseProps extends PathProps {\n shape?: Partial\n}\nclass Rose extends Path {\n\n shape: RoseShape\n\n constructor(opts?: RoseProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new RoseShape();\n }\n\n\n buildPath(ctx: CanvasRenderingContext2D, shape: RoseShape) {\n const R = shape.r;\n const k = shape.k;\n const n = shape.n;\n const x0 = shape.cx;\n const y0 = shape.cy;\n let x;\n let y;\n let r;\n\n\n ctx.moveTo(x0, y0);\n\n for (let i = 0, len = R.length; i < len; i++) {\n r = R[i];\n\n for (let j = 0; j <= 360 * n; j++) {\n x = r\n * sin(k / n * j % 360 * radian)\n * cos(j * radian)\n + x0;\n y = r\n * sin(k / n * j % 360 * radian)\n * sin(j * radian)\n + y0;\n ctx.lineTo(x, y);\n }\n }\n }\n}\n\nRose.prototype.type = 'rose';\n\nexport default Rose;","import Path, { PathProps } from '../Path';\n\nclass SectorShape {\n cx = 0\n cy = 0\n r0 = 0\n r = 0\n startAngle = 0\n endAngle = Math.PI * 2\n clockwise: boolean = true\n}\n\ninterface SectorProps extends PathProps {\n shape?: Partial\n}\nclass Sector extends Path {\n\n shape: SectorShape\n\n constructor(opts?: SectorProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new SectorShape();\n }\n\n\n buildPath(ctx: CanvasRenderingContext2D, shape: SectorShape) {\n\n const x = shape.cx;\n const y = shape.cy;\n const r0 = Math.max(shape.r0 || 0, 0);\n const r = Math.max(shape.r, 0);\n const startAngle = shape.startAngle;\n const endAngle = shape.endAngle;\n const clockwise = shape.clockwise;\n\n const unitX = Math.cos(startAngle);\n const unitY = Math.sin(startAngle);\n\n ctx.moveTo(unitX * r0 + x, unitY * r0 + y);\n\n ctx.lineTo(unitX * r + x, unitY * r + y);\n\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n\n ctx.lineTo(\n Math.cos(endAngle) * r0 + x,\n Math.sin(endAngle) * r0 + y\n );\n\n if (r0 !== 0) {\n ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n }\n\n ctx.closePath();\n }\n\n isZeroArea() {\n return this.shape.startAngle === this.shape.endAngle\n || this.shape.r === this.shape.r0;\n }\n}\n\nSector.prototype.type = 'sector';\n\nexport default Sector;\n","/**\n * n角星(n>3)\n * @module zrender/graphic/shape/Star\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst PI = Math.PI;\nconst cos = Math.cos;\nconst sin = Math.sin;\n\nclass StarShape {\n cx = 0\n cy = 0\n n = 3\n r0: number\n r = 0\n}\n\ninterface StarProps extends PathProps {\n shape?: Partial\n}\nclass Star extends Path {\n\n shape: StarShape\n\n constructor(opts?: StarProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new StarShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: StarShape) {\n\n const n = shape.n;\n if (!n || n < 2) {\n return;\n }\n\n const x = shape.cx;\n const y = shape.cy;\n const r = shape.r;\n let r0 = shape.r0;\n\n // 如果未指定内部顶点外接圆半径,则自动计算\n if (r0 == null) {\n r0 = n > 4\n // 相隔的外部顶点的连线的交点,\n // 被取为内部交点,以此计算r0\n ? r * cos(2 * PI / n) / cos(PI / n)\n // 二三四角星的特殊处理\n : r / 3;\n }\n\n const dStep = PI / n;\n let deg = -PI / 2;\n const xStart = x + r * cos(deg);\n const yStart = y + r * sin(deg);\n deg += dStep;\n\n // 记录边界点,用于判断inside\n ctx.moveTo(xStart, yStart);\n for (let i = 0, end = n * 2 - 1, ri; i < end; i++) {\n ri = i % 2 === 0 ? r0 : r;\n ctx.lineTo(x + ri * cos(deg), y + ri * sin(deg));\n deg += dStep;\n }\n\n ctx.closePath();\n }\n}\n\nStar.prototype.type = 'star';\nexport default Star;","/**\n * 内外旋轮曲线\n * @module zrender/graphic/shape/Trochold\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst cos = Math.cos;\nconst sin = Math.sin;\n\nclass TrochoidShape {\n cx = 0\n cy = 0\n r = 0\n r0 = 0\n d = 0\n location = 'out'\n}\n\ninterface TrochoidProps extends PathProps {\n shape?: Partial\n}\nclass Trochoid extends Path {\n\n shape: TrochoidShape\n\n constructor(opts?: TrochoidProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new TrochoidShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: TrochoidShape) {\n const R = shape.r;\n const r = shape.r0;\n const d = shape.d;\n const offsetX = shape.cx;\n const offsetY = shape.cy;\n const delta = shape.location === 'out' ? 1 : -1;\n let x1;\n let y1;\n let x2;\n let y2;\n\n if (shape.location && R <= r) {\n return;\n }\n\n let num = 0;\n let i = 1;\n let theta;\n\n x1 = (R + delta * r) * cos(0)\n - delta * d * cos(0) + offsetX;\n y1 = (R + delta * r) * sin(0)\n - d * sin(0) + offsetY;\n\n ctx.moveTo(x1, y1);\n\n // 计算结束时的i\n do {\n num++;\n }\n while ((r * num) % (R + delta * r) !== 0);\n\n do {\n theta = Math.PI / 180 * i;\n x2 = (R + delta * r) * cos(theta)\n - delta * d * cos((R / r + delta) * theta)\n + offsetX;\n y2 = (R + delta * r) * sin(theta)\n - d * sin((R / r + delta) * theta)\n + offsetY;\n ctx.lineTo(x2, y2);\n i++;\n }\n while (i <= (r * num) / (R + delta * r) * 360);\n\n }\n}\n\nTrochoid.prototype.type = 'trochoid';\nexport default Trochoid;","import Gradient, {GradientColorStop, GradientObject} from './Gradient';\n\nexport interface RadialGradientObject extends GradientObject {\n type: 'radial'\n\n x: number\n y: number\n r: number\n global: boolean\n}\n/**\n * x, y, r are all percent from 0 to 1 when globalCoord is false\n */\nclass RadialGradient extends Gradient {\n\n type: 'radial'\n\n x: number\n y: number\n r: number\n global: boolean\n\n constructor(\n x: number, y: number, r: number,\n colorStops?: GradientColorStop[], globalCoord?: boolean\n ) {\n super(colorStops);\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {type: 'radial', colorStops: ...}`, where\n // this constructor will not be called.\n this.x = x == null ? 0.5 : x;\n\n this.y = y == null ? 0.5 : y;\n\n this.r = r == null ? 0.5 : r;\n\n // Can be cloned\n this.type = 'radial';\n\n // If use global coord\n this.global = globalCoord || false;\n }\n}\n\nexport default RadialGradient;","import { ImageLike } from '../core/types';\n\ntype CanvasPatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'\n\nexport interface PatternObject {\n type: 'pattern'\n\n image: ImageLike | string\n repeat: CanvasPatternRepeat\n\n // Cached image. Which is created in the canvas painter.\n __image: ImageLike\n}\n\nclass Pattern {\n\n type: 'pattern'\n\n image: ImageLike | string\n repeat: CanvasPatternRepeat\n\n constructor(image: ImageLike | string, repeat: CanvasPatternRepeat) {\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {image: ...}`, where this constructor will not be called.\n this.image = image;\n this.repeat = repeat;\n }\n}\n\nexport default Pattern;","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport Point, { PointLike } from './Point';\nimport BoundingRect from './BoundingRect';\nimport { MatrixArray } from './matrix';\n\nconst extent = [0, 0];\nconst extent2 = [0, 0];\n\nconst minTv = new Point();\nconst maxTv = new Point();\n\nclass OrientedBoundingRect {\n\n // lt, rt, rb, lb\n private _corners: Point[] = [];\n\n private _axes: Point[] = [];\n\n private _origin: number[] = [0, 0];\n\n constructor(rect?: BoundingRect, transform?: MatrixArray) {\n for (let i = 0; i < 4; i++) {\n this._corners[i] = new Point();\n }\n for (let i = 0; i < 2; i++) {\n this._axes[i] = new Point();\n }\n\n if (rect) {\n this.fromBoundingRect(rect, transform);\n }\n }\n\n fromBoundingRect(rect: BoundingRect, transform?: MatrixArray) {\n const corners = this._corners;\n const axes = this._axes;\n const x = rect.x;\n const y = rect.y;\n const x2 = x + rect.width;\n const y2 = y + rect.height;\n corners[0].set(x, y);\n corners[1].set(x2, y);\n corners[2].set(x2, y2);\n corners[3].set(x, y2);\n\n if (transform) {\n for (let i = 0; i < 4; i++) {\n corners[i].transform(transform);\n }\n }\n\n // Calculate axes\n Point.sub(axes[0], corners[1], corners[0]);\n Point.sub(axes[1], corners[3], corners[0]);\n axes[0].normalize();\n axes[1].normalize();\n\n // Calculate projected origin\n for (let i = 0; i < 2; i++) {\n this._origin[i] = axes[i].dot(corners[0]);\n }\n }\n\n /**\n * If intersect with another OBB\n * @param other Bounding rect to be intersected with\n * @param mtv Calculated .\n * If it's not overlapped. it means needs to move given rect with Maximum Translation Vector to be overlapped.\n * Else it means needs to move given rect with Minimum Translation Vector to be not overlapped.\n */\n intersect(other: OrientedBoundingRect, mtv?: PointLike): boolean {\n // OBB collision with SAT method\n\n let overlapped = true;\n const noMtv = !mtv;\n minTv.set(Infinity, Infinity);\n maxTv.set(0, 0);\n // Check two axes for both two obb.\n if (!this._intersectCheckOneSide(this, other, minTv, maxTv, noMtv, 1)) {\n overlapped = false;\n if (noMtv) {\n // Early return if no need to calculate mtv\n return overlapped;\n }\n }\n if (!this._intersectCheckOneSide(other, this, minTv, maxTv, noMtv, -1)) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n }\n\n if (!noMtv) {\n Point.copy(mtv, overlapped ? minTv : maxTv);\n }\n\n return overlapped;\n }\n\n\n private _intersectCheckOneSide(\n self: OrientedBoundingRect,\n other: OrientedBoundingRect,\n minTv: Point,\n maxTv: Point,\n noMtv: boolean,\n inverse: 1 | -1\n ): boolean {\n let overlapped = true;\n for (let i = 0; i < 2; i++) {\n const axis = this._axes[i];\n this._getProjMinMaxOnAxis(i, self._corners, extent);\n this._getProjMinMaxOnAxis(i, other._corners, extent2);\n\n // Not overlap on the any axis.\n if (extent[1] < extent2[0] || extent[0] > extent2[1]) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n const dist0 = Math.abs(extent2[0] - extent[1]);\n const dist1 = Math.abs(extent[0] - extent2[1]);\n\n // Find longest distance of all axes.\n if (Math.min(dist0, dist1) > maxTv.len()) {\n if (dist0 < dist1) {\n Point.scale(maxTv, axis, -dist0 * inverse);\n }\n else {\n Point.scale(maxTv, axis, dist1 * inverse);\n }\n }\n }\n else if (minTv) {\n const dist0 = Math.abs(extent2[0] - extent[1]);\n const dist1 = Math.abs(extent[0] - extent2[1]);\n\n if (Math.min(dist0, dist1) < minTv.len()) {\n if (dist0 < dist1) {\n Point.scale(minTv, axis, dist0 * inverse);\n }\n else {\n Point.scale(minTv, axis, -dist1 * inverse);\n }\n }\n }\n }\n return overlapped;\n }\n\n private _getProjMinMaxOnAxis(dim: number, corners: Point[], out: number[]) {\n const axis = this._axes[dim];\n const origin = this._origin;\n const proj = corners[0].dot(axis) + origin[dim];\n let min = proj;\n let max = proj;\n\n for (let i = 1; i < corners.length; i++) {\n const proj = corners[i].dot(axis) + origin[dim];\n min = Math.min(proj, min);\n max = Math.max(proj, max);\n }\n\n out[0] = min;\n out[1] = max;\n }\n}\n\nexport default OrientedBoundingRect;","/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\n\nimport env from './core/env';\nimport * as zrUtil from './core/util';\nimport Handler from './Handler';\nimport Storage from './Storage';\nimport {PainterBase} from './PainterBase';\nimport Animation from './animation/Animation';\nimport HandlerProxy from './dom/HandlerProxy';\nimport Element, {ElementEventCallback, ElementEvent} from './Element';\nimport { Dictionary, ElementEventName } from './core/types';\nimport { LayerConfig } from './canvas/Layer';\nimport { GradientObject } from './graphic/Gradient';\nimport { PatternObject } from './graphic/Pattern';\nimport { Path, Group } from './export';\nimport { EventCallback } from './core/Eventful';\nimport TSpan from './graphic/TSpan';\nimport ZRImage from './graphic/Image';\nimport Displayable from './graphic/Displayable';\nimport { lum } from './tool/color';\nimport { DARK_MODE_THRESHOLD } from './config';\n\n\nconst useVML = !env.canvasSupported;\n\ntype PainterBaseCtor = {\n new(dom: HTMLElement, storage: Storage, ...args: any[]): PainterBase\n}\n\nconst painterCtors: Dictionary = {};\n\nlet instances: { [key: number]: ZRender } = {};\n\nfunction delInstance(id: number) {\n delete instances[id];\n}\n\nfunction isDarkMode(backgroundColor: string | GradientObject | PatternObject): boolean {\n if (!backgroundColor) {\n return false;\n }\n if (typeof backgroundColor === 'string') {\n return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD;\n }\n else if ((backgroundColor as GradientObject).colorStops) {\n const colorStops = (backgroundColor as GradientObject).colorStops;\n let totalLum = 0;\n const len = colorStops.length;\n // Simply do the math of average the color. Not consider the offset\n for (let i = 0; i < len; i++) {\n totalLum += lum(colorStops[i].color, 1);\n }\n totalLum /= len;\n\n return totalLum < DARK_MODE_THRESHOLD;\n }\n // Can't determine\n return false;\n}\n\nclass ZRender {\n\n dom: HTMLElement\n\n id: number\n\n storage: Storage\n painter: PainterBase\n handler: Handler\n animation: Animation\n\n private _stillFrameAccum = 0;\n\n private _needsRefresh = true\n private _needsRefreshHover = true\n\n /**\n * If theme is dark mode. It will determine the color strategy for labels.\n */\n private _darkMode = false;\n\n private _backgroundColor: string | GradientObject | PatternObject;\n\n constructor(id: number, dom: HTMLElement, opts?: ZRenderInitOpt) {\n opts = opts || {};\n\n /**\n * @type {HTMLDomElement}\n */\n this.dom = dom;\n\n this.id = id;\n\n const self = this;\n const storage = new Storage();\n\n let rendererType = opts.renderer;\n // TODO WebGL\n if (useVML) {\n if (!painterCtors.vml) {\n throw new Error('You need to require \\'zrender/vml/vml\\' to support IE8');\n }\n rendererType = 'vml';\n }\n else if (!rendererType) {\n rendererType = 'canvas';\n }\n if (!painterCtors[rendererType]) {\n throw new Error(`Renderer '${rendererType}' is not imported. Please import it first.`);\n }\n const painter = new painterCtors[rendererType](dom, storage, opts, id);\n\n this.storage = storage;\n this.painter = painter;\n\n const handerProxy = (!env.node && !env.worker)\n ? new HandlerProxy(painter.getViewportRoot(), painter.root)\n : null;\n this.handler = new Handler(storage, painter, handerProxy, painter.root);\n\n /**\n * @type {module:zrender/animation/Animation}\n */\n this.animation = new Animation({\n stage: {\n update: zrUtil.bind(this.flush, this)\n }\n });\n this.animation.start();\n }\n\n /**\n * 添加元素\n */\n add(el: Element) {\n this.storage.addRoot(el);\n el.addSelfToZr(this);\n this._needsRefresh = true;\n }\n\n /**\n * 删除元素\n */\n remove(el: Element) {\n this.storage.delRoot(el);\n el.removeSelfFromZr(this);\n this._needsRefresh = true;\n }\n\n /**\n * Change configuration of layer\n */\n configLayer(zLevel: number, config: LayerConfig) {\n if (this.painter.configLayer) {\n this.painter.configLayer(zLevel, config);\n }\n this._needsRefresh = true;\n }\n\n /**\n * Set background color\n */\n setBackgroundColor(backgroundColor: string | GradientObject | PatternObject) {\n if (this.painter.setBackgroundColor) {\n this.painter.setBackgroundColor(backgroundColor);\n }\n this._needsRefresh = true;\n this._backgroundColor = backgroundColor;\n this._darkMode = isDarkMode(backgroundColor);\n }\n\n getBackgroundColor() {\n return this._backgroundColor;\n }\n\n /**\n * Force to set dark mode\n */\n setDarkMode(darkMode: boolean) {\n this._darkMode = darkMode;\n }\n\n isDarkMode() {\n return this._darkMode;\n }\n\n /**\n * Repaint the canvas immediately\n */\n refreshImmediately(fromInside?: boolean) {\n // const start = new Date();\n\n if (!fromInside) {\n // Update animation if refreshImmediately is invoked from outside.\n this.animation.update();\n }\n\n // Clear needsRefresh ahead to avoid something wrong happens in refresh\n // Or it will cause zrender refreshes again and again.\n this._needsRefresh = false;\n this.painter.refresh();\n // Avoid trigger zr.refresh in Element#beforeUpdate hook\n this._needsRefresh = false;\n\n // const end = new Date();\n // const log = document.getElementById('log');\n // if (log) {\n // log.innerHTML = log.innerHTML + '
' + (end - start);\n // }\n }\n\n /**\n * Mark and repaint the canvas in the next frame of browser\n */\n refresh() {\n this._needsRefresh = true;\n // Active the animation again.\n this.animation.start();\n }\n\n /**\n * Perform all refresh\n */\n flush() {\n let triggerRendered;\n\n if (this._needsRefresh) {\n triggerRendered = true;\n this.refreshImmediately(true);\n }\n\n if (this._needsRefreshHover) {\n triggerRendered = true;\n this.refreshHoverImmediately();\n }\n\n if (triggerRendered) {\n this._stillFrameAccum = 0;\n this.trigger('rendered');\n }\n else {\n this._stillFrameAccum++;\n\n // Stop the animiation after still for 10 frames.\n if (this._stillFrameAccum > 10) {\n this.animation.stop();\n }\n }\n }\n\n /**\n * Wake up animation loop. But not render.\n */\n wakeUp() {\n this.animation.start();\n // Reset the frame count.\n this._stillFrameAccum = 0;\n }\n\n /**\n * Add element to hover layer\n */\n addHover(el: Displayable) {\n // deprecated.\n }\n\n /**\n * Add element from hover layer\n */\n removeHover(el: Path | TSpan | ZRImage) {\n // deprecated.\n }\n\n /**\n * Clear all hover elements in hover layer\n */\n clearHover() {\n // deprecated.\n }\n\n /**\n * Refresh hover in next frame\n */\n refreshHover() {\n this._needsRefreshHover = true;\n }\n\n /**\n * Refresh hover immediately\n */\n refreshHoverImmediately() {\n this._needsRefreshHover = false;\n if (this.painter.refreshHover) {\n this.painter.refreshHover();\n }\n }\n\n /**\n * Resize the canvas.\n * Should be invoked when container size is changed\n */\n resize(opts?: {\n width?: number| string\n height?: number | string\n }) {\n opts = opts || {};\n this.painter.resize(opts.width, opts.height);\n this.handler.resize();\n }\n\n /**\n * Stop and clear all animation immediately\n */\n clearAnimation() {\n this.animation.clear();\n }\n\n /**\n * Get container width\n */\n getWidth(): number {\n return this.painter.getWidth();\n }\n\n /**\n * Get container height\n */\n getHeight(): number {\n return this.painter.getHeight();\n }\n\n /**\n * Export the canvas as Base64 URL\n * @param {string} type\n * @param {string} [backgroundColor='#fff']\n * @return {string} Base64 URL\n */\n // toDataURL: function(type, backgroundColor) {\n // return this.painter.getRenderedCanvas({\n // backgroundColor: backgroundColor\n // }).toDataURL(type);\n // },\n\n /**\n * Converting a path to image.\n * It has much better performance of drawing image rather than drawing a vector path.\n */\n pathToImage(e: Path, dpr: number) {\n if (this.painter.pathToImage) {\n return this.painter.pathToImage(e, dpr);\n }\n }\n\n /**\n * Set default cursor\n * @param cursorStyle='default' 例如 crosshair\n */\n setCursorStyle(cursorStyle: string) {\n this.handler.setCursorStyle(cursorStyle);\n }\n\n /**\n * Find hovered element\n * @param x\n * @param y\n * @return {target, topTarget}\n */\n findHover(x: number, y: number): {\n target: Displayable\n topTarget: Displayable\n } {\n return this.handler.findHover(x, y);\n }\n\n on(eventName: ElementEventName, eventHandler: ElementEventCallback, context?: Ctx): this\n on(eventName: string, eventHandler: EventCallback, context?: Ctx): this\n // eslint-disable-next-line max-len\n on(eventName: string, eventHandler: EventCallback | EventCallback, context?: Ctx): this {\n this.handler.on(eventName, eventHandler, context);\n return this;\n }\n\n /**\n * Unbind event\n * @param eventName Event name\n * @param eventHandler Handler function\n */\n // eslint-disable-next-line max-len\n off(eventName?: string, eventHandler?: EventCallback | EventCallback) {\n this.handler.off(eventName, eventHandler);\n }\n\n /**\n * Trigger event manually\n *\n * @param eventName Event name\n * @param event Event object\n */\n trigger(eventName: string, event?: unknown) {\n this.handler.trigger(eventName, event);\n }\n\n\n /**\n * Clear all objects and the canvas.\n */\n clear() {\n const roots = this.storage.getRoots();\n for (let i = 0; i < roots.length; i++) {\n if (roots[i] instanceof Group) {\n roots[i].removeSelfFromZr(this);\n }\n }\n this.storage.delAllRoots();\n this.painter.clear();\n }\n\n /**\n * Dispose self.\n */\n dispose() {\n this.animation.stop();\n\n this.clear();\n this.storage.dispose();\n this.painter.dispose();\n this.handler.dispose();\n\n this.animation =\n this.storage =\n this.painter =\n this.handler = null;\n\n delInstance(this.id);\n }\n}\n\n\nexport interface ZRenderInitOpt {\n renderer?: string // 'canvas' or 'svg\n devicePixelRatio?: number\n width?: number | string // 10, 10px, 'auto'\n height?: number | string\n}\n\n/**\n * Initializing a zrender instance\n */\nexport function init(dom: HTMLElement, opts?: ZRenderInitOpt) {\n const zr = new ZRender(zrUtil.guid(), dom, opts);\n instances[zr.id] = zr;\n return zr;\n}\n\n/**\n * Dispose zrender instance\n */\nexport function dispose(zr: ZRender) {\n zr.dispose();\n}\n\n/**\n * Dispose all zrender instances\n */\nexport function disposeAll() {\n for (let key in instances) {\n if (instances.hasOwnProperty(key)) {\n instances[key].dispose();\n }\n }\n instances = {};\n}\n\n/**\n * Get zrender instance by id\n */\nexport function getInstance(id: number): ZRender {\n return instances[id];\n}\n\nexport function registerPainter(name: string, Ctor: PainterBaseCtor) {\n painterCtors[name] = Ctor;\n}\n\n/**\n * @type {string}\n */\nexport const version = '5.0.0-alpha.1';\n\n\nexport interface ZRenderType extends ZRender {};","import { LinearGradientObject } from '../graphic/LinearGradient';\nimport { RadialGradientObject } from '../graphic/RadialGradient';\nimport { GradientObject } from '../graphic/Gradient';\nimport { RectLike } from '../core/BoundingRect';\n\nexport function createLinearGradient(\n this: void,\n ctx: CanvasRenderingContext2D,\n obj: LinearGradientObject,\n rect: RectLike\n) {\n let x = obj.x == null ? 0 : obj.x;\n let x2 = obj.x2 == null ? 1 : obj.x2;\n let y = obj.y == null ? 0 : obj.y;\n let y2 = obj.y2 == null ? 0 : obj.y2;\n\n if (!obj.global) {\n x = x * rect.width + rect.x;\n x2 = x2 * rect.width + rect.x;\n y = y * rect.height + rect.y;\n y2 = y2 * rect.height + rect.y;\n }\n\n // Fix NaN when rect is Infinity\n x = isNaN(x) ? 0 : x;\n x2 = isNaN(x2) ? 1 : x2;\n y = isNaN(y) ? 0 : y;\n y2 = isNaN(y2) ? 0 : y2;\n\n const canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n\n return canvasGradient;\n}\n\nexport function createRadialGradient(\n this: void,\n ctx: CanvasRenderingContext2D,\n obj: RadialGradientObject,\n rect: RectLike\n) {\n const width = rect.width;\n const height = rect.height;\n const min = Math.min(width, height);\n\n let x = obj.x == null ? 0.5 : obj.x;\n let y = obj.y == null ? 0.5 : obj.y;\n let r = obj.r == null ? 0.5 : obj.r;\n if (!obj.global) {\n x = x * width + rect.x;\n y = y * height + rect.y;\n r = r * min;\n }\n\n const canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n\n return canvasGradient;\n}\n\nexport function getCanvasGradient(this: void, ctx: CanvasRenderingContext2D, obj: GradientObject, rect: RectLike) {\n // TODO Cache?\n const canvasGradient = obj.type === 'radial'\n ? createRadialGradient(ctx, obj as RadialGradientObject, rect)\n : createLinearGradient(ctx, obj as LinearGradientObject, rect);\n\n const colorStops = obj.colorStops;\n for (let i = 0; i < colorStops.length; i++) {\n canvasGradient.addColorStop(\n colorStops[i].offset, colorStops[i].color\n );\n }\n return canvasGradient;\n}\n","import Displayable, { DEFAULT_COMMON_STYLE } from '../graphic/Displayable';\nimport PathProxy from '../core/PathProxy';\nimport { GradientObject } from '../graphic/Gradient';\nimport { PatternObject } from '../graphic/Pattern';\nimport { LinearGradientObject } from '../graphic/LinearGradient';\nimport { RadialGradientObject } from '../graphic/RadialGradient';\nimport { ZRCanvasRenderingContext } from '../core/types';\nimport BoundingRect from '../core/BoundingRect';\nimport { createOrUpdateImage, isImageReady } from '../graphic/helper/image';\nimport { getCanvasGradient } from './helper';\nimport Path, { PathStyleProps } from '../graphic/Path';\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\nimport TSpan, {TSpanStyleProps} from '../graphic/TSpan';\nimport { DEFAULT_FONT } from '../contain/text';\nimport { IncrementalDisplayable } from '../export';\nimport { MatrixArray } from '../core/matrix';\nimport { map } from '../core/util';\n\nconst pathProxyForDraw = new PathProxy(true);\n\n// Not use el#hasStroke because style may be different.\nfunction styleHasStroke(style: PathStyleProps) {\n const stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n}\n\nfunction styleHasFill(style: PathStyleProps) {\n const fill = style.fill;\n return fill != null && fill !== 'none';\n}\nfunction doFillPath(ctx: CanvasRenderingContext2D, style: PathStyleProps) {\n if (style.fillOpacity != null && style.fillOpacity !== 1) {\n const originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.fillOpacity * style.opacity;\n ctx.fill();\n // Set back globalAlpha\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.fill();\n }\n}\n\nfunction doStrokePath(ctx: CanvasRenderingContext2D, style: PathStyleProps) {\n if (style.strokeOpacity != null && style.strokeOpacity !== 1) {\n const originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.strokeOpacity * style.opacity;\n ctx.stroke();\n // Set back globalAlpha\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.stroke();\n }\n}\n\nexport function createCanvasPattern(\n this: void,\n ctx: CanvasRenderingContext2D,\n pattern: PatternObject,\n el: {dirty: () => void}\n): CanvasPattern {\n const image = createOrUpdateImage(pattern.image, pattern.__image, el);\n if (isImageReady(image)) {\n return ctx.createPattern(image, pattern.repeat || 'repeat');\n }\n}\n\n// Draw Path Elements\nfunction brushPath(ctx: CanvasRenderingContext2D, el: Path, style: PathStyleProps, inBatch: boolean) {\n let hasStroke = styleHasStroke(style);\n let hasFill = styleHasFill(style);\n\n const strokePercent = style.strokePercent;\n const strokePart = strokePercent < 1;\n\n // TODO Reduce path memory cost.\n const firstDraw = !el.path;\n // Create path for each element when:\n // 1. Element has interactions.\n // 2. Element draw part of the line.\n if ((!el.silent || strokePart) && firstDraw) {\n el.createPathProxy();\n }\n\n const path = el.path || pathProxyForDraw;\n\n if (!inBatch) {\n const fill = style.fill;\n const stroke = style.stroke;\n\n const hasFillGradient = hasFill && !!(fill as GradientObject).colorStops;\n const hasStrokeGradient = hasStroke && !!(stroke as GradientObject).colorStops;\n const hasFillPattern = hasFill && !!(fill as PatternObject).image;\n const hasStrokePattern = hasStroke && !!(stroke as PatternObject).image;\n\n let fillGradient;\n let strokeGradient;\n let fillPattern;\n let strokePattern;\n let rect;\n if (hasFillGradient || hasStrokeGradient) {\n rect = el.getBoundingRect();\n }\n // Update gradient because bounding rect may changed\n if (hasFillGradient) {\n fillGradient = el.__dirty\n ? getCanvasGradient(ctx, fill as (LinearGradientObject | RadialGradientObject), rect)\n : el.__canvasFillGradient;\n // No need to clear cache when fill is not gradient.\n // It will always been updated when fill changed back to gradient.\n el.__canvasFillGradient = fillGradient;\n }\n if (hasStrokeGradient) {\n strokeGradient = el.__dirty\n ? getCanvasGradient(ctx, stroke as (LinearGradientObject | RadialGradientObject), rect)\n : el.__canvasStrokeGradient;\n el.__canvasStrokeGradient = strokeGradient;\n }\n if (hasFillPattern) {\n // Pattern might be null if image not ready (even created from dataURI)\n fillPattern = (el.__dirty || !el.__canvasFillPattern)\n ? createCanvasPattern(ctx, fill as PatternObject, el)\n : el.__canvasFillPattern;\n el.__canvasFillPattern = fillPattern;\n }\n if (hasStrokePattern) {\n // Pattern might be null if image not ready (even created from dataURI)\n strokePattern = (el.__dirty || !el.__canvasStrokePattern)\n ? createCanvasPattern(ctx, stroke as PatternObject, el)\n : el.__canvasStrokePattern;\n el.__canvasStrokePattern = fillPattern;\n }\n // Use the gradient or pattern\n if (hasFillGradient) {\n // PENDING If may have affect the state\n ctx.fillStyle = fillGradient;\n }\n else if (hasFillPattern) {\n if (fillPattern) { // createCanvasPattern may return false if image is not ready.\n ctx.fillStyle = fillPattern;\n }\n else {\n // Don't fill if image is not ready\n hasFill = false;\n }\n }\n if (hasStrokeGradient) {\n ctx.strokeStyle = strokeGradient;\n }\n else if (hasStrokePattern) {\n if (strokePattern) {\n ctx.strokeStyle = strokePattern;\n }\n else {\n // Don't stroke if image is not ready\n hasStroke = false;\n }\n }\n }\n\n let lineDash = style.lineDash;\n let lineDashOffset = style.lineDashOffset;\n\n const ctxLineDash = !!ctx.setLineDash;\n\n // Update path sx, sy\n const scale = el.getGlobalScale();\n path.setScale(scale[0], scale[1], el.segmentIgnoreThreshold);\n\n if (lineDash) {\n const lineScale = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale && lineScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale;\n });\n lineDashOffset /= lineScale;\n }\n }\n\n let needsRebuild = true;\n // Proxy context\n // Rebuild path in following 2 cases\n // 1. Path is dirty\n // 2. Path needs javascript implemented lineDash stroking.\n // In this case, lineDash information will not be saved in PathProxy\n if (firstDraw || (el.__dirty & Path.SHAPE_CHANGED_BIT)\n || (lineDash && !ctxLineDash && hasStroke)\n ) {\n path.setDPR((ctx as any).dpr);\n if (strokePart) {\n // Use rebuildPath for percent stroke, so no context.\n path.setContext(null);\n }\n else {\n path.setContext(ctx);\n needsRebuild = false;\n }\n path.reset();\n\n // Setting line dash before build path\n if (lineDash && !ctxLineDash) {\n path.setLineDash(lineDash);\n path.setLineDashOffset(lineDashOffset);\n }\n\n el.buildPath(path, el.shape, inBatch);\n path.toStatic();\n\n // Clear path dirty flag\n el.pathUpdated();\n }\n\n // Not support separate fill and stroke. For the compatibility of SVG\n if (needsRebuild) {\n path.rebuildPath(ctx, strokePart ? strokePercent : 1);\n }\n\n if (lineDash && ctxLineDash) {\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n }\n\n if (!inBatch) {\n if (style.strokeFirst) {\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n if (hasFill) {\n doFillPath(ctx, style);\n }\n }\n else {\n if (hasFill) {\n doFillPath(ctx, style);\n }\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n }\n }\n\n if (lineDash && ctxLineDash) {\n // PENDING\n // Remove lineDash\n ctx.setLineDash([]);\n }\n}\n\n// Draw Image Elements\nfunction brushImage(ctx: CanvasRenderingContext2D, el: ZRImage, style: ImageStyleProps) {\n const image = el.__image = createOrUpdateImage(\n style.image,\n el.__image,\n el,\n el.onload\n );\n\n if (!image || !isImageReady(image)) {\n return;\n }\n\n const x = style.x || 0;\n const y = style.y || 0;\n let width = style.width;\n let height = style.height;\n const aspect = image.width / image.height;\n if (width == null && height != null) {\n // Keep image/height ratio\n width = height * aspect;\n }\n else if (height == null && width != null) {\n height = width / aspect;\n }\n else if (width == null && height == null) {\n width = image.width;\n height = image.height;\n }\n\n if (style.sWidth && style.sHeight) {\n const sx = style.sx || 0;\n const sy = style.sy || 0;\n ctx.drawImage(\n image,\n sx, sy, style.sWidth, style.sHeight,\n x, y, width, height\n );\n }\n else if (style.sx && style.sy) {\n const sx = style.sx;\n const sy = style.sy;\n const sWidth = width - sx;\n const sHeight = height - sy;\n ctx.drawImage(\n image,\n sx, sy, sWidth, sHeight,\n x, y, width, height\n );\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n}\n\n// Draw Text Elements\nfunction brushText(ctx: CanvasRenderingContext2D, el: TSpan, style: TSpanStyleProps) {\n\n let text = style.text;\n // Convert to string\n text != null && (text += '');\n\n if (text) {\n ctx.font = style.font || DEFAULT_FONT;\n ctx.textAlign = style.textAlign;\n ctx.textBaseline = style.textBaseline;\n if (ctx.setLineDash) {\n let lineDash = style.lineDash;\n let lineDashOffset = style.lineDashOffset;\n if (lineDash) {\n const lineScale = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale && lineScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale;\n });\n lineDashOffset /= lineScale;\n }\n }\n ctx.setLineDash(lineDash || []);\n ctx.lineDashOffset = lineDashOffset;\n }\n\n if (style.strokeFirst) {\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n }\n else {\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n }\n }\n}\n\nconst SHADOW_NUMBER_PROPS = ['shadowBlur', 'shadowOffsetX', 'shadowOffsetY'] as const;\nconst STROKE_PROPS = [\n ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n] as const;\n\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\n// type ShadowPropNames = typeof SHADOW_PROPS[number][0];\n// type StrokePropNames = typeof STROKE_PROPS[number][0];\n// type DrawPropNames = typeof DRAW_PROPS[number][0];\n\nfunction bindCommonProps(\n ctx: CanvasRenderingContext2D,\n style: AllStyleOption,\n prevStyle: AllStyleOption,\n forceSetAll: boolean,\n scope: BrushScope\n): boolean {\n let styleChanged = false;\n\n if (!forceSetAll) {\n prevStyle = prevStyle || {};\n\n // Shared same style.\n if (style === prevStyle) {\n return false;\n }\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalAlpha = style.opacity == null ? DEFAULT_COMMON_STYLE.opacity : style.opacity;\n }\n\n if (forceSetAll || style.blend !== prevStyle.blend) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalCompositeOperation = style.blend || DEFAULT_COMMON_STYLE.blend;\n }\n for (let i = 0; i < SHADOW_NUMBER_PROPS.length; i++) {\n const propName = SHADOW_NUMBER_PROPS[i];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n // FIXME Invalid property value will cause style leak from previous element.\n ctx[propName] = (ctx as ZRCanvasRenderingContext).dpr * (style[propName] || 0);\n }\n }\n if (forceSetAll || style.shadowColor !== prevStyle.shadowColor) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.shadowColor = style.shadowColor || DEFAULT_COMMON_STYLE.shadowColor;\n }\n return styleChanged;\n}\n\nfunction bindPathAndTextCommonStyle(\n ctx: CanvasRenderingContext2D,\n el: TSpan | Path,\n prevEl: TSpan | Path,\n forceSetAll: boolean,\n scope: BrushScope\n) {\n const style = getStyle(el, scope.inHover);\n const prevStyle = forceSetAll\n ? null\n : (prevEl && getStyle(prevEl, scope.inHover) || {});\n // Shared same style. prevStyle will be null if forceSetAll.\n if (style === prevStyle) {\n return false;\n }\n\n let styleChanged = bindCommonProps(ctx, style, prevStyle, forceSetAll, scope);\n\n if (forceSetAll || style.fill !== prevStyle.fill) {\n if (!styleChanged) {\n // Flush before set\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.fillStyle = style.fill as string;\n }\n if (forceSetAll || style.stroke !== prevStyle.stroke) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.strokeStyle = style.stroke as string;\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n }\n if (el.hasStroke()) {\n const lineWidth = style.lineWidth;\n const newLineWidth = lineWidth / (\n (style.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1\n );\n if (ctx.lineWidth !== newLineWidth) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.lineWidth = newLineWidth;\n }\n }\n\n for (let i = 0; i < STROKE_PROPS.length; i++) {\n const prop = STROKE_PROPS[i];\n const propName = prop[0];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n // FIXME Invalid property value will cause style leak from previous element.\n (ctx as any)[propName] = style[propName] || prop[1];\n }\n }\n\n return styleChanged;\n}\n\nfunction bindImageStyle(\n ctx: CanvasRenderingContext2D,\n el: ZRImage,\n prevEl: ZRImage,\n // forceSetAll must be true if prevEl is null\n forceSetAll: boolean,\n scope: BrushScope\n) {\n return bindCommonProps(\n ctx,\n getStyle(el, scope.inHover),\n prevEl && getStyle(prevEl, scope.inHover),\n forceSetAll,\n scope\n );\n}\n\nfunction setContextTransform(ctx: CanvasRenderingContext2D, el: Displayable) {\n const m = el.transform;\n const dpr = (ctx as ZRCanvasRenderingContext).dpr || 1;\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 }\n else {\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n}\n\n\nconst tmpRect = new BoundingRect(0, 0, 0, 0);\nconst viewRect = new BoundingRect(0, 0, 0, 0);\nfunction isDisplayableCulled(el: Displayable, width: number, height: number) {\n tmpRect.copy(el.getBoundingRect());\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\n\nfunction isClipPathChanged(clipPaths: Path[], prevClipPaths: Path[]): boolean {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (clipPaths === prevClipPaths || (!clipPaths && !prevClipPaths)) {\n return false;\n }\n if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\n return true;\n }\n for (let i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n return false;\n}\n\nfunction updateClipStatus(clipPaths: Path[], ctx: CanvasRenderingContext2D, scope: BrushScope) {\n let allClipped = false;\n for (let i = 0; i < clipPaths.length; i++) {\n const clipPath = clipPaths[i];\n // Ignore draw following elements if clipPath has zero area.\n allClipped = allClipped || clipPath.isZeroArea();\n\n setContextTransform(ctx, clipPath);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip();\n }\n scope.allClipped = allClipped;\n}\n\nfunction isTransformChanged(m0: MatrixArray, m1: MatrixArray): boolean {\n if (m0 && m1) {\n return m0[0] !== m1[0]\n || m0[1] !== m1[1]\n || m0[2] !== m1[2]\n || m0[3] !== m1[3]\n || m0[4] !== m1[4]\n || m0[5] !== m1[5];\n }\n else if (!m0 && !m1) { // All identity matrix.\n return false;\n }\n\n return true;\n}\n\nconst DRAW_TYPE_PATH = 1;\nconst DRAW_TYPE_IMAGE = 2;\nconst DRAW_TYPE_TEXT = 3;\nconst DRAW_TYPE_INCREMENTAL = 4;\n\nexport type BrushScope = {\n inHover: boolean\n\n // width / height of viewport\n viewWidth: number\n viewHeight: number\n\n // Status for clipping\n prevElClipPaths?: Path[]\n prevEl?: Displayable\n allClipped?: boolean // If the whole element can be clipped\n\n // Status for batching\n batchFill?: string\n batchStroke?: string\n\n lastDrawType?: number\n}\n\n// If path can be batched\nfunction canPathBatch(style: PathStyleProps) {\n\n const hasFill = styleHasFill(style);\n const hasStroke = styleHasStroke(style);\n\n return !(\n // Line dash is dynamically set in brush function.\n style.lineDash\n // Can't batch if element is both set fill and stroke. Or both not set\n || !(+hasFill ^ +hasStroke)\n // Can't batch if element is drawn with gradient or pattern.\n || (hasFill && typeof style.fill !== 'string')\n || (hasStroke && typeof style.stroke !== 'string')\n // Can't batch if element only stroke part of line.\n || style.strokePercent < 1\n // Has stroke or fill opacity\n || style.strokeOpacity < 1\n || style.fillOpacity < 1\n );\n}\n\nfunction flushPathDrawn(ctx: CanvasRenderingContext2D, scope: BrushScope) {\n // Force flush all after drawn last element\n scope.batchFill && ctx.fill();\n scope.batchStroke && ctx.stroke();\n scope.batchFill = '';\n scope.batchStroke = '';\n}\n\nfunction getStyle(el: Displayable, inHover?: boolean) {\n return inHover ? (el.__hoverStyle || el.style) : el.style;\n}\n\n// Brush different type of elements.\nexport function brush(\n ctx: CanvasRenderingContext2D,\n el: Displayable,\n scope: BrushScope,\n isLast: boolean\n) {\n const m = el.transform;\n\n if (\n // Ignore invisible element\n el.invisible\n // Ignore transparent element\n || el.style.opacity === 0\n // Ignore culled element\n || (el.culling && isDisplayableCulled(el, scope.viewWidth, scope.viewHeight))\n // Ignore scale 0 element, in some environment like node-canvas\n // Draw a scale 0 element can cause all following draw wrong\n // And setTransform with scale 0 will cause set back transform failed.\n || (m && !m[0] && !m[3])\n ) {\n // Needs to mark el rendered.\n // Or this element will always been rendered in progressive rendering.\n el.__dirty = 0;\n return;\n }\n\n // HANDLE CLIPPING\n const clipPaths = el.__clipPaths;\n const prevElClipPaths = scope.prevElClipPaths;\n\n let forceSetTransform = false;\n let forceSetStyle = false;\n // Optimize when clipping on group with several elements\n if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n // If has previous clipping state, restore from it\n if (prevElClipPaths && prevElClipPaths.length) {\n // Flush restore\n flushPathDrawn(ctx, scope);\n\n ctx.restore();\n // Must set all style and transform because context changed by restore\n forceSetStyle = forceSetTransform = true;\n\n scope.prevElClipPaths = null;\n scope.allClipped = false;\n // Reset prevEl since context has been restored\n scope.prevEl = null;\n }\n // New clipping state\n if (clipPaths && clipPaths.length) {\n // Flush before clip\n flushPathDrawn(ctx, scope);\n\n ctx.save();\n updateClipStatus(clipPaths, ctx, scope);\n // Must set transform because it's changed when clip.\n forceSetTransform = true;\n }\n scope.prevElClipPaths = clipPaths;\n }\n\n // Not rendering elements if it's clipped by a zero area path.\n // Or it may cause bug on 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 // )\n if (scope.allClipped) {\n return;\n }\n\n // START BRUSH\n el.beforeBrush && el.beforeBrush();\n el.innerBeforeBrush();\n\n const prevEl = scope.prevEl;\n // TODO el type changed.\n if (!prevEl) {\n forceSetStyle = forceSetTransform = true;\n }\n\n let canBatchPath = el instanceof Path // Only path supports batch\n && el.autoBatch\n && canPathBatch(el.style);\n\n if (forceSetTransform || isTransformChanged(m, prevEl.transform)) {\n // Flush\n flushPathDrawn(ctx, scope);\n setContextTransform(ctx, el);\n }\n else if (!canBatchPath) {\n // Flush\n flushPathDrawn(ctx, scope);\n }\n\n const style = getStyle(el, scope.inHover);\n if (el instanceof Path) {\n // PENDING do we need to rebind all style if displayable type changed?\n if (scope.lastDrawType !== DRAW_TYPE_PATH) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_PATH;\n }\n\n bindPathAndTextCommonStyle(ctx, el as Path, prevEl as Path, forceSetStyle, scope);\n // Begin path at start\n if (!canBatchPath || (!scope.batchFill && !scope.batchStroke)) {\n ctx.beginPath();\n }\n brushPath(ctx, el as Path, style, canBatchPath);\n\n if (canBatchPath) {\n scope.batchFill = style.fill as string || '';\n scope.batchStroke = style.stroke as string || '';\n }\n }\n else {\n if (el instanceof TSpan) {\n if (scope.lastDrawType !== DRAW_TYPE_TEXT) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_TEXT;\n }\n\n bindPathAndTextCommonStyle(ctx, el as TSpan, prevEl as TSpan, forceSetStyle, scope);\n brushText(ctx, el as TSpan, style);\n }\n else if (el instanceof ZRImage) {\n if (scope.lastDrawType !== DRAW_TYPE_IMAGE) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_IMAGE;\n }\n\n bindImageStyle(ctx, el as ZRImage, prevEl as ZRImage, forceSetStyle, scope);\n brushImage(ctx, el as ZRImage, style);\n }\n else if (el instanceof IncrementalDisplayable) {\n if (scope.lastDrawType !== DRAW_TYPE_INCREMENTAL) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_INCREMENTAL;\n }\n\n brushIncremental(ctx, el, scope);\n }\n\n }\n\n if (canBatchPath && isLast) {\n flushPathDrawn(ctx, scope);\n }\n\n el.innerAfterBrush();\n el.afterBrush && el.afterBrush();\n\n scope.prevEl = el;\n\n // Mark as painted.\n el.__dirty = 0;\n}\n\nfunction brushIncremental(\n ctx: CanvasRenderingContext2D,\n el: IncrementalDisplayable,\n scope: BrushScope\n) {\n let displayables = el.getDisplayables();\n let temporalDisplayables = el.getTemporalDisplayables();\n // Provide an inner scope.\n // Save current context and restore after brushed.\n ctx.save();\n let innerScope: BrushScope = {\n prevElClipPaths: null,\n prevEl: null,\n allClipped: false,\n viewWidth: scope.viewWidth,\n viewHeight: scope.viewHeight,\n inHover: scope.inHover\n };\n let i;\n let len;\n // Render persistant displayables.\n for (i = el.getCursor(), len = displayables.length; i < len; i++) {\n const displayable = displayables[i];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i === len - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n // Render temporary displayables.\n for (let i = 0, len = temporalDisplayables.length - 1; i < len; i++) {\n const displayable = temporalDisplayables[i];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i === len - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n el.clearTemporalDisplayables();\n el.notClear = true;\n\n ctx.restore();\n}\n","import * as util from '../core/util';\nimport {devicePixelRatio} from '../config';\nimport { PatternObject } from '../graphic/Pattern';\nimport CanvasPainter from './Painter';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ZRCanvasRenderingContext } from '../core/types';\nimport Eventful from '../core/Eventful';\nimport { ElementEventCallback } from '../Element';\nimport { getCanvasGradient } from './helper';\nimport { createCanvasPattern } from './graphic';\n\nfunction returnFalse() {\n return false;\n}\n\nfunction createDom(id: string, painter: CanvasPainter, dpr: number) {\n const newDom = util.createCanvas();\n const width = painter.getWidth();\n const height = painter.getHeight();\n\n const newDomStyle = newDom.style;\n if (newDomStyle) { // In node or some other non-browser environment\n newDomStyle.position = 'absolute';\n newDomStyle.left = '0';\n newDomStyle.top = '0';\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n\n newDom.setAttribute('data-zr-dom-id', id);\n }\n\n newDom.width = width * dpr;\n newDom.height = height * dpr;\n\n return newDom;\n}\n\nexport interface LayerConfig {\n // 每次清空画布的颜色\n clearColor?: string | GradientObject | PatternObject\n // 是否开启动态模糊\n motionBlur?: boolean\n // 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n lastFrameAlpha?: number\n};\n\nexport default class Layer extends Eventful {\n\n id: string\n\n dom: HTMLCanvasElement\n domBack: HTMLCanvasElement\n\n ctx: CanvasRenderingContext2D\n ctxBack: CanvasRenderingContext2D\n\n painter: CanvasPainter\n\n // Configs\n /**\n * 每次清空画布的颜色\n */\n clearColor: string | GradientObject | PatternObject\n /**\n * 是否开启动态模糊\n */\n motionBlur = false\n /**\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n */\n lastFrameAlpha = 0.7\n /**\n * Layer dpr\n */\n dpr = 1\n\n /**\n * Virtual layer will not be inserted into dom.\n */\n virtual = false\n\n config = {}\n\n incremental = false\n\n zlevel = 0\n\n __painter: CanvasPainter\n\n __dirty = true\n\n __used = false\n\n __drawIndex = 0\n __startIndex = 0\n __endIndex = 0\n\n __builtin__: boolean\n\n constructor(id: string | HTMLCanvasElement, painter: CanvasPainter, dpr?: number) {\n super();\n\n let dom;\n dpr = dpr || devicePixelRatio;\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n }\n // Not using isDom because in node it will return false\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n this.id = id as string;\n this.dom = dom;\n\n const domStyle = dom.style;\n if (domStyle) { // Not in node\n dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n domStyle.webkitUserSelect = 'none';\n domStyle.userSelect = 'none';\n domStyle.webkitTapHighlightColor = 'rgba(0,0,0,0)';\n (domStyle as any)['-webkit-touch-callout'] = 'none';\n domStyle.padding = '0';\n domStyle.margin = '0';\n domStyle.borderWidth = '0';\n }\n\n this.domBack = null;\n this.ctxBack = null;\n\n this.painter = painter;\n\n this.config = null;\n\n this.dpr = dpr;\n }\n\n getElementCount() {\n return this.__endIndex - this.__startIndex;\n }\n\n initContext() {\n this.ctx = this.dom.getContext('2d');\n (this.ctx as ZRCanvasRenderingContext).dpr = this.dpr;\n }\n\n createBackBuffer() {\n const dpr = this.dpr;\n\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n\n resize(width: number, height: number) {\n const dpr = this.dpr;\n\n const dom = this.dom;\n const domStyle = dom.style;\n const domBack = this.domBack;\n\n if (domStyle) {\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n }\n\n dom.width = width * dpr;\n dom.height = height * dpr;\n\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n }\n\n /**\n * 清空该层画布\n */\n clear(clearAll?: boolean, clearColor?: string | GradientObject | PatternObject) {\n const dom = this.dom;\n const ctx = this.ctx;\n const width = dom.width;\n const height = dom.height;\n\n clearColor = clearColor || this.clearColor;\n const haveMotionBLur = this.motionBlur && !clearAll;\n const lastFrameAlpha = this.lastFrameAlpha;\n\n const dpr = this.dpr;\n const self = this;\n\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(\n dom, 0, 0,\n width / dpr,\n height / dpr\n );\n }\n\n ctx.clearRect(0, 0, width, height);\n if (clearColor && clearColor !== 'transparent') {\n let clearColorGradientOrPattern;\n // Gradient\n if (util.isGradientObject(clearColor)) {\n // Cache canvas gradient\n clearColorGradientOrPattern = clearColor.__canvasGradient\n || getCanvasGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n\n clearColor.__canvasGradient = clearColorGradientOrPattern;\n }\n // Pattern\n else if (util.isPatternObject(clearColor)) {\n clearColorGradientOrPattern = createCanvasPattern(\n ctx, clearColor, {\n dirty: function () {\n // TODO\n self.__painter.refresh();\n }\n }\n );\n }\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || (clearColor as string);\n ctx.fillRect(0, 0, width, height);\n ctx.restore();\n }\n\n if (haveMotionBLur) {\n const domBack = this.domBack;\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, 0, 0, width, height);\n ctx.restore();\n }\n }\n\n // Iterface of refresh\n refresh: (clearColor?: string | GradientObject | PatternObject) => void\n\n // Interface of renderToCanvas in getRenderedCanvas\n renderToCanvas: (ctx: CanvasRenderingContext2D) => void\n\n\n // Events\n onclick: ElementEventCallback\n ondblclick: ElementEventCallback\n onmouseover: ElementEventCallback\n onmouseout: ElementEventCallback\n onmousemove: ElementEventCallback\n onmousewheel: ElementEventCallback\n onmousedown: ElementEventCallback\n onmouseup: ElementEventCallback\n oncontextmenu: ElementEventCallback\n\n ondrag: ElementEventCallback\n ondragstart: ElementEventCallback\n ondragend: ElementEventCallback\n ondragenter: ElementEventCallback\n ondragleave: ElementEventCallback\n ondragover: ElementEventCallback\n ondrop: ElementEventCallback\n}","import {devicePixelRatio} from '../config';\nimport * as util from '../core/util';\nimport timsort from '../core/timsort';\nimport Layer, { LayerConfig } from './Layer';\nimport requestAnimationFrame from '../animation/requestAnimationFrame';\nimport ZRImage from '../graphic/Image';\nimport env from '../core/env';\nimport { Path, IncrementalDisplayable } from '../export';\nimport Displayable from '../graphic/Displayable';\nimport { WXCanvasRenderingContext, ZRCanvasRenderingContext } from '../core/types';\nimport { GradientObject } from '../graphic/Gradient';\nimport { PatternObject } from '../graphic/Pattern';\nimport Storage from '../Storage';\nimport { brush, BrushScope } from './graphic';\nimport { PainterBase } from '../PainterBase';\nimport Element from '../Element';\n\nconst HOVER_LAYER_ZLEVEL = 1e5;\nconst CANVAS_ZLEVEL = 314159;\n\nconst EL_AFTER_INCREMENTAL_INC = 0.01;\nconst INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val: string) {\n return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer: Layer) {\n if (!layer) {\n return false;\n }\n\n if (layer.__builtin__) {\n return true;\n }\n\n if (typeof (layer.resize) !== 'function'\n || typeof (layer.refresh) !== 'function'\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction createRoot(width: number, height: number) {\n const domRoot = document.createElement('div');\n\n // domRoot.onselectstart = returnFalse; // Avoid page selected\n domRoot.style.cssText = [\n 'position:relative',\n // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n // dom does not act as expected) when some of the parent dom has\n // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n // the canvas is not at the top part of the page.\n // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n // this `overflow:hidden` to avoid the bug.\n // 'overflow:hidden',\n 'width:' + width + 'px',\n 'height:' + height + 'px',\n 'padding:0',\n 'margin:0',\n 'border-width:0'\n ].join(';') + ';';\n\n return domRoot;\n}\n\ninterface CanvasPainterOption {\n devicePixelRatio?: number\n width?: number | string // Can be 10 / 10px / auto\n height?: number | string\n}\n\nexport default class CanvasPainter implements PainterBase {\n\n type = 'canvas'\n\n root: HTMLElement\n\n dpr: number\n\n storage: Storage\n\n private _singleCanvas: boolean\n\n private _opts: CanvasPainterOption\n\n private _zlevelList: number[] = []\n\n private _layers: {[key: number]: Layer} = {} // key is zlevel\n\n private _layerConfig: {[key: number]: LayerConfig} = {} // key is zlevel\n\n /**\n * zrender will do compositing when root is a canvas and have multiple zlevels.\n */\n private _needsManuallyCompositing = false\n\n private _width: number\n private _height: number\n\n private _domRoot: HTMLElement\n\n private _hoverlayer: Layer\n\n private _redrawId: number\n\n private _backgroundColor: string | GradientObject | PatternObject\n\n\n constructor(root: HTMLElement, storage: Storage, opts: CanvasPainterOption, id: number) {\n\n this.type = 'canvas';\n\n // In node environment using node-canvas\n const singleCanvas = !root.nodeName // In node ?\n || root.nodeName.toUpperCase() === 'CANVAS';\n\n this._opts = opts = util.extend({}, opts || {}) as CanvasPainterOption;\n\n /**\n * @type {number}\n */\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n /**\n * @type {boolean}\n * @private\n */\n this._singleCanvas = singleCanvas;\n /**\n * 绘图容器\n * @type {HTMLElement}\n */\n this.root = root;\n\n const rootStyle = root.style;\n\n if (rootStyle) {\n rootStyle.webkitTapHighlightColor = 'transparent';\n rootStyle.webkitUserSelect = 'none';\n rootStyle.userSelect = 'none';\n (rootStyle as any)['-webkit-touch-callout'] = 'none';\n\n root.innerHTML = '';\n }\n\n /**\n * @type {module:zrender/Storage}\n */\n this.storage = storage;\n\n const zlevelList: number[] = this._zlevelList;\n\n const layers = this._layers;\n\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n\n const domRoot = this._domRoot = createRoot(\n this._width, this._height\n );\n root.appendChild(domRoot);\n }\n else {\n const rootCanvas = root as HTMLCanvasElement;\n let width = rootCanvas.width;\n let height = rootCanvas.height;\n\n if (opts.width != null) {\n // TODO sting?\n width = opts.width as number;\n }\n if (opts.height != null) {\n // TODO sting?\n height = opts.height as number;\n }\n this.dpr = opts.devicePixelRatio || 1;\n\n // Use canvas width and height directly\n rootCanvas.width = width * this.dpr;\n rootCanvas.height = height * this.dpr;\n\n this._width = width;\n this._height = height;\n\n // Create layer if only one given canvas\n // Device can be specified to create a high dpi image.\n const mainLayer = new Layer(rootCanvas, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext();\n // FIXME Use canvas width and height\n // mainLayer.resize(width, height);\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL;\n // Not use common zlevel.\n zlevelList.push(CANVAS_ZLEVEL);\n\n this._domRoot = root;\n }\n }\n\n\n getType() {\n return 'canvas';\n }\n\n /**\n * If painter use a single canvas\n */\n isSingleCanvas() {\n return this._singleCanvas;\n }\n\n getViewportRoot() {\n return this._domRoot;\n }\n\n getViewportRootOffset() {\n const viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n }\n\n /**\n * 刷新\n * @param paintAll 强制绘制所有displayable\n */\n refresh(paintAll?: boolean) {\n\n const list = this.storage.getDisplayList(true);\n\n const zlevelList = this._zlevelList;\n\n this._redrawId = Math.random();\n\n this._paintList(list, paintAll, this._redrawId);\n\n // Paint custum layers\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (!layer.__builtin__ && layer.refresh) {\n const clearColor = i === 0 ? this._backgroundColor : null;\n layer.refresh(clearColor);\n }\n }\n\n return this;\n }\n\n\n refreshHover() {\n this._paintHoverList(this.storage.getDisplayList(false));\n }\n\n private _paintHoverList(list: Displayable[]) {\n let len = list.length;\n let hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n\n if (!len) {\n return;\n }\n\n const scope: BrushScope = {\n inHover: true,\n viewWidth: this._width,\n viewHeight: this._height\n };\n\n let ctx;\n for (let i = 0; i < len; i++) {\n const el = list[i];\n if (el.__inHover) {\n // Use a extream large zlevel\n // FIXME?\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n if (!ctx) {\n ctx = hoverLayer.ctx;\n ctx.save();\n }\n\n brush(ctx, el, scope, i === len - 1);\n }\n }\n if (ctx) {\n ctx.restore();\n }\n }\n\n getHoverLayer() {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n private _paintList(list: Displayable[], paintAll: boolean, redrawId?: number) {\n if (this._redrawId !== redrawId) {\n return;\n }\n\n paintAll = paintAll || false;\n\n this._updateLayerStatus(list);\n\n const {finished, needsRefreshHover} = this._doPaintList(list, paintAll);\n\n if (this._needsManuallyCompositing) {\n this._compositeManually();\n }\n\n if (needsRefreshHover) {\n this._paintHoverList(list);\n }\n\n if (!finished) {\n const self = this;\n requestAnimationFrame(function () {\n self._paintList(list, paintAll, redrawId);\n });\n }\n }\n\n private _compositeManually() {\n const ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n const width = (this._domRoot as HTMLCanvasElement).width;\n const height = (this._domRoot as HTMLCanvasElement).height;\n ctx.clearRect(0, 0, width, height);\n // PENDING, If only builtin layer?\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n }\n\n private _doPaintList(list: Displayable[], paintAll?: boolean): {\n finished: boolean\n needsRefreshHover: boolean\n } {\n const layerList = [];\n for (let zi = 0; zi < this._zlevelList.length; zi++) {\n const zlevel = this._zlevelList[zi];\n const layer = this._layers[zlevel];\n if (layer.__builtin__\n && layer !== this._hoverlayer\n && (layer.__dirty || paintAll)\n // Layer with hover elements can't be redrawn.\n // && !layer.__hasHoverLayerELement\n ) {\n layerList.push(layer);\n }\n }\n\n let finished = true;\n let needsRefreshHover = false;\n\n for (let k = 0; k < layerList.length; k++) {\n const layer = layerList[k];\n const ctx = layer.ctx;\n const scope: BrushScope = {\n inHover: false,\n allClipped: false,\n prevEl: null,\n viewWidth: this._width,\n viewHeight: this._height\n };\n\n ctx.save();\n\n let start = paintAll ? layer.__startIndex : layer.__drawIndex;\n\n const useTimer = !paintAll && layer.incremental && Date.now;\n const startTime = useTimer && Date.now();\n\n const clearColor = layer.zlevel === this._zlevelList[0]\n ? this._backgroundColor : null;\n // All elements in this layer are cleared.\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor);\n }\n else if (start === layer.__startIndex) {\n const firstEl = list[start];\n if (!firstEl.incremental || !(firstEl as IncrementalDisplayable).notClear || paintAll) {\n layer.clear(false, clearColor);\n }\n }\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n let i: number;\n for (i = start; i < layer.__endIndex; i++) {\n const el = list[i];\n\n if (el.__inHover) {\n needsRefreshHover = true;\n }\n\n brush(ctx, el, scope, i === layer.__endIndex - 1);\n\n if (useTimer) {\n // Date.now can be executed in 13,025,305 ops/second.\n const dTime = Date.now() - startTime;\n // Give 15 millisecond to draw.\n // The rest elements will be drawn in the next frame.\n if (dTime > 15) {\n break;\n }\n }\n }\n\n layer.__drawIndex = i;\n\n if (layer.__drawIndex < layer.__endIndex) {\n finished = false;\n }\n\n if (scope.prevElClipPaths) {\n // Needs restore the state. If last drawn element is in the clipping area.\n ctx.restore();\n }\n\n ctx.restore();\n }\n\n if (env.wxa) {\n // Flush for weixin application\n util.each(this._layers, function (layer) {\n if (layer && layer.ctx && (layer.ctx as WXCanvasRenderingContext).draw) {\n (layer.ctx as WXCanvasRenderingContext).draw();\n }\n });\n }\n\n return {\n finished,\n needsRefreshHover\n };\n }\n\n /**\n * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n * @param zlevel\n * @param virtual Virtual layer will not be inserted into dom.\n */\n getLayer(zlevel: number, virtual?: boolean) {\n if (this._singleCanvas && !this._needsManuallyCompositing) {\n zlevel = CANVAS_ZLEVEL;\n }\n let layer = this._layers[zlevel];\n if (!layer) {\n // Create a new layer\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.zlevel = zlevel;\n layer.__builtin__ = true;\n\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n }\n // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n\n if (virtual) {\n layer.virtual = virtual;\n }\n\n this.insertLayer(zlevel, layer);\n\n // Context is created after dom inserted to document\n // Or excanvas will get 0px clientWidth and clientHeight\n layer.initContext();\n }\n\n return layer;\n }\n\n insertLayer(zlevel: number, layer: Layer) {\n\n const layersMap = this._layers;\n const zlevelList = this._zlevelList;\n const len = zlevelList.length;\n const domRoot = this._domRoot;\n let prevLayer = null;\n let i = -1;\n\n if (layersMap[zlevel]) {\n util.logError('ZLevel ' + zlevel + ' has been used already');\n return;\n }\n // Check if is a valid layer\n if (!isLayerValid(layer)) {\n util.logError('Layer of zlevel ' + zlevel + ' is not valid');\n return;\n }\n\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (\n zlevelList[i] < zlevel\n && zlevelList[i + 1] > zlevel\n ) {\n break;\n }\n }\n prevLayer = layersMap[zlevelList[i]];\n }\n zlevelList.splice(i + 1, 0, zlevel);\n\n layersMap[zlevel] = layer;\n\n // Vitual layer will not directly show on the screen.\n // (It can be a WebGL layer and assigned to a ZRImage element)\n // But it still under management of zrender.\n if (!layer.virtual) {\n if (prevLayer) {\n const prevDom = prevLayer.dom;\n if (prevDom.nextSibling) {\n domRoot.insertBefore(\n layer.dom,\n prevDom.nextSibling\n );\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n\n layer.__painter = this;\n }\n\n // Iterate each layer\n eachLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n }\n\n // Iterate each buildin layer\n eachBuiltinLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n }\n\n // Iterate each other layer except buildin layer\n eachOtherLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n }\n\n /**\n * 获取所有已创建的层\n * @param prevLayer\n */\n getLayers() {\n return this._layers;\n }\n\n _updateLayerStatus(list: Displayable[]) {\n\n this.eachBuiltinLayer(function (layer, z) {\n layer.__dirty = layer.__used = false;\n });\n\n function updatePrevLayer(idx: number) {\n if (prevLayer) {\n if (prevLayer.__endIndex !== idx) {\n prevLayer.__dirty = true;\n }\n prevLayer.__endIndex = idx;\n }\n }\n\n if (this._singleCanvas) {\n for (let i = 1; i < list.length; i++) {\n const el = list[i];\n if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n this._needsManuallyCompositing = true;\n break;\n }\n }\n }\n\n let prevLayer: Layer = null;\n let incrementalLayerCount = 0;\n let prevZlevel;\n let i;\n for (i = 0; i < list.length; i++) {\n const el = list[i];\n const zlevel = el.zlevel;\n let layer;\n\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n }\n\n // TODO Not use magic number on zlevel.\n\n // Each layer with increment element can be separated to 3 layers.\n // (Other Element drawn after incremental element)\n // -----------------zlevel + EL_AFTER_INCREMENTAL_INC--------------------\n // (Incremental element)\n // ----------------------zlevel + INCREMENTAL_INC------------------------\n // (Element drawn before incremental element)\n // --------------------------------zlevel--------------------------------\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n }\n else {\n layer = this.getLayer(\n zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0),\n this._needsManuallyCompositing\n );\n }\n\n if (!layer.__builtin__) {\n util.logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n }\n\n if (layer !== prevLayer) {\n layer.__used = true;\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n layer.__startIndex = i;\n if (!layer.incremental) {\n layer.__drawIndex = i;\n }\n else {\n // Mark layer draw index needs to update.\n layer.__drawIndex = -1;\n }\n updatePrevLayer(i);\n prevLayer = layer;\n }\n if ((el.__dirty & Element.REDARAW_BIT) && !el.__inHover) { // Ignore dirty elements in hover layer.\n layer.__dirty = true;\n if (layer.incremental && layer.__drawIndex < 0) {\n // Start draw from the first dirty element.\n layer.__drawIndex = i;\n }\n }\n }\n\n updatePrevLayer(i);\n\n this.eachBuiltinLayer(function (layer, z) {\n // Used in last frame but not in this frame. Needs clear\n if (!layer.__used && layer.getElementCount() > 0) {\n layer.__dirty = true;\n layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n }\n // For incremental layer. In case start index changed and no elements are dirty.\n if (layer.__dirty && layer.__drawIndex < 0) {\n layer.__drawIndex = layer.__startIndex;\n }\n });\n }\n\n /**\n * 清除hover层外所有内容\n */\n clear() {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n }\n\n _clearLayer(layer: Layer) {\n layer.clear();\n }\n\n setBackgroundColor(backgroundColor: string | GradientObject | PatternObject) {\n this._backgroundColor = backgroundColor;\n }\n\n /**\n * 修改指定zlevel的绘制参数\n */\n configLayer(zlevel: number, config: LayerConfig) {\n if (config) {\n const layerConfig = this._layerConfig;\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n }\n else {\n util.merge(layerConfig[zlevel], config, true);\n }\n\n for (let i = 0; i < this._zlevelList.length; i++) {\n const _zlevel = this._zlevelList[i];\n // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n const layer = this._layers[_zlevel];\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n }\n }\n\n /**\n * 删除指定层\n * @param zlevel 层所在的zlevel\n */\n delLayer(zlevel: number) {\n const layers = this._layers;\n const zlevelList = this._zlevelList;\n const layer = layers[zlevel];\n if (!layer) {\n return;\n }\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n }\n\n /**\n * 区域大小变化后重绘\n */\n resize(\n width?: number | string,\n height?: number | string\n ) {\n if (!this._domRoot.style) { // Maybe in node or worker\n if (width == null || height == null) {\n return;\n }\n // TODO width / height may be string\n this._width = width as number;\n this._height = height as number;\n\n this.getLayer(CANVAS_ZLEVEL).resize(width as number, height as number);\n }\n else {\n const domRoot = this._domRoot;\n // FIXME Why ?\n domRoot.style.display = 'none';\n\n // Save input w/h\n const opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n\n width = this._getSize(0);\n height = this._getSize(1);\n\n domRoot.style.display = '';\n\n // 优化没有实际改变的resize\n if (this._width !== width || height !== this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n\n for (let id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n\n this.refresh(true);\n }\n\n this._width = width;\n this._height = height;\n\n }\n return this;\n }\n\n /**\n * 清除单独的一个层\n * @param {number} zlevel\n */\n clearLayer(zlevel: number) {\n const layer = this._layers[zlevel];\n if (layer) {\n layer.clear();\n }\n }\n\n /**\n * 释放\n */\n dispose() {\n this.root.innerHTML = '';\n\n this.root =\n this.storage =\n\n this._domRoot =\n this._layers = null;\n }\n\n /**\n * Get canvas which has all thing rendered\n */\n getRenderedCanvas(opts?: {\n backgroundColor?: string | GradientObject | PatternObject\n pixelRatio?: number\n }) {\n opts = opts || {};\n if (this._singleCanvas && !this._compositeManually) {\n return this._layers[CANVAS_ZLEVEL].dom;\n }\n\n const imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n const ctx = imageLayer.ctx;\n imageLayer.initContext();\n imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n if (opts.pixelRatio <= this.dpr) {\n this.refresh();\n\n const width = imageLayer.dom.width;\n const height = imageLayer.dom.height;\n const ctx = imageLayer.ctx;\n this.eachLayer(function (layer) {\n if (layer.__builtin__) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n else if (layer.renderToCanvas) {\n imageLayer.ctx.save();\n layer.renderToCanvas(imageLayer.ctx);\n imageLayer.ctx.restore();\n }\n });\n }\n else {\n // PENDING, echarts-gl and incremental rendering.\n const scope = {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n };\n const displayList = this.storage.getDisplayList(true);\n for (let i = 0, len = displayList.length; i < len; i++) {\n const el = displayList[i];\n brush(ctx, el, scope, i === len - 1);\n }\n }\n\n return imageLayer.dom;\n }\n /**\n * 获取绘图区域宽度\n */\n getWidth() {\n return this._width;\n }\n\n /**\n * 获取绘图区域高度\n */\n getHeight() {\n return this._height;\n }\n\n _getSize(whIdx: number) {\n const opts = this._opts;\n const wh = ['width', 'height'][whIdx] as 'width' | 'height';\n const cwh = ['clientWidth', 'clientHeight'][whIdx] as 'clientWidth' | 'clientHeight';\n const plt = ['paddingLeft', 'paddingTop'][whIdx] as 'paddingLeft' | 'paddingTop';\n const prb = ['paddingRight', 'paddingBottom'][whIdx] as 'paddingRight' | 'paddingBottom';\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh] as string);\n }\n\n const root = this.root;\n // IE8 does not support getComputedStyle, but it use VML.\n const stl = document.defaultView.getComputedStyle(root);\n\n return (\n (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)\n ) | 0;\n }\n\n pathToImage(path: Path, dpr?: number): ZRImage {\n dpr = dpr || this.dpr;\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const rect = path.getBoundingRect();\n const style = path.style;\n const shadowBlurSize = style.shadowBlur * dpr;\n const shadowOffsetX = style.shadowOffsetX * dpr;\n const shadowOffsetY = style.shadowOffsetY * dpr;\n const lineWidth = path.hasStroke() ? style.lineWidth : 0;\n\n const leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n const rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n const topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n const bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n const width = rect.width + leftMargin + rightMargin;\n const height = rect.height + topMargin + bottomMargin;\n\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n (ctx as ZRCanvasRenderingContext).dpr = dpr;\n\n const pathTransform = {\n x: path.x,\n y: path.y,\n scaleX: path.scaleX,\n scaleY: path.scaleY,\n rotation: path.rotation,\n originX: path.originX,\n originY: path.originY\n };\n path.x = leftMargin - rect.x;\n path.y = topMargin - rect.y;\n path.rotation = 0;\n path.scaleX = 1;\n path.scaleY = 1;\n path.updateTransform();\n if (path) {\n brush(ctx, path, {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n }, true);\n }\n\n const imgShape = new ZRImage({\n style: {\n x: 0,\n y: 0,\n image: canvas\n }\n });\n\n util.extend(path, pathTransform);\n\n return imgShape;\n }\n};","import './graphic';\nimport {registerPainter} from '../zrender';\nimport Painter from './Painter';\n\nregisterPainter('canvas', Painter);","export function createElement(name: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}","// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\n\nimport {createElement} from './core';\nimport PathProxy from '../core/PathProxy';\nimport * as matrix from '../core/matrix';\nimport { Path } from '../export';\nimport { PathStyleProps } from '../graphic/Path';\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\nimport { DEFAULT_FONT, getLineHeight } from '../contain/text';\nimport TSpan, { TSpanStyleProps } from '../graphic/TSpan';\nimport { map } from '../core/util';\n\nexport interface SVGProxy {\n brush(el: T): void\n}\n\nconst CMD = PathProxy.CMD;\n\nconst NONE = 'none';\nconst mathRound = Math.round;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst PI = Math.PI;\nconst PI2 = Math.PI * 2;\nconst degree = 180 / PI;\n\nconst EPSILON = 1e-4;\n\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\n\nfunction round4(val: number) {\n return mathRound(val * 1e4) / 1e4;\n}\n\nfunction isAroundZero(val: number) {\n return val < EPSILON && val > -EPSILON;\n}\n\nfunction pathHasFill(style: AllStyleOption): style is PathStyleProps {\n const fill = (style as PathStyleProps).fill;\n return fill != null && fill !== NONE;\n}\n\nfunction pathHasStroke(style: AllStyleOption): style is PathStyleProps {\n const stroke = (style as PathStyleProps).stroke;\n return stroke != null && stroke !== NONE;\n}\n\nfunction reduceNumberString(n: number, precision: number) {\n // Avoid large string of matrix\n // PENDING If have precision issue when scaled\n return n > 1 ? +n.toFixed(precision) : +n.toPrecision(precision);\n}\nfunction setTransform(svgEl: SVGElement, m: matrix.MatrixArray) {\n if (m) {\n attr(svgEl, 'transform', 'matrix('\n + reduceNumberString(m[0], 3) + ','\n + reduceNumberString(m[1], 3) + ','\n + reduceNumberString(m[2], 3) + ','\n + reduceNumberString(m[3], 3) + ','\n + reduceNumberString(m[4], 4) + ','\n + reduceNumberString(m[5], 4)\n + ')');\n }\n}\n\nfunction attr(el: SVGElement, key: string, val: string) {\n if (!val || (val as any).type !== 'linear' && (val as any).type !== 'radial') {\n // Don't set attribute for gradient, since it need new dom nodes\n el.setAttribute(key, val);\n }\n}\n\nfunction attrXLink(el: SVGElement, key: string, val: string) {\n el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\n\nfunction bindStyle(svgEl: SVGElement, style: PathStyleProps, el?: Path): void\nfunction bindStyle(svgEl: SVGElement, style: TSpanStyleProps, el?: TSpan): void\nfunction bindStyle(svgEl: SVGElement, style: ImageStyleProps, el?: ZRImage): void\nfunction bindStyle(svgEl: SVGElement, style: AllStyleOption, el?: Path | TSpan | ZRImage) {\n const opacity = style.opacity == null ? 1 : style.opacity;\n if (pathHasFill(style)) {\n let fill = style.fill;\n fill = fill === 'transparent' ? NONE : fill;\n attr(svgEl, 'fill', fill as string);\n attr(svgEl,\n 'fill-opacity',\n (style.fillOpacity != null ? style.fillOpacity * opacity : opacity) + ''\n );\n }\n else {\n attr(svgEl, 'fill', NONE);\n }\n\n if (pathHasStroke(style)) {\n let stroke = style.stroke;\n stroke = stroke === 'transparent' ? NONE : stroke;\n attr(svgEl, 'stroke', stroke as string);\n const strokeWidth = style.lineWidth;\n const strokeScale = style.strokeNoScale\n ? (el as Path).getLineScale()\n : 1;\n attr(svgEl, 'stroke-width', (strokeScale ? strokeWidth / strokeScale : 0) + '');\n // stroke then fill for text; fill then stroke for others\n attr(svgEl, 'paint-order', style.strokeFirst ? 'stroke' : 'fill');\n attr(svgEl, 'stroke-opacity', (style.strokeOpacity != null ? style.strokeOpacity * opacity : opacity) + '');\n let lineDash = style.lineDash;\n if (lineDash) {\n let lineDashOffset = style.lineDashOffset;\n if (strokeScale && strokeScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / strokeScale;\n });\n if (lineDashOffset) {\n lineDashOffset /= strokeScale;\n lineDashOffset = mathRound(lineDashOffset);\n }\n }\n attr(svgEl, 'stroke-dasharray', lineDash.join(','));\n attr(svgEl, 'stroke-dashoffset', (lineDashOffset || 0) + '');\n }\n else {\n attr(svgEl, 'stroke-dasharray', '');\n }\n\n // PENDING\n style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);\n style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);\n style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit + '');\n }\n else {\n attr(svgEl, 'stroke', NONE);\n }\n}\n\n/***************************************************\n * PATH\n **************************************************/\nfunction pathDataToString(path: PathProxy) {\n if (!path) {\n return '';\n }\n\n const str = [];\n const data = path.data;\n const dataLength = path.len();\n let x;\n let y;\n for (let i = 0; i < dataLength;) {\n let cmd = data[i++];\n let cmdStr = '';\n let nData = 0;\n switch (cmd) {\n case CMD.M:\n cmdStr = 'M';\n nData = 2;\n break;\n case CMD.L:\n cmdStr = 'L';\n nData = 2;\n break;\n case CMD.Q:\n cmdStr = 'Q';\n nData = 4;\n break;\n case CMD.C:\n cmdStr = 'C';\n nData = 6;\n break;\n case CMD.A:\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const theta = data[i++];\n let dTheta = data[i++];\n const psi = data[i++];\n const clockwise = data[i++];\n\n const dThetaPositive = Math.abs(dTheta);\n const isCircle = isAroundZero(dThetaPositive - PI2)\n || (clockwise ? dTheta >= PI2 : -dTheta >= PI2);\n\n // Mapping to 0~2PI\n const unifiedTheta = dTheta > 0 ? dTheta % PI2 : (dTheta % PI2 + PI2);\n\n let large = false;\n if (isCircle) {\n large = true;\n }\n else if (isAroundZero(dThetaPositive)) {\n large = false;\n }\n else {\n large = (unifiedTheta >= PI) === !!clockwise;\n }\n\n const x0 = round4(cx + rx * mathCos(theta));\n const y0 = round4(cy + ry * mathSin(theta));\n\n // It will not draw if start point and end point are exactly the same\n // We need to shift the end point with a small value\n // FIXME A better way to draw circle ?\n if (isCircle) {\n if (clockwise) {\n dTheta = PI2 - 1e-4;\n }\n else {\n dTheta = -PI2 + 1e-4;\n }\n\n large = true;\n\n if (i === 9) {\n // Move to (x0, y0) only when CMD.A comes at the\n // first position of a shape.\n // For instance, when drawing a ring, CMD.A comes\n // after CMD.M, so it's unnecessary to move to\n // (x0, y0).\n str.push('M', x0, y0);\n }\n }\n\n x = round4(cx + rx * mathCos(theta + dTheta));\n y = round4(cy + ry * mathSin(theta + dTheta));\n\n if (isNaN(x0) || isNaN(y0) || isNaN(rx) || isNaN(ry) || isNaN(psi) || isNaN(degree) || isNaN(x) || isNaN(y)) {\n return '';\n }\n\n // FIXME Ellipse\n str.push('A', round4(rx), round4(ry),\n mathRound(psi * degree), +large, +clockwise, x, y);\n break;\n case CMD.Z:\n cmdStr = 'Z';\n break;\n case CMD.R:\n x = round4(data[i++]);\n y = round4(data[i++]);\n const w = round4(data[i++]);\n const h = round4(data[i++]);\n\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\n return '';\n }\n\n str.push(\n 'M', x, y,\n 'L', x + w, y,\n 'L', x + w, y + h,\n 'L', x, y + h,\n 'L', x, y\n );\n break;\n }\n cmdStr && str.push(cmdStr);\n for (let j = 0; j < nData; j++) {\n const val = round4(data[i++]);\n if (isNaN(val)) {\n return '';\n }\n // PENDING With scale\n str.push(val);\n }\n }\n return str.join(' ');\n}\n\ninterface PathWithSVGBuildPath extends Path {\n __svgBuildPath: Path['buildPath']\n __svgPathStr: string\n}\n\nfunction wrapSVGBuildPath(el: PathWithSVGBuildPath) {\n if (!el.__svgBuildPath) {\n const oldBuildPath = el.buildPath;\n el.__svgBuildPath = el.buildPath = function (path, shape, inBundle) {\n oldBuildPath.call(this, el.path, shape, inBundle);\n el.__svgPathStr = pathDataToString(el.path);\n }\n if (!el.shapeChanged()) { // If path is updated. Get string manually.\n el.__svgPathStr = pathDataToString(el.path);\n }\n }\n}\n\nconst svgPath: SVGProxy = {\n brush(el: Path) {\n const style = el.style;\n\n let svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('path');\n el.__svgEl = svgEl;\n }\n\n if (!el.path) {\n el.createPathProxy();\n }\n const path = el.path;\n\n wrapSVGBuildPath(el as PathWithSVGBuildPath);\n\n if (el.shapeChanged()) {\n path.beginPath();\n el.buildPath(path, el.shape);\n el.pathUpdated();\n }\n\n // TODO Optimize\n attr(svgEl, 'd', (el as PathWithSVGBuildPath).__svgPathStr);\n\n bindStyle(svgEl, style, el);\n setTransform(svgEl, el.transform);\n }\n};\n\nexport {svgPath as path};\n\n/***************************************************\n * IMAGE\n **************************************************/\nconst svgImage: SVGProxy = {\n brush(el: ZRImage) {\n const style = el.style;\n let image = style.image;\n\n if (image instanceof HTMLImageElement) {\n const src = image.src;\n image = src;\n }\n if (!image) {\n return;\n }\n\n const x = style.x || 0;\n const y = style.y || 0;\n\n const dw = style.width;\n const dh = style.height;\n\n let svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('image');\n el.__svgEl = svgEl;\n }\n\n if (image !== el.__imageSrc) {\n attrXLink(svgEl, 'href', image as string);\n // Caching image src\n el.__imageSrc = image as string;\n }\n\n attr(svgEl, 'width', dw + '');\n attr(svgEl, 'height', dh + '');\n\n attr(svgEl, 'x', x + '');\n attr(svgEl, 'y', y + '');\n\n setTransform(svgEl, el.transform);\n }\n};\nexport {svgImage as image};\n\n/***************************************************\n * TEXT\n **************************************************/\nconst TEXT_ALIGN_TO_ANCHOR = {\n left: 'start',\n right: 'end',\n center: 'middle',\n middle: 'middle'\n};\n\nfunction adjustTextY(y: number, lineHeight: number, textBaseline: CanvasTextBaseline): number {\n // TODO Other values.\n if (textBaseline === 'top') {\n y += lineHeight / 2;\n }\n else if (textBaseline === 'bottom') {\n y -= lineHeight / 2;\n }\n return y;\n}\n\nconst svgText: SVGProxy = {\n brush(el: TSpan) {\n const style = el.style;\n\n let text = style.text;\n // Convert to string\n text != null && (text += '');\n if (!text) {\n return;\n }\n\n let textSvgEl = el.__svgEl as SVGTextElement;\n if (!textSvgEl) {\n textSvgEl = createElement('text') as SVGTextElement;\n el.__svgEl = textSvgEl;\n }\n\n const font = style.font || DEFAULT_FONT;\n\n // style.font has been normalized by `normalizeTextStyle`.\n const textSvgElStyle = textSvgEl.style;\n textSvgElStyle.font = font;\n\n textSvgEl.textContent = text;\n\n bindStyle(textSvgEl, style, el);\n setTransform(textSvgEl, el.transform);\n\n // Consider different font display differently in vertial align, we always\n // set vertialAlign as 'middle', and use 'y' to locate text vertically.\n const x = style.x || 0;\n const y = adjustTextY(style.y || 0, getLineHeight(font), style.textBaseline);\n const textAlign = TEXT_ALIGN_TO_ANCHOR[style.textAlign as keyof typeof TEXT_ALIGN_TO_ANCHOR]\n || style.textAlign;\n attr(textSvgEl, 'dominant-baseline', 'middle');\n attr(textSvgEl, 'text-anchor', textAlign);\n attr(textSvgEl, 'x', x + '');\n attr(textSvgEl, 'y', y + '');\n }\n};\nexport {svgText as text};\n","// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\ntype EqualFunc = (a: T, b: T) => boolean;\n\ntype DiffComponent = {\n count: number\n added: boolean\n removed: boolean,\n indices: number[]\n}\n\ntype DiffPath = {\n components: DiffComponent[],\n newPos: number\n}\n\nfunction diff(oldArr: T[], newArr: T[], equals: EqualFunc): DiffComponent[] {\n if (!equals) {\n equals = function (a, b) {\n return a === b;\n };\n }\n\n oldArr = oldArr.slice();\n newArr = newArr.slice();\n // Allow subclasses to massage the input prior to running\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath: DiffPath[] = [{ newPos: -1, components: [] }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n var oldPos = extractCommon(bestPath[0], newArr, oldArr, 0, equals);\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n var indices = [];\n for (let i = 0; i < newArr.length; i++) {\n indices.push(i);\n }\n // Identity per the equality and tokenizer\n return [{\n indices: indices,\n count: newArr.length,\n added: false,\n removed: false\n }];\n }\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (let diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n var basePath;\n var addPath = bestPath[diagonalPath - 1];\n var removePath = bestPath[diagonalPath + 1];\n var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n var canAdd = addPath && addPath.newPos + 1 < newLen;\n var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n basePath = clonePath(removePath);\n pushComponent(basePath.components, false, true);\n }\n else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n basePath.newPos++;\n pushComponent(basePath.components, true, false);\n }\n\n oldPos = extractCommon(basePath, newArr, oldArr, diagonalPath, equals);\n\n // If we have hit the end of both strings, then we are done\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return buildValues(basePath.components);\n }\n else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n }\n\n while (editLength <= maxEditLength) {\n var ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n}\n\nfunction extractCommon(basePath: DiffPath, newArr: T[], oldArr: T[], diagonalPath: number, equals: EqualFunc) {\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var newPos = basePath.newPos;\n var oldPos = newPos - diagonalPath;\n var commonCount = 0;\n\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && equals(newArr[newPos + 1], oldArr[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({\n count: commonCount,\n added: false,\n removed: false,\n indices: []\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n}\n\nfunction pushComponent(components: DiffComponent[], added: boolean, removed: boolean) {\n var last = components[components.length - 1];\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {\n count: last.count + 1,\n added,\n removed,\n indices: []\n };\n }\n else {\n components.push({\n count: 1,\n added,\n removed,\n indices: []\n });\n }\n}\n\nfunction buildValues(components: DiffComponent[]) {\n var componentPos = 0;\n var componentLen = components.length;\n var newPos = 0;\n var oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n if (!component.removed) {\n var indices = [];\n for (let i = newPos; i < newPos + component.count; i++) {\n indices.push(i);\n }\n component.indices = indices;\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n for (let i = oldPos; i < oldPos + component.count; i++) {\n component.indices.push(i);\n }\n oldPos += component.count;\n }\n }\n\n return components;\n}\n\nfunction clonePath(path: DiffPath) {\n return { newPos: path.newPos, components: path.components.slice(0) };\n}\n\nexport default function (oldArr: T[], newArr: T[], equal?: EqualFunc): DiffComponent[] {\n return diff(oldArr, newArr, equal);\n}","/**\n * @file Manages elements that can be defined in in SVG,\n * e.g., gradients, clip path, etc.\n * @author Zhang Wenli\n */\n\nimport {createElement} from '../core';\nimport * as zrUtil from '../../core/util';\nimport Path from '../../graphic/Path';\nimport ZRImage from '../../graphic/Image';\nimport TSpan from '../../graphic/TSpan';\nimport {\n path as svgPath,\n image as svgImage,\n text as svgText\n} from '../graphic';\nimport Displayable from '../../graphic/Displayable';\n\n\nconst MARK_UNUSED = '0';\nconst MARK_USED = '1';\n\n/**\n * Manages elements that can be defined in in SVG,\n * e.g., gradients, clip path, etc.\n */\nexport default class Definable {\n\n nextId = 0\n\n protected _zrId: number\n protected _svgRoot: SVGElement\n protected _tagNames: string[]\n protected _markLabel: string\n protected _domName: string = '_dom'\n\n constructor(\n zrId: number, // zrender instance id\n svgRoot: SVGElement, // root of SVG document\n tagNames: string | string[], // possible tag names\n markLabel: string, // label name to make if the element\n domName?: string\n ) {\n this._zrId = zrId;\n this._svgRoot = svgRoot;\n this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;\n this._markLabel = markLabel;\n\n if (domName) {\n this._domName = domName;\n }\n }\n\n createElement = createElement\n\n\n /**\n * Get the tag for svgRoot; optionally creates one if not exists.\n *\n * @param isForceCreating if need to create when not exists\n * @return SVG element, null if it doesn't\n * exist and isForceCreating is false\n */\n getDefs(isForceCreating?: boolean): SVGDefsElement {\n let svgRoot = this._svgRoot;\n let defs = this._svgRoot.getElementsByTagName('defs');\n if (defs.length === 0) {\n // Not exist\n if (isForceCreating) {\n let defs = svgRoot.insertBefore(\n this.createElement('defs'), // Create new tag\n svgRoot.firstChild // Insert in the front of svg\n ) as SVGDefsElement;\n if (!defs.contains) {\n // IE doesn't support contains method\n defs.contains = function (el) {\n const children = defs.children;\n if (!children) {\n return false;\n }\n for (let i = children.length - 1; i >= 0; --i) {\n if (children[i] === el) {\n return true;\n }\n }\n return false;\n };\n }\n return defs;\n }\n else {\n return null;\n }\n }\n else {\n return defs[0];\n }\n }\n\n\n /**\n * Update DOM element if necessary.\n *\n * @param element style element. e.g., for gradient,\n * it may be '#ccc' or {type: 'linear', ...}\n * @param onUpdate update callback\n */\n doUpdate(target: T, onUpdate?: (target: T) => void) {\n if (!target) {\n return;\n }\n\n const defs = this.getDefs(false);\n if ((target as any)[this._domName] && defs.contains((target as any)[this._domName])) {\n // Update DOM\n if (typeof onUpdate === 'function') {\n onUpdate(target);\n }\n }\n else {\n // No previous dom, create new\n const dom = this.add(target);\n if (dom) {\n (target as any)[this._domName] = dom;\n }\n }\n }\n\n add(target: any): SVGElement {\n return null;\n }\n\n /**\n * Add gradient dom to defs\n *\n * @param dom DOM to be added to \n */\n addDom(dom: SVGElement) {\n const defs = this.getDefs(true);\n defs.appendChild(dom);\n }\n\n\n /**\n * Remove DOM of a given element.\n *\n * @param target Target where to attach the dom\n */\n removeDom(target: T) {\n const defs = this.getDefs(false);\n if (defs && (target as any)[this._domName]) {\n defs.removeChild((target as any)[this._domName]);\n (target as any)[this._domName] = null;\n }\n }\n\n\n /**\n * Get DOMs of this element.\n *\n * @return doms of this defineable elements in \n */\n getDoms() {\n const defs = this.getDefs(false);\n if (!defs) {\n // No dom when defs is not defined\n return [];\n }\n\n let doms: SVGElement[] = [];\n zrUtil.each(this._tagNames, function (tagName) {\n const tags = defs.getElementsByTagName(tagName);\n // Note that tags is HTMLCollection, which is array-like\n // rather than real array.\n // So `doms.concat(tags)` add tags as one object.\n doms = doms.concat([].slice.call(tags));\n });\n\n return doms;\n }\n\n\n /**\n * Mark DOMs to be unused before painting, and clear unused ones at the end\n * of the painting.\n */\n markAllUnused() {\n const doms = this.getDoms();\n const that = this;\n zrUtil.each(doms, function (dom) {\n (dom as any)[that._markLabel] = MARK_UNUSED;\n });\n }\n\n\n /**\n * Mark a single DOM to be used.\n *\n * @param dom DOM to mark\n */\n markDomUsed(dom: SVGElement) {\n if (dom) {\n (dom as any)[this._markLabel] = MARK_USED;\n }\n };\n\n\n /**\n * Remove unused DOMs defined in \n */\n removeUnused() {\n const defs = this.getDefs(false);\n if (!defs) {\n // Nothing to remove\n return;\n }\n\n const doms = this.getDoms();\n const that = this;\n zrUtil.each(doms, function (dom) {\n if ((dom as any)[that._markLabel] !== MARK_USED) {\n // Remove gradient\n defs.removeChild(dom);\n }\n });\n }\n\n\n /**\n * Get SVG proxy.\n *\n * @param displayable displayable element\n * @return svg proxy of given element\n */\n getSvgProxy(displayable: Displayable) {\n if (displayable instanceof Path) {\n return svgPath;\n }\n else if (displayable instanceof ZRImage) {\n return svgImage;\n }\n else if (displayable instanceof TSpan) {\n return svgText;\n }\n else {\n return svgPath;\n }\n }\n\n\n /**\n * Get SVG element.\n *\n * @param displayable displayable element\n * @return SVG element\n */\n getSvgElement(displayable: Displayable): SVGElement {\n return displayable.__svgEl;\n }\n\n}","/**\n * @file Manages SVG gradient elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport * as colorTool from '../../tool/color';\nimport Displayable from '../../graphic/Displayable';\nimport { GradientObject } from '../../graphic/Gradient';\nimport { LinearGradientObject } from '../../graphic/LinearGradient';\nimport { RadialGradientObject } from '../../graphic/RadialGradient';\n\nfunction isLinearGradient(value: GradientObject): value is LinearGradientObject {\n return value.type === 'linear';\n}\n\nfunction isRadialGradient(value: GradientObject): value is RadialGradientObject {\n return value.type === 'radial';\n}\n\ntype GradientObjectExtended = GradientObject & {\n __dom: SVGElement\n}\n\n/**\n * Manages SVG gradient elements.\n *\n * @param zrId zrender instance id\n * @param svgRoot root of SVG document\n */\nexport default class GradientManager extends Definable {\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, ['linearGradient', 'radialGradient'], '__gradient_in_use__');\n }\n\n\n /**\n * Create new gradient DOM for fill or stroke if not exist,\n * but will not update gradient if exists.\n *\n * @param svgElement SVG element to paint\n * @param displayable zrender displayable element\n */\n addWithoutUpdate(\n svgElement: SVGElement,\n displayable: Displayable\n ) {\n if (displayable && displayable.style) {\n const that = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke: 'fill' | 'stroke') {\n let value = displayable.style[fillOrStroke] as GradientObject;\n if (value\n && (value.type === 'linear'\n || value.type === 'radial')\n ) {\n const gradient = value as GradientObjectExtended;\n const defs = that.getDefs(true);\n\n // Create dom in if not exists\n let dom;\n if (gradient.__dom) {\n // Gradient exists\n dom = gradient.__dom;\n if (!defs.contains(gradient.__dom)) {\n // __dom is no longer in defs, recreate\n that.addDom(dom);\n }\n }\n else {\n // New dom\n dom = that.add(gradient);\n }\n\n that.markUsed(displayable);\n\n const id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n }\n\n\n /**\n * Add a new gradient tag in \n *\n * @param gradient zr gradient instance\n */\n add(gradient: GradientObject): SVGElement {\n let dom;\n if (isLinearGradient(gradient)) {\n dom = this.createElement('linearGradient');\n }\n else if (isRadialGradient(gradient)) {\n dom = this.createElement('radialGradient');\n }\n else {\n zrUtil.logError('Illegal gradient type.');\n return null;\n }\n\n // Set dom id with gradient id, since each gradient instance\n // will have no more than one dom element.\n // id may exists before for those dirty elements, in which case\n // id should remain the same, and other attributes should be\n // updated.\n gradient.id = gradient.id || this.nextId++;\n dom.setAttribute('id', 'zr' + this._zrId\n + '-gradient-' + gradient.id);\n\n this.updateDom(gradient, dom);\n this.addDom(dom);\n\n return dom;\n }\n\n\n /**\n * Update gradient.\n *\n * @param {Gradient} gradient zr gradient instance\n */\n update(gradient: GradientObject) {\n const that = this;\n this.doUpdate(gradient, function () {\n const type = gradient.type;\n const tagName = (gradient as GradientObjectExtended).__dom.tagName;\n if (type === 'linear' && tagName === 'linearGradient'\n || type === 'radial' && tagName === 'radialGradient'\n ) {\n // Gradient type is not changed, update gradient\n that.updateDom(gradient, (gradient as GradientObjectExtended).__dom);\n }\n else {\n // Remove and re-create if type is changed\n that.removeDom(gradient);\n that.add(gradient);\n }\n });\n }\n\n\n /**\n * Update gradient dom\n *\n * @param gradient zr gradient instance\n * @param dom DOM to update\n */\n updateDom(gradient: GradientObject, dom: SVGElement) {\n if (isLinearGradient(gradient)) {\n dom.setAttribute('x1', gradient.x + '');\n dom.setAttribute('y1', gradient.y + '');\n dom.setAttribute('x2', gradient.x2 + '');\n dom.setAttribute('y2', gradient.y2 + '');\n }\n else if (isRadialGradient(gradient)) {\n dom.setAttribute('cx', gradient.x + '');\n dom.setAttribute('cy', gradient.y + '');\n dom.setAttribute('r', gradient.r + '');\n }\n else {\n zrUtil.logError('Illegal gradient type.');\n return;\n }\n\n if (gradient.global) {\n // x1, x2, y1, y2 in range of 0 to canvas width or height\n dom.setAttribute('gradientUnits', 'userSpaceOnUse');\n }\n else {\n // x1, x2, y1, y2 in range of 0 to 1\n dom.setAttribute('gradientUnits', 'objectBoundingBox');\n }\n\n // Remove color stops if exists\n dom.innerHTML = '';\n\n // Add color stops\n const colors = gradient.colorStops;\n for (let i = 0, len = colors.length; i < len; ++i) {\n const stop = this.createElement('stop');\n stop.setAttribute('offset', colors[i].offset * 100 + '%');\n\n const color = colors[i].color;\n if (color.indexOf('rgba') > -1) {\n // Fix Safari bug that stop-color not recognizing alpha #9014\n const opacity = colorTool.parse(color)[3];\n const hex = colorTool.toHex(color);\n\n // stop-color cannot be color, since:\n // The opacity value used for the gradient calculation is the\n // *product* of the value of stop-opacity and the opacity of the\n // value of stop-color.\n // See https://www.w3.org/TR/SVG2/pservers.html#StopOpacityProperty\n stop.setAttribute('stop-color', '#' + hex);\n stop.setAttribute('stop-opacity', opacity + '');\n }\n else {\n stop.setAttribute('stop-color', colors[i].color);\n }\n\n dom.appendChild(stop);\n }\n\n // Store dom element in gradient, to avoid creating multiple\n // dom instances for the same gradient element\n (gradient as GradientObject as GradientObjectExtended).__dom = dom;\n }\n\n /**\n * Mark a single gradient to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n if (displayable.style) {\n let gradient = displayable.style.fill as GradientObject as GradientObjectExtended;\n if (gradient && gradient.__dom) {\n super.markDomUsed(gradient.__dom);\n }\n\n gradient = displayable.style.stroke as GradientObject as GradientObjectExtended;\n if (gradient && gradient.__dom) {\n super.markDomUsed(gradient.__dom);\n }\n }\n }\n\n\n}","/**\n * @file Manages SVG clipPath elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport * as matrix from '../../core/matrix';\nimport Displayable from '../../graphic/Displayable';\nimport Path from '../../graphic/Path';\nimport {SVGProxy} from '../graphic';\n\ntype PathExtended = Path & {\n _dom: SVGElement\n _textDom: SVGElement\n}\n/**\n * Manages SVG clipPath elements.\n */\nexport default class ClippathManager extends Definable {\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, 'clipPath', '__clippath_in_use__');\n }\n\n /**\n * Update clipPath.\n *\n * @param displayable displayable element\n */\n update(displayable: Displayable) {\n const svgEl = this.getSvgElement(displayable);\n if (svgEl) {\n this.updateDom(svgEl, displayable.__clipPaths, false);\n }\n\n this.markUsed(displayable);\n };\n\n\n /**\n * Create an SVGElement of displayable and create a of its\n * clipPath\n */\n updateDom(\n parentEl: SVGElement,\n clipPaths: Path[], // clipPaths of parent element\n isText: boolean // if parent element is Text\n ) {\n if (clipPaths && clipPaths.length > 0) {\n // Has clipPath, create with the first clipPath\n const defs = this.getDefs(true);\n const clipPath = clipPaths[0] as PathExtended;\n let clipPathEl;\n let id;\n\n const domKey: '_textDom' | '_dom' = isText ? '_textDom' : '_dom';\n\n if (clipPath[domKey]) {\n // Use a dom that is already in \n id = clipPath[domKey].getAttribute('id');\n clipPathEl = clipPath[domKey];\n\n // Use a dom that is already in \n if (!defs.contains(clipPathEl)) {\n // This happens when set old clipPath that has\n // been previously removed\n defs.appendChild(clipPathEl);\n }\n }\n else {\n // New \n id = 'zr' + this._zrId + '-clip-' + this.nextId;\n ++this.nextId;\n clipPathEl = this.createElement('clipPath');\n clipPathEl.setAttribute('id', id);\n defs.appendChild(clipPathEl);\n\n clipPath[domKey] = clipPathEl;\n }\n\n // Build path and add to \n const svgProxy = this.getSvgProxy(clipPath);\n if (clipPath.transform\n && clipPath.parent.invTransform\n && !isText\n ) {\n /**\n * If a clipPath has a parent with transform, the transform\n * of parent should not be considered when setting transform\n * of clipPath. So we need to transform back from parent's\n * transform, which is done by multiplying parent's inverse\n * transform.\n */\n // Store old transform\n const transform = Array.prototype.slice.call(\n clipPath.transform\n );\n\n // Transform back from parent, and brush path\n matrix.mul(\n clipPath.transform,\n clipPath.parent.invTransform,\n clipPath.transform\n );\n (svgProxy as SVGProxy).brush(clipPath);\n\n // Set back transform of clipPath\n clipPath.transform = transform;\n }\n else {\n (svgProxy as SVGProxy).brush(clipPath);\n }\n\n const pathEl = this.getSvgElement(clipPath);\n\n clipPathEl.innerHTML = '';\n /**\n * Use `cloneNode()` here to appendChild to multiple parents,\n * which may happend when Text and other shapes are using the same\n * clipPath. Since Text will create an extra clipPath DOM due to\n * different transform rules.\n */\n clipPathEl.appendChild(pathEl.cloneNode());\n\n parentEl.setAttribute('clip-path', 'url(#' + id + ')');\n\n if (clipPaths.length > 1) {\n // Make the other clipPaths recursively\n this.updateDom(clipPathEl, clipPaths.slice(1), isText);\n }\n }\n else {\n // No clipPath\n if (parentEl) {\n parentEl.setAttribute('clip-path', 'none');\n }\n }\n };\n\n /**\n * Mark a single clipPath to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (displayable.__clipPaths) {\n zrUtil.each(displayable.__clipPaths, (clipPath: PathExtended) => {\n if (clipPath._dom) {\n super.markDomUsed(clipPath._dom);\n }\n if (clipPath._textDom) {\n super.markDomUsed(clipPath._textDom);\n }\n });\n }\n };\n}\n","/**\n * @file Manages SVG shadow elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport Displayable from '../../graphic/Displayable';\nimport { PathStyleProps } from '../../graphic/Path';\n\n\ntype DisplayableExtended = Displayable & {\n _shadowDom: SVGElement\n _shadowDomId: number\n}\n/**\n * Manages SVG shadow elements.\n *\n */\nexport default class ShadowManager extends Definable {\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, ['filter'], '__filter_in_use__', '_shadowDom');\n }\n\n /**\n * Create new shadow DOM for fill or stroke if not exist,\n * but will not update shadow if exists.\n */\n addWithoutUpdate(\n svgElement: SVGElement, // SVG element to paint\n displayable: Displayable // zrender displayable element\n ) {\n if (displayable && hasShadow(displayable.style)) {\n\n // Create dom in if not exists\n let dom: SVGElement;\n if ((displayable as DisplayableExtended)._shadowDom) {\n // Gradient exists\n dom = (displayable as DisplayableExtended)._shadowDom;\n\n const defs = this.getDefs(true);\n if (!defs.contains((displayable as DisplayableExtended)._shadowDom)) {\n // _shadowDom is no longer in defs, recreate\n this.addDom(dom);\n }\n }\n else {\n // New dom\n dom = this.add(displayable);\n }\n\n this.markUsed(displayable);\n\n const id = dom.getAttribute('id');\n svgElement.style.filter = 'url(#' + id + ')';\n }\n }\n\n\n /**\n * Add a new shadow tag in \n *\n * @param displayable zrender displayable element\n * @return created DOM\n */\n add(displayable: Displayable): SVGElement {\n const dom = this.createElement('filter');\n\n // Set dom id with shadow id, since each shadow instance\n // will have no more than one dom element.\n // id may exists before for those dirty elements, in which case\n // id should remain the same, and other attributes should be\n // updated.\n (displayable as DisplayableExtended)._shadowDomId = (displayable as DisplayableExtended)._shadowDomId || this.nextId++;\n dom.setAttribute('id', 'zr' + this._zrId\n + '-shadow-' + (displayable as DisplayableExtended)._shadowDomId);\n\n this.updateDom(displayable, dom);\n this.addDom(dom);\n\n return dom;\n }\n\n\n /**\n * Update shadow.\n */\n update(svgElement: SVGElement, displayable: Displayable) {\n const style = displayable.style;\n if (hasShadow(style)) {\n const that = this;\n super.doUpdate(displayable, function () {\n that.updateDom(displayable, (displayable as DisplayableExtended)._shadowDom);\n });\n }\n else {\n // Remove shadow\n this.remove(svgElement, displayable);\n }\n }\n\n\n /**\n * Remove DOM and clear parent filter\n */\n remove(svgElement: SVGElement, displayable: Displayable) {\n if ((displayable as DisplayableExtended)._shadowDomId != null) {\n this.removeDom(svgElement);\n svgElement.style.filter = '';\n }\n }\n\n\n /**\n * Update shadow dom\n *\n * @param displayable zrender displayable element\n * @param dom DOM to update\n */\n updateDom(displayable: Displayable, dom: SVGElement) {\n const domChildArr = dom.getElementsByTagName('feDropShadow');\n const domChild = domChildArr.length\n ? domChildArr[0]\n : this.createElement('feDropShadow');\n\n const style = displayable.style;\n const scaleX = displayable.scaleX || 1;\n const scaleY = displayable.scaleY || 1;\n\n // TODO: textBoxShadowBlur is not supported yet\n let offsetX;\n let offsetY;\n let blur;\n let color;\n if (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY) {\n offsetX = style.shadowOffsetX || 0;\n offsetY = style.shadowOffsetY || 0;\n blur = style.shadowBlur;\n color = style.shadowColor;\n }\n else if (style.textShadowBlur) {\n offsetX = style.textShadowOffsetX || 0;\n offsetY = style.textShadowOffsetY || 0;\n blur = style.textShadowBlur;\n color = style.textShadowColor;\n }\n else {\n // Remove shadow\n this.removeDom(dom);\n return;\n }\n\n domChild.setAttribute('dx', offsetX / scaleX + '');\n domChild.setAttribute('dy', offsetY / scaleY + '');\n domChild.setAttribute('flood-color', color);\n\n // Divide by two here so that it looks the same as in canvas\n // See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowblur\n const stdDx = blur / 2 / scaleX;\n const stdDy = blur / 2 / scaleY;\n const stdDeviation = stdDx + ' ' + stdDy;\n domChild.setAttribute('stdDeviation', stdDeviation);\n\n // Fix filter clipping problem\n dom.setAttribute('x', '-100%');\n dom.setAttribute('y', '-100%');\n dom.setAttribute('width', Math.ceil(blur / 2 * 200) + '%');\n dom.setAttribute('height', Math.ceil(blur / 2 * 200) + '%');\n\n dom.appendChild(domChild);\n\n // Store dom element in shadow, to avoid creating multiple\n // dom instances for the same shadow element\n (displayable as DisplayableExtended)._shadowDom = dom;\n }\n\n /**\n * Mark a single shadow to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n if ((displayable as DisplayableExtended)._shadowDom) {\n super.markDomUsed((displayable as DisplayableExtended)._shadowDom);\n }\n }\n\n}\n\n\nfunction hasShadow(style: PathStyleProps) {\n // TODO: textBoxShadowBlur is not supported yet\n return style\n && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY);\n}","/**\n * SVG Painter\n * @module zrender/svg/Painter\n */\n\nimport {createElement} from './core';\nimport * as util from '../core/util';\nimport Path from '../graphic/Path';\nimport ZRImage from '../graphic/Image';\nimport TSpan from '../graphic/TSpan';\nimport arrayDiff from '../core/arrayDiff';\nimport GradientManager from './helper/GradientManager';\nimport ClippathManager from './helper/ClippathManager';\nimport ShadowManager from './helper/ShadowManager';\nimport {\n path as svgPath,\n image as svgImage,\n text as svgText,\n SVGProxy\n} from './graphic';\nimport Displayable from '../graphic/Displayable';\nimport Storage from '../Storage';\nimport { GradientObject } from '../graphic/Gradient';\nimport { PainterBase } from '../PainterBase';\n\nfunction parseInt10(val: string) {\n return parseInt(val, 10);\n}\n\nfunction getSvgProxy(el: Displayable) {\n if (el instanceof Path) {\n return svgPath;\n }\n else if (el instanceof ZRImage) {\n return svgImage;\n }\n else if (el instanceof TSpan) {\n return svgText;\n }\n else {\n return svgPath;\n }\n}\n\nfunction checkParentAvailable(parent: SVGElement, child: SVGElement) {\n return child && parent && child.parentNode !== parent;\n}\n\nfunction insertAfter(parent: SVGElement, child: SVGElement, prevSibling: SVGElement) {\n if (checkParentAvailable(parent, child) && prevSibling) {\n const nextSibling = prevSibling.nextSibling;\n nextSibling ? parent.insertBefore(child, nextSibling)\n : parent.appendChild(child);\n }\n}\n\nfunction prepend(parent: SVGElement, child: SVGElement) {\n if (checkParentAvailable(parent, child)) {\n const firstChild = parent.firstChild;\n firstChild ? parent.insertBefore(child, firstChild)\n : parent.appendChild(child);\n }\n}\n\nfunction remove(parent: SVGElement, child: SVGElement) {\n if (child && parent && child.parentNode === parent) {\n parent.removeChild(child);\n }\n}\n\nfunction getSvgElement(displayable: Displayable) {\n return displayable.__svgEl;\n}\n\ninterface SVGPainterOption {\n width?: number | string\n height?: number | string\n}\n\nclass SVGPainter implements PainterBase {\n\n type = 'svg'\n\n root: HTMLElement\n\n storage: Storage\n\n private _opts: SVGPainterOption\n\n private _svgDom: SVGElement\n private _svgRoot: SVGGElement\n private _backgroundRoot: SVGGElement\n private _backgroundNode: SVGRectElement\n\n private _gradientManager: GradientManager\n private _clipPathManager: ClippathManager\n private _shadowManager: ShadowManager\n\n private _viewport: HTMLDivElement\n private _visibleList: Displayable[]\n\n private _width: number\n private _height: number\n\n constructor(root: HTMLElement, storage: Storage, opts: SVGPainterOption, zrId: number) {\n this.root = root;\n this.storage = storage;\n this._opts = opts = util.extend({}, opts || {});\n\n const svgDom = createElement('svg');\n svgDom.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n svgDom.setAttribute('version', '1.1');\n svgDom.setAttribute('baseProfile', 'full');\n svgDom.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';\n\n const bgRoot = createElement('g') as SVGGElement;\n svgDom.appendChild(bgRoot);\n const svgRoot = createElement('g') as SVGGElement;\n svgDom.appendChild(svgRoot);\n\n this._gradientManager = new GradientManager(zrId, svgRoot);\n this._clipPathManager = new ClippathManager(zrId, svgRoot);\n this._shadowManager = new ShadowManager(zrId, svgRoot);\n\n const viewport = document.createElement('div');\n viewport.style.cssText = 'overflow:hidden;position:relative';\n\n this._svgDom = svgDom;\n this._svgRoot = svgRoot;\n this._backgroundRoot = bgRoot;\n this._viewport = viewport;\n\n root.appendChild(viewport);\n viewport.appendChild(svgDom);\n\n this.resize(opts.width, opts.height);\n\n this._visibleList = [];\n }\n\n getType() {\n return 'svg';\n }\n\n getViewportRoot() {\n return this._viewport;\n }\n\n getSvgDom() {\n return this._svgDom;\n }\n\n getSvgRoot() {\n return this._svgRoot;\n }\n\n getViewportRootOffset() {\n const viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n }\n\n refresh() {\n\n const list = this.storage.getDisplayList(true);\n\n this._paintList(list);\n }\n\n setBackgroundColor(backgroundColor: string) {\n // TODO gradient\n // Insert a bg rect instead of setting background to viewport.\n // Otherwise, the exported SVG don't have background.\n if (this._backgroundRoot && this._backgroundNode) {\n this._backgroundRoot.removeChild(this._backgroundNode);\n }\n\n const bgNode = createElement('rect') as SVGRectElement;\n bgNode.setAttribute('width', this.getWidth() as any);\n bgNode.setAttribute('height', this.getHeight() as any);\n bgNode.setAttribute('x', 0 as any);\n bgNode.setAttribute('y', 0 as any);\n bgNode.setAttribute('id', 0 as any);\n bgNode.style.fill = backgroundColor;\n this._backgroundRoot.appendChild(bgNode);\n this._backgroundNode = bgNode;\n }\n\n _paintList(list: Displayable[]) {\n this._gradientManager.markAllUnused();\n this._clipPathManager.markAllUnused();\n this._shadowManager.markAllUnused();\n\n const svgRoot = this._svgRoot;\n const visibleList = this._visibleList;\n const listLen = list.length;\n\n const newVisibleList = [];\n for (let i = 0; i < listLen; i++) {\n const displayable = list[i];\n const svgProxy = getSvgProxy(displayable);\n const svgElement = getSvgElement(displayable);\n if (!displayable.invisible) {\n if (displayable.__dirty || !svgElement) {\n svgProxy && (svgProxy as SVGProxy).brush(displayable);\n\n // Update clipPath\n this._clipPathManager.update(displayable);\n\n // Update gradient and shadow\n if (displayable.style) {\n this._gradientManager\n .update(displayable.style.fill as GradientObject);\n this._gradientManager\n .update(displayable.style.stroke as GradientObject);\n this._shadowManager\n .update(svgElement, displayable);\n }\n\n displayable.__dirty = 0;\n }\n\n // May have optimizations and ignore brush(like empty string in TSpan)\n if (getSvgElement(displayable)) {\n newVisibleList.push(displayable);\n }\n }\n }\n\n const diff = arrayDiff(visibleList, newVisibleList);\n let prevSvgElement;\n\n // First do remove, in case element moved to the head and do remove\n // after add\n for (let i = 0; i < diff.length; i++) {\n const item = diff[i];\n if (item.removed) {\n for (let k = 0; k < item.count; k++) {\n const displayable = visibleList[item.indices[k]];\n const svgElement = getSvgElement(displayable);\n remove(svgRoot, svgElement);\n }\n }\n }\n for (let i = 0; i < diff.length; i++) {\n const item = diff[i];\n if (item.added) {\n for (let k = 0; k < item.count; k++) {\n const displayable = newVisibleList[item.indices[k]];\n const svgElement = getSvgElement(displayable);\n prevSvgElement\n ? insertAfter(svgRoot, svgElement, prevSvgElement)\n : prepend(svgRoot, svgElement);\n\n prevSvgElement = svgElement || prevSvgElement;\n\n // zrender.Text only create textSvgElement.\n this._gradientManager\n .addWithoutUpdate(svgElement, displayable);\n this._shadowManager\n .addWithoutUpdate(svgElement, displayable);\n this._clipPathManager.markUsed(displayable);\n }\n }\n else if (!item.removed) {\n for (let k = 0; k < item.count; k++) {\n const displayable = newVisibleList[item.indices[k]];\n const svgElement = getSvgElement(displayable);\n\n this._gradientManager.markUsed(displayable);\n this._gradientManager\n .addWithoutUpdate(svgElement, displayable);\n\n this._shadowManager.markUsed(displayable);\n this._shadowManager\n .addWithoutUpdate(svgElement, displayable);\n\n this._clipPathManager.markUsed(displayable);\n\n prevSvgElement = svgElement\n || prevSvgElement;\n }\n }\n }\n\n this._gradientManager.removeUnused();\n this._clipPathManager.removeUnused();\n this._shadowManager.removeUnused();\n\n this._visibleList = newVisibleList;\n }\n\n _getDefs(isForceCreating?: boolean) {\n let svgRoot = this._svgDom;\n let defs = svgRoot.getElementsByTagName('defs');\n if (defs.length === 0) {\n // Not exist\n if (isForceCreating) {\n let defs = svgRoot.insertBefore(\n createElement('defs'), // Create new tag\n svgRoot.firstChild // Insert in the front of svg\n );\n if (!defs.contains) {\n // IE doesn't support contains method\n defs.contains = function (el) {\n const children = defs.children;\n if (!children) {\n return false;\n }\n for (let i = children.length - 1; i >= 0; --i) {\n if (children[i] === el) {\n return true;\n }\n }\n return false;\n };\n }\n return defs;\n }\n else {\n return null;\n }\n }\n else {\n return defs[0];\n }\n }\n\n resize(width: number | string, height: number | string) {\n const viewport = this._viewport;\n // FIXME Why ?\n viewport.style.display = 'none';\n\n // Save input w/h\n const opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n\n width = this._getSize(0);\n height = this._getSize(1);\n\n viewport.style.display = '';\n\n if (this._width !== width || this._height !== height) {\n this._width = width;\n this._height = height;\n\n const viewportStyle = viewport.style;\n viewportStyle.width = width + 'px';\n viewportStyle.height = height + 'px';\n\n const svgRoot = this._svgDom;\n // Set width by 'svgRoot.width = width' is invalid\n svgRoot.setAttribute('width', width + '');\n svgRoot.setAttribute('height', height + '');\n }\n\n if (this._backgroundNode) {\n this._backgroundNode.setAttribute('width', width as any);\n this._backgroundNode.setAttribute('height', height as any);\n }\n }\n\n /**\n * 获取绘图区域宽度\n */\n getWidth() {\n return this._width;\n }\n\n /**\n * 获取绘图区域高度\n */\n getHeight() {\n return this._height;\n }\n\n _getSize(whIdx: number) {\n const opts = this._opts;\n const wh = ['width', 'height'][whIdx] as 'width' | 'height';\n const cwh = ['clientWidth', 'clientHeight'][whIdx] as 'clientWidth' | 'clientHeight';\n const plt = ['paddingLeft', 'paddingTop'][whIdx] as 'paddingLeft' | 'paddingTop';\n const prb = ['paddingRight', 'paddingBottom'][whIdx] as 'paddingRight' | 'paddingBottom';\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh] as string);\n }\n\n const root = this.root;\n // IE8 does not support getComputedStyle, but it use VML.\n const stl = document.defaultView.getComputedStyle(root);\n\n return (\n (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)\n ) | 0;\n }\n\n dispose() {\n this.root.innerHTML = '';\n\n this._svgRoot\n = this._backgroundRoot\n = this._svgDom\n = this._backgroundNode\n = this._viewport\n = this.storage\n = null;\n }\n\n clear() {\n if (this._viewport) {\n this.root.removeChild(this._viewport);\n }\n }\n\n toDataURL() {\n this.refresh();\n const html = encodeURIComponent(this._svgDom.outerHTML.replace(/>\\n\\r<'));\n return 'data:image/svg+xml;charset=UTF-8,' + html;\n }\n refreshHover = createMethodNotSupport('refreshHover') as PainterBase['refreshHover'];\n pathToImage = createMethodNotSupport('pathToImage') as PainterBase['pathToImage'];\n configLayer = createMethodNotSupport('configLayer') as PainterBase['configLayer'];\n}\n\n\n// Not supported methods\nfunction createMethodNotSupport(method: string): any {\n return function () {\n util.logError('In SVG mode painter not support method \"' + method + '\"');\n };\n}\n\n\nexport default SVGPainter;","import './graphic';\nimport {registerPainter} from '../zrender';\nimport Painter from './Painter';\n\nregisterPainter('svg', Painter);"],"names":["clone","eventUtil.clientToLocal","dist","eventTool.stop","util.each","vec2.dist","timsort","util.indexOf","easing","easingFuncs","lerp","color.parse","requestAnimationFrame","zrUtil.map","zrUtil.noop","zrUtil.each","create","copy","mul","scale","matrix.identity","matrix.create","matrix.mul","matrix.copy","matrix.invert","vector.applyTransform","matrix.rotate","matrix.translate","matrix.scale","methods","PRIMARY_STATES_KEYS","EPSILON","v2Create","isNotAroundZero","v2DistSquare","mathMin","mathMax","vec2.create","cubicExtrema","curve.cubicExtrema","cubicAt","curve.cubicAt","quadraticExtremum","curve.quadraticExtremum","quadraticAt","curve.quadraticAt","min","max","vec2.min","vec2.max","mathCos","mathSin","mathSqrt","PI2","dpr","containStroke","curve.cubicProjectPoint","CMD","curve.cubicRootAt","curve.quadraticRootAt","line.containStroke","cubic.containStroke","quadratic.containStroke","arc.containStroke","pathContain.containStroke","pathContain.contain","v2ApplyTransform","PI","zrUtil.indexOf","roundRectHelper.buildPath","subPixelOptimizeOutputShape","distance","v2Distance","v2Min","v2Max","v2Clone","v2Sub","v2Scale","v2Add","buildPath","polyHelper.buildPath","Displayble","imageHelper.findExistImage","imageHelper.isImageReady","parsePercent","vec2.normalize","sin","cos","minTv","maxTv","HandlerProxy","zrUtil.bind","zrUtil.guid","IncrementalDisplayable","util.createCanvas","util.isObject","util.isGradientObject","util.isPatternObject","util.extend","util.merge","util.logError","Painter","isAroundZero","adjustTextY","zrUtil.logError","color","colorTool.parse","colorTool.toHex","parseInt10"],"mappings":"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,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAA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"} \ No newline at end of file diff --git a/dist/zrender.min.js b/dist/zrender.min.js index 7a0021299..d5c4a35b4 100644 --- a/dist/zrender.min.js +++ b/dist/zrender.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.zrender={})}(this,function(t){"use strict";function r(){return e++}var e=2311,_="object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?{browser:{},os:{},node:!1,wxa:!0,canvasSupported:!0,svgSupported:!1,touchEventsSupported:!0,domSupported:!1}:"undefined"==typeof document&&"undefined"!=typeof self?{browser:{},os:{},node:!1,worker:!0,canvasSupported:!0,domSupported:!1}:"undefined"==typeof navigator?{browser:{},os:{},node:!0,worker:!1,canvasSupported:!0,svgSupported:!0,domSupported:!1}:function(t){var e={},i=t.match(/Firefox\/([\d.]+)/),r=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),n=t.match(/Edge\/([\d.]+)/),a=/micromessenger/i.test(t);i&&(e.firefox=!0,e.version=i[1]);r&&(e.ie=!0,e.version=r[1]);n&&(e.edge=!0,e.version=n[1]);a&&(e.weChat=!0);return{browser:e,os:{},node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!=typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!e.ie&&!e.edge,pointerEventsSupported:"onpointerdown"in window&&(e.edge||e.ie&&11<=e.version),domSupported:"undefined"!=typeof document}}(navigator.userAgent);var s={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},h={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},l=Object.prototype.toString,i=Array.prototype,o=i.forEach,u=i.filter,n=i.slice,c=i.map,f=i.reduce,a={};function d(t){if(null==t||"object"!=typeof t)return t;var e=t,i=l.call(t);if("[object Array]"===i){if(!H(t)){e=[];for(var r=0,n=t.length;r>1)%2;s.cssText=["position:absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","width:0","height:0",r[h]+":0",n[l]+":0",r[1-h]+":auto",n[1-l]+":auto",""].join("!important;"),t.appendChild(o),i.push(o)}return i}(t,o),o);if(s)return s(mt,r,n),i.zrX=mt[0],void(i.zrY=mt[1])}i.zrX=i.zrY=0}function wt(t){return t||window.event}function bt(t,e,i){if(null!=(e=wt(e)).zrX)return e;var r=e.type;if(r&&0<=r.indexOf("touch")){var n="touchend"!==r?e.targetTouches[0]:e.changedTouches[0];n&&yt(t,n,e,i)}else yt(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&>.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function kt(){this._track=[]}var Tt=vt?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};function St(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}kt.prototype={constructor:kt,recognize:function(t,e,i){return this._doTrack(t,e,i),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,i){var r=t.touches;if(r){for(var n={points:[],touches:[],target:e,event:t},a=0,o=r.length;ar.getWidth()||i<0||i>r.getHeight()}Lt.prototype={constructor:Lt,setHandlerProxy:function(e){this.proxy&&this.proxy.dispose(),e&&(T(zt,function(t){e.on&&e.on(t,this[t],this)},this),e.handler=this),this.proxy=e},mousemove:function(t){var e=t.zrX,i=t.zrY,r=Bt(this,e,i),n=this._hovered,a=n.target;a&&!a.__zr&&(a=(n=this.findHover(n.x,n.y)).target);var o=this._hovered=r?{x:e,y:i}:this.findHover(e,i),s=o.target,h=this.proxy;h.setCursor&&h.setCursor(s?s.cursor:"default"),a&&s!==a&&this.dispatchToElement(n,"mouseout",t),this.dispatchToElement(o,"mousemove",t),s&&s!==a&&this.dispatchToElement(o,"mouseover",t)},mouseout:function(t){var e=t.zrEventControl,i=t.zrIsToLocalDOM;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&(i||this.trigger("globalout",{type:"globalout",event:t}))},resize:function(t){this._hovered={}},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){var r=(t=t||{}).target;if(!r||!r.silent){for(var n="on"+e,a=function(t,e,i){return{type:t,event:i,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta,zrByTouch:i.zrByTouch,which:i.which,stop:Pt}}(e,t,i);r&&(r[n]&&(a.cancelBubble=r[n].call(r,a)),r.trigger(e,a),r=r.parent,!a.cancelBubble););a.cancelBubble||(this.trigger(e,a),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[n]&&t[n].call(t,a),t.trigger&&t.trigger(e,a)}))}},findHover:function(t,e,i){for(var r=this.storage.getDisplayList(),n={x:t,y:e},a=r.length-1;0<=a;a--){var o;if(r[a]!==i&&!r[a].ignore&&(o=Dt(r[a],t,e))&&(n.topTarget||(n.topTarget=r[a]),o!==Mt)){n.target=r[a];break}}return n},processGesture:function(t,e){this._gestureMgr||(this._gestureMgr=new kt);var i=this._gestureMgr;"start"===e&&i.clear();var r=i.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&i.clear(),r){var n=r.type;t.gestureEvent=n,this.dispatchToElement({target:r.target},n,r.event)}}},T(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(o){Lt.prototype[o]=function(t){var e,i,r=t.zrX,n=t.zrY,a=Bt(this,r,n);if("mouseup"===o&&a||(i=(e=this.findHover(r,n)).target),"mousedown"===o)this._downEl=i,this._downPoint=[t.zrX,t.zrY],this._upEl=i;else if("mouseup"===o)this._upEl=i;else if("click"===o){if(this._downEl!==this._upEl||!this._downPoint||4=this._maxSize&&0>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,1),ve(t,e),e):void ce(e,0,0,0,1):7===n.length?0<=(r=parseInt(n.substr(1),16))&&r<=16777215?(ce(e,(16711680&r)>>16,(65280&r)>>8,255&r,1),ve(t,e),e):void ce(e,0,0,0,1):void 0;var a=n.indexOf("("),o=n.indexOf(")");if(-1!==a&&o+1===n.length){var s=n.substr(0,a),h=n.substr(a+1,o-(a+1)).split(","),l=1;switch(s){case"rgba":if(4!==h.length)return void ce(e,0,0,0,1);l=he(h.pop());case"rgb":return 3!==h.length?void ce(e,0,0,0,1):(ce(e,se(h[0]),se(h[1]),se(h[2]),l),ve(t,e),e);case"hsla":return 4!==h.length?void ce(e,0,0,0,1):(h[3]=he(h[3]),_e(h,e),ve(t,e),e);case"hsl":return 3!==h.length?void ce(e,0,0,0,1):(_e(h,e),ve(t,e),e);default:return}}ce(e,0,0,0,1)}}function _e(t,e){var i=(parseFloat(t[0])%360+360)%360/360,r=he(t[1]),n=he(t[2]),a=n<=.5?n*(r+1):n+r-n*r,o=2*n-a;return ce(e=e||[],ae(255*le(o,a,i+1/3)),ae(255*le(o,a,i)),ae(255*le(o,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function me(t){var e=ge(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function ye(t,e,i){if(e&&e.length&&0<=t&&t<=1){i=i||[];var r=t*(e.length-1),n=Math.floor(r),a=Math.ceil(r),o=e[n],s=e[a],h=r-n;return i[0]=ae(ue(o[0],s[0],h)),i[1]=ae(ue(o[1],s[1],h)),i[2]=ae(ue(o[2],s[2],h)),i[3]=oe(ue(o[3],s[3],h)),i}}var xe=ye;function we(t,e,i){if(e&&e.length&&0<=t&&t<=1){var r=t*(e.length-1),n=Math.floor(r),a=Math.ceil(r),o=ge(e[n]),s=ge(e[a]),h=r-n,l=ke([ae(ue(o[0],s[0],h)),ae(ue(o[1],s[1],h)),ae(ue(o[2],s[2],h)),oe(ue(o[3],s[3],h))],"rgba");return i?{color:l,leftIndex:n,rightIndex:a,value:r}:l}}var be=we;function ke(t,e){if(t&&t.length){var i=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(i+=","+t[3]),e+"("+i+")"}}var Te=(Object.freeze||Object)({parse:ge,lift:function(t,e){var i=ge(t);if(i){for(var r=0;r<3;r++)i[r]=e<0?i[r]*(1-e)|0:(255-i[r])*e+i[r]|0,255e);i++);i=Math.min(i-1,l-2)}A=e;var r=v[(P=i)+1]-v[i];if(0!=r)if(k=(e-v[i])/r,h)if(S=g[i],T=g[0===i?i:i-1],C=g[l-2=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new ti(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}};function ei(t){for(var e in t=t||{},Ye.call(this,t),t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0}ei.prototype={constructor:ei,isGroup:!0,type:"group",silent:!(ti.create=function(t){return new ti(t.x,t.y,t.width,t.height)}),children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i>>1])<0?h=a:s=1+a;var l=r-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);a(t,e[i+u])<0?h=u:o=u+1}return h}function hi(p,v){var o,s,g=ri,h=0,_=[];function e(t){var e=o[t],i=s[t],r=o[t+1],n=s[t+1];s[t]=i+n,t===h-3&&(o[t+1]=o[t+2],s[t+1]=s[t+2]),h--;var a=si(p[r],p,e,i,0,v);e+=a,0!==(i-=a)&&0!==(n=oi(p[e+i-1],p,r,n,n-1,v))&&(i<=n?function(t,e,i,r){var n=0;for(n=0;ns[t+1])break;e(t)}},this.forceMergeRuns=function(){for(;1>=1;return t+e}(n);do{if((a=ni(t,i,r,e))=e.maxIterations){t+=e.ellipsis;break}var s=0===o?Ui(t,n,e.ascCharWidth,e.cnCharWidth):0d)return{lines:[],width:0,height:0};A.textWidth=Hi(A.text,w);var k=y.textWidth,T=null==k||"auto"===k;if("string"==typeof k&&"%"===k.charAt(k.length-1))A.percentWidth=k,l.push(A),k=0;else{if(T){k=A.textWidth;var S=y.textBackgroundColor,C=S&&S.image;C&&Di(C=Ai(C))&&(k=Math.max(k,C.width*b/C.height))}var M=x?x[1]+x[3]:0;k+=M;var P=null!=f?f-_:null;null!=P&&Pr[0]){for(o=0;ot);o++);a=i[r[o]]}if(r.splice(o+1,0,t),!(i[t]=e).virtual)if(a){var h=a.dom;h.nextSibling?s.insertBefore(e.dom,h.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else Xe("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var i,r,n=this._zlevelList;for(r=0;rthis._ux||jn(e-this._yi)>this._uy||this._len<5;return this.addData(On.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,r,n,a){return this.addData(On.C,t,e,i,r,n,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,r,n,a):this._ctx.bezierCurveTo(t,e,i,r,n,a)),this._xi=n,this._yi=a,this},quadraticCurveTo:function(t,e,i,r){return this.addData(On.Q,t,e,i,r),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,r):this._ctx.quadraticCurveTo(t,e,i,r)),this._xi=i,this._yi=r,this},arc:function(t,e,i,r,n,a){return this.addData(On.A,t,e,i,i,r,n-r,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,r,n,a),this._xi=Vn(n)*i+t,this._yi=Xn(n)*i+e,this},arcTo:function(t,e,i,r,n){return this._ctx&&this._ctx.arcTo(t,e,i,r,n),this},rect:function(t,e,i,r){return this._ctx&&this._ctx.rect(t,e,i,r),this.addData(On.R,t,e,i,r),this},closePath:function(){this.addData(On.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t;for(var e=this._dashIdx=0,i=0;ie.length&&(this._expandData(),e=this.data);for(var i=0;ih||jn(o-n)>l||c===u-1)&&(t.lineTo(a,o),r=a,n=o);break;case On.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),r=s[c-2],n=s[c-1];break;case On.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),r=s[c-2],n=s[c-1];break;case On.A:var d=s[c++],p=s[c++],v=s[c++],g=s[c++],_=s[c++],m=s[c++],y=s[c++],x=s[c++],w=g=aa[r=0]+t&&o<=aa[1]+t?u:0}if(a){h=r;r=Kn(n),n=Kn(h)}else r=Kn(r),n=Kn(n);nMath.PI/2&&p<1.5*Math.PI&&(u=-u),c+=u)}}return c}function ua(t,e,i,r,n){for(var a=0,o=0,s=0,h=0,l=0,u=0;u=c&&f<=i+1){for(var r=[],n=0;n=c&&f<=n+1)return ls(u,e.components,l,h);p[t]=e}else p[t]=void 0}var s;d++}for(;d<=e;){var o=a();if(o)return o}},pushComponent:function(t,e,i){var r=t[t.length-1];r&&r.added===e&&r.removed===i?t[t.length-1]={count:r.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,r){for(var n=e.length,a=i.length,o=t.newPos,s=o-r,h=0;o+1')}}catch(t){Ts=function(t){return Ps.createElement("<"+t+' xmlns="'+Ss+'" class="zrvml">')}}var Ls,zs=Un.CMD,Ds=Math.round,Bs=Math.sqrt,Is=Math.abs,Os=Math.cos,Es=Math.sin,Rs=Math.max;if(!_.canvasSupported){var Fs=",",Hs="progid:DXImageTransform.Microsoft",Ns=21600,Ws=Ns/2,Vs=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=Ns+","+Ns,t.coordorigin="0,0"},Xs=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},qs=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},js=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},Ys=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},Us=_r,Gs=function(t,e,i){var r=ge(e);i=+i,isNaN(i)&&(i=1),r&&(t.color=Xs(r[0],r[1],r[2]),t.opacity=i*r[3])},Zs=function(t,e,i,r){var n="fill"===e,a=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(n||!n&&i.lineWidth)?(t[n?"filled":"stroked"]="true",i[e]instanceof qa&&js(t,a),a=a||As(e),n?function(t,e,i){var r,n,a=e.fill;if(null!=a)if(a instanceof qa){var o,s=0,h=[0,0],l=0,u=1,c=i.getBoundingRect(),f=c.width,d=c.height;if("linear"===a.type){o="gradient";var p=i.transform,v=[a.x*f,a.y*d],g=[a.x2*f,a.y2*d];p&&(nt(v,v,p),nt(g,g,p));var _=g[0]-v[0],m=g[1]-v[1];(s=180*Math.atan2(_,m)/Math.PI)<0&&(s+=360),s<1e-6&&(s=0)}else{o="gradientradial";v=[a.x*f,a.y*d],p=i.transform;var y=i.scale,x=f,w=d;h=[(v[0]-c.x)/x,(v[1]-c.y)/w],p&&nt(v,v,p),x/=y[0]*Ns,w/=y[1]*Ns;var b=Rs(x,w);l=0/b,u=2*a.r/b-l}var k=a.colorStops.slice();k.sort(function(t,e){return t.offset-e.offset});for(var T=k.length,S=[],C=[],M=0;M>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[h]+":0",n[l]+":0",i[1-h]+":auto",n[1-l]+":auto",""].join("!important;"),t.appendChild(a),r.push(a)}return r}(e,o),o,n);if(a)return a(t,r,i),1}}function St(t){return"CANVAS"===t.nodeName.toUpperCase()}var Tt="undefined"!=typeof window&&!!window.addEventListener,Ct=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,At=[];function Dt(t,e,r,i){return r=r||{},i||!_.canvasSupported?Mt(t,e,r):_.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(r.zrX=e.layerX,r.zrY=e.layerY):null!=e.offsetX?(r.zrX=e.offsetX,r.zrY=e.offsetY):Mt(t,e,r),r}function Mt(t,e,r){if(_.domSupported&&t.getBoundingClientRect){var i=e.clientX,n=e.clientY;if(St(t)){var o=t.getBoundingClientRect();return r.zrX=i-o.left,void(r.zrY=n-o.top)}if(kt(At,t,i,n))return r.zrX=At[0],void(r.zrY=At[1])}r.zrX=r.zrY=0}function Pt(t){return t||window.event}function Lt(t,e,r){if(null!=(e=Pt(e)).zrX)return e;var i,n,o=e.type;o&&0<=o.indexOf("touch")?(i="touchend"!==o?e.targetTouches[0]:e.changedTouches[0])&&Dt(t,i,e,r):(Dt(t,e,e,r),n=function(t){var e=t.wheelDelta;if(e)return e;var r=t.deltaX,i=t.deltaY;return null!=r&&null!=i?3*(0!==i?Math.abs(i):Math.abs(r))*(0i.getWidth()||r<0||r>i.getHeight()}k(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(a){qt.prototype[a]=function(t){var e,r,i=t.zrX,n=t.zrY,o=Ut(this,i,n);if("mouseup"===a&&o||(r=(e=this.findHover(i,n)).target),"mousedown"===a)this._downEl=r,this._downPoint=[t.zrX,t.zrY],this._upEl=r;else if("mouseup"===a)this._upEl=r;else if("click"===a){if(this._downEl!==this._upEl||!this._downPoint||4>>1])<0?h=o:s=1+o;var l=i-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);o(t,e[r+u])<0?h=u:a=u+1}return h}function te(d,y){var a,s,g=Zt,h=0,v=(d.length,[]);function e(t){var e=a[t],r=s[t],i=a[t+1],n=s[t+1];s[t]=r+n,t===h-3&&(a[t+1]=a[t+2],s[t+1]=s[t+2]),h--;var o=Jt(d[i],d,e,r,0,y);e+=o,0!=(r-=o)&&0!==(n=$t(d[e+r-1],d,i,n,n-1,y))&&(r<=n?function(t,e,r,i){var n=0;for(n=0;ns[t+1])break;e(t)}},forceMergeRuns:function(){for(;1>=1;return t+e}(n);do{(o=Kt(t,r,i,e))=this._maxSize&&0>4|(3840&i)>>8,240&i|(240&i)>>4,15&i|(15&i)<<4,1),Ae(t,e),e):void ke(e,0,0,0,1):7===n.length?0<=(i=parseInt(n.substr(1),16))&&i<=16777215?(ke(e,(16711680&i)>>16,(65280&i)>>8,255&i,1),Ae(t,e),e):void ke(e,0,0,0,1):void 0;var o=n.indexOf("("),a=n.indexOf(")");if(-1!==o&&a+1===n.length){var s=n.substr(0,o),h=n.substr(o+1,a-(o+1)).split(","),l=1;switch(s){case"rgba":if(4!==h.length)return void ke(e,0,0,0,1);l=xe(h.pop());case"rgb":return 3!==h.length?void ke(e,0,0,0,1):(ke(e,me(h[0]),me(h[1]),me(h[2]),l),Ae(t,e),e);case"hsla":return 4!==h.length?void ke(e,0,0,0,1):(h[3]=xe(h[3]),Me(h,e),Ae(t,e),e);case"hsl":return 3!==h.length?void ke(e,0,0,0,1):(Me(h,e),Ae(t,e),e);default:return}}ke(e,0,0,0,1)}}function Me(t,e){var r=(parseFloat(t[0])%360+360)%360/360,i=xe(t[1]),n=xe(t[2]),o=n<=.5?n*(i+1):n+i-n*i,a=2*n-o;return ke(e=e||[],ve(255*we(a,o,r+1/3)),ve(255*we(a,o,r)),ve(255*we(a,o,r-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Pe(t){var e=De(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Le(t,e,r){if(e&&e.length&&0<=t&&t<=1){r=r||[];var i=t*(e.length-1),n=Math.floor(i),o=Math.ceil(i),a=e[n],s=e[o],h=i-n;return r[0]=ve(be(a[0],s[0],h)),r[1]=ve(be(a[1],s[1],h)),r[2]=ve(be(a[2],s[2],h)),r[3]=_e(be(a[3],s[3],h)),r}}function ze(t,e,r){if(e&&e.length&&0<=t&&t<=1){var i=t*(e.length-1),n=Math.floor(i),o=Math.ceil(i),a=De(e[n]),s=De(e[o]),h=i-n,l=Oe([ve(be(a[0],s[0],h)),ve(be(a[1],s[1],h)),ve(be(a[2],s[2],h)),_e(be(a[3],s[3],h))],"rgba");return r?{color:l,leftIndex:n,rightIndex:o,value:i}:l}}function Oe(t,e){if(t&&t.length){var r=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(r+=","+t[3]),e+"("+r+")"}}function Ie(t,e){var r=De(t);return r?(.299*r[0]+.587*r[1]+.114*r[2])*r[3]/255+(1-r[3])*e:0}var Re=Object.freeze({__proto__:null,parse:De,lift:function(t,e){var r=De(t);if(r){for(var i=0;i<3;i++)r[i]=e<0?r[i]*(1-e)|0:(255-r[i])*e+r[i]|0,255=this.maxTime?this.maxTime=t:this._needsSort=!0;var r,i=this.keyframes,n=i.length;if(this.interpolable)if(M(e)){var o,a=M((r=e)&&r[0])?2:1;if(0e);l++);l=Math.min(l-1,o-2)}var u,c,p,f,d,y,g,v,_,m,x=n[l+1],w=n[l];w&&x&&(this._lastFrame=l,this._lastFramePercent=e,0!=(u=x.percent-w.percent)&&(c=(e-w.percent)/u,p=r?this._additiveValue:h?Ge:t[a],(0=r.x&&t<=r.x+r.width&&e>=r.y&&e<=r.y+r.height},Kr.prototype.clone=function(){return new Kr(this.x,this.y,this.width,this.height)},Kr.prototype.copy=function(t){Kr.copy(this,t)},Kr.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},Kr.create=function(t){return new Kr(t.x,t.y,t.width,t.height)},Kr.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},Kr.applyTransform=function(t,e,r){if(r){if(r[1]<1e-5&&-1e-5this._ux||xn(e-this._yi)>this._uy||this._len<5;return this.addData(hn.L,t,e),this._ctx&&r&&(this._needsDash?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),r&&(this._xi=t,this._yi=e),this},Sn.prototype.bezierCurveTo=function(t,e,r,i,n,o){return this.addData(hn.C,t,e,r,i,n,o),this._ctx&&(this._needsDash?this._dashedBezierTo(t,e,r,i,n,o):this._ctx.bezierCurveTo(t,e,r,i,n,o)),this._xi=n,this._yi=o,this},Sn.prototype.quadraticCurveTo=function(t,e,r,i){return this.addData(hn.Q,t,e,r,i),this._ctx&&(this._needsDash?this._dashedQuadraticTo(t,e,r,i):this._ctx.quadraticCurveTo(t,e,r,i)),this._xi=r,this._yi=i,this},Sn.prototype.arc=function(t,e,r,i,n,o){var a=n-i;return n=i+a,this.addData(hn.A,t,e,r,r,i,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,r,i,n,o),this._xi=vn(n)*r+t,this._yi=_n(n)*r+e,this},Sn.prototype.arcTo=function(t,e,r,i,n){return this._ctx&&this._ctx.arcTo(t,e,r,i,n),this},Sn.prototype.rect=function(t,e,r,i){return this._ctx&&this._ctx.rect(t,e,r,i),this.addData(hn.R,t,e,r,i),this},Sn.prototype.closePath=function(){this.addData(hn.Z);var t=this._ctx,e=this._x0,r=this._y0;return t&&(this._needsDash&&this._dashedLineTo(e,r),t.closePath()),this._xi=e,this._yi=r,this},Sn.prototype.fill=function(t){t&&t.fill(),this.toStatic()},Sn.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},Sn.prototype.setLineDash=function(t){if(t instanceof Array){this._lineDash=t;for(var e=this._dashIdx=0,r=0;rl.length&&(this._expandData(),l=this.data);for(var u=0;ur||xn(y)>i||c===e-1)&&(f=Math.sqrt(D*D+y*y),n=d,o=_);break;case hn.C:var g=t[c++],v=t[c++],d=t[c++],_=t[c++],m=t[c++],x=t[c++],f=function(t,e,r,i,n,o,a,s,h){for(var l=t,u=e,c=0,p=1/h,f=1;f<=h;f++){var d=f*p,y=Wi(t,r,n,a,d),g=Wi(e,i,o,s,d),v=y-l,_=g-u;c+=Math.sqrt(v*v+_*_),l=y,u=g}return c}(n,o,g,v,d,_,m,x,10),n=m,o=x;break;case hn.Q:f=function(t,e,r,i,n,o,a){for(var s=t,h=e,l=0,u=1/a,c=1;c<=a;c++){var p=c*u,f=qi(t,r,n,p),d=qi(e,i,o,p),y=f-s,g=d-h;l+=Math.sqrt(y*y+g*g),s=f,h=d}return l}(n,o,g=t[c++],v=t[c++],d=t[c++],_=t[c++],10),n=d,o=_;break;case hn.A:var w=t[c++],b=t[c++],k=t[c++],S=t[c++],T=t[c++],C=t[c++],A=C+T;c+=1,t[c++],1===c&&(a=vn(T)*k+w,s=_n(T)*S+b),f=gn(k,S)*yn(wn,Math.abs(C)),n=vn(A)*k+w,o=_n(A)*S+b;break;case hn.R:a=n=t[c++],s=o=t[c++],f=2*t[c++]+2*t[c++];break;case hn.Z:var D=a-n,y=s-o;f=Math.sqrt(D*D+y*y),n=a,o=s}0<=f&&(l+=h[u++]=f)}return this._pathLen=l},Sn.prototype.rebuildPath=function(t,e){var r,i,n,o,a,s,h,l,u=this.data,c=this._ux,p=this._uy,f=this._len,d=e<1,y=0,g=0;if(!d||(this._pathSegLen||this._calculateLength(),h=this._pathSegLen,l=e*this._pathLen))t:for(var v=0;vc||xn(s-o)>p||v===f-1){if(d){if(l=Rn[i=0]+t&&a<=Rn[1]+t?c:0}(n=o?(l=i,i=Mn(n),Mn(l)):(i=Mn(i),Mn(n)))Math.PI/2&&d<1.5*Math.PI&&(c=-c),p+=c))}return p}(d,y,v,_,_+m,x,k,n);h=Math.cos(_+m)*g+d,l=Math.sin(_+m)*v+y;break;case zn.R:u=h=t[p++],c=l=t[p++];if(w=u+t[p++],b=c+t[p++],r){if(Tn(u,c,w,c,e,i,n)||Tn(w,c,w,b,e,i,n)||Tn(w,b,u,b,e,i,n)||Tn(u,b,u,c,e,i,n))return!0}else s+=Ln(w,c,w,b,i,n),s+=Ln(u,b,u,c,i,n);break;case zn.Z:if(r){if(Tn(h,l,u,c,e,i,n))return!0}else s+=Ln(h,l,u,c,i,n);h=u,l=c}}return r||(o=l,a=c,Math.abs(o-a)=e.maxIterations){t+=e.ellipsis;break}var a=0===o?function(t,e,r,i){for(var n=0,o=0,a=t.length;oo){0i.width&&(o=e.split("\n"),y=!0),i.accumWidth=l):(u=Na(e,d,i.width,i.breakAll,i.accumWidth),i.accumWidth=u.accumWidth+h,a=u.linesWidths,o=u.lines)):o=e.split("\n");for(var g=0;gi.len()&&(ln[0]){for(h=0;ht);h++);s=i[n[h]]}n.splice(h+1,0,t),(i[t]=e).virtual||(s?(r=s.dom).nextSibling?a.insertBefore(e.dom,r.nextSibling):a.appendChild(e.dom):a.firstChild?a.insertBefore(e.dom,a.firstChild):a.appendChild(e.dom)),e.__painter=this}else y("Layer of zlevel "+t+" is not valid")},Xh.prototype.eachLayer=function(t,e){for(var r=this._zlevelList,i=0;i=c&&p<=e+1){for(var r=[],i=0;i=c&&p<=o+1)return function(t){for(var e=0,r=t.length,i=0,n=0;e\n\r<"))},Pl)),t.Arc=es,t.BezierCurve=ss,t.BoundingRect=Zr,t.Circle=So,t.CompoundPath=wa,t.Droplet=cs,t.Element=vi,t.Ellipse=Ro,t.Group=yo,t.Heart=ys,t.Image=xo,t.IncrementalDisplayable=Ta,t.Isogon=bs,t.Line=No,t.LinearGradient=ea,t.OrientedBoundingRect=ah,t.Path=jn,t.Pattern=eh,t.Point=Hr,t.Polygon=Go,t.Polyline=Ko,t.RadialGradient=Js,t.Rect=Lo,t.Ring=Cs,t.Rose=Os,t.Sector=Fs,t.Star=js,t.TSpan=oa,t.Text=ja,t.Trochoid=Ks,t.color=Re,t.dispose=function(t){t.dispose()},t.disposeAll=function(){for(var t in uh)uh.hasOwnProperty(t)&&uh[t].dispose();uh={}},t.getInstance=function(t){return uh[t]},t.init=function(t,e){var r=new ch(d(),t,e);return uh[r.id]=r},t.matrix=Mr,t.parseSVG=function(t,e){return(new la).parse(t,e)},t.path=fo,t.registerPainter=fh,t.util=Z,t.vector=ft,t.version="5.0.0-alpha.1",Object.defineProperty(t,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e1eb910a3..91ffec510 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "zrender", - "version": "4.3.1", + "version": "5.0.0-alpha.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -854,6 +854,41 @@ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + } + } + }, "@typescript-eslint/parser": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz", @@ -894,6 +929,29 @@ } } }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, "abab": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", @@ -4374,6 +4432,12 @@ "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", diff --git a/package.json b/package.json index 57fa247b3..357f9d5ef 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "rollup-plugin-typescript2": "^0.25.3", "rollup-plugin-uglify": "^6.0.4", "ts-jest": "^25.2.0", - "typescript": "^3.8.3", + "typescript": "3.8.3", "uglify-js": "^3.10.0" } }