/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { isFunction, extend, createHashMap } from 'zrender/lib/core/util.js'; import makeStyleMapper from '../model/mixin/makeStyleMapper.js'; import { ITEM_STYLE_KEY_MAP } from '../model/mixin/itemStyle.js'; import { LINE_STYLE_KEY_MAP } from '../model/mixin/lineStyle.js'; import Model from '../model/Model.js'; import { makeInner } from '../util/model.js'; var inner = makeInner(); var defaultStyleMappers = { itemStyle: makeStyleMapper(ITEM_STYLE_KEY_MAP, true), lineStyle: makeStyleMapper(LINE_STYLE_KEY_MAP, true) }; var defaultColorKey = { lineStyle: 'stroke', itemStyle: 'fill' }; function getStyleMapper(seriesModel, stylePath) { var styleMapper = seriesModel.visualStyleMapper || defaultStyleMappers[stylePath]; if (!styleMapper) { console.warn("Unknown style type '" + stylePath + "'."); return defaultStyleMappers.itemStyle; } return styleMapper; } function getDefaultColorKey(seriesModel, stylePath) { // return defaultColorKey[stylePath] || var colorKey = seriesModel.visualDrawType || defaultColorKey[stylePath]; if (!colorKey) { console.warn("Unknown style type '" + stylePath + "'."); return 'fill'; } return colorKey; } var seriesStyleTask = { createOnAllSeries: true, performRawSeries: true, reset: function (seriesModel, ecModel) { var data = seriesModel.getData(); var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; // Set in itemStyle var styleModel = seriesModel.getModel(stylePath); var getStyle = getStyleMapper(seriesModel, stylePath); var globalStyle = getStyle(styleModel); var decalOption = styleModel.getShallow('decal'); if (decalOption) { data.setVisual('decal', decalOption); decalOption.dirty = true; } // TODO var colorKey = getDefaultColorKey(seriesModel, stylePath); var color = globalStyle[colorKey]; // TODO style callback var colorCallback = isFunction(color) ? color : null; var hasAutoColor = globalStyle.fill === 'auto' || globalStyle.stroke === 'auto'; // Get from color palette by default. if (!globalStyle[colorKey] || colorCallback || hasAutoColor) { // Note: If some series has color specified (e.g., by itemStyle.color), we DO NOT // make it effect palette. Because some scenarios users need to make some series // transparent or as background, which should better not effect the palette. var colorPalette = seriesModel.getColorFromPalette( // TODO series count changed. seriesModel.name, null, ecModel.getSeriesCount()); if (!globalStyle[colorKey]) { globalStyle[colorKey] = colorPalette; data.setVisual('colorFromPalette', true); } globalStyle.fill = globalStyle.fill === 'auto' || isFunction(globalStyle.fill) ? colorPalette : globalStyle.fill; globalStyle.stroke = globalStyle.stroke === 'auto' || isFunction(globalStyle.stroke) ? colorPalette : globalStyle.stroke; } data.setVisual('style', globalStyle); data.setVisual('drawType', colorKey); // Only visible series has each data be visual encoded if (!ecModel.isSeriesFiltered(seriesModel) && colorCallback) { data.setVisual('colorFromPalette', false); return { dataEach: function (data, idx) { var dataParams = seriesModel.getDataParams(idx); var itemStyle = extend({}, globalStyle); itemStyle[colorKey] = colorCallback(dataParams); data.setItemVisual(idx, 'style', itemStyle); } }; } } }; var sharedModel = new Model(); var dataStyleTask = { createOnAllSeries: true, performRawSeries: true, reset: function (seriesModel, ecModel) { if (seriesModel.ignoreStyleOnData || ecModel.isSeriesFiltered(seriesModel)) { return; } var data = seriesModel.getData(); var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; // Set in itemStyle var getStyle = getStyleMapper(seriesModel, stylePath); var colorKey = data.getVisual('drawType'); return { dataEach: data.hasItemOption ? function (data, idx) { // Not use getItemModel for performance considuration var rawItem = data.getRawDataItem(idx); if (rawItem && rawItem[stylePath]) { sharedModel.option = rawItem[stylePath]; var style = getStyle(sharedModel); var existsStyle = data.ensureUniqueItemVisual(idx, 'style'); extend(existsStyle, style); if (sharedModel.option.decal) { data.setItemVisual(idx, 'decal', sharedModel.option.decal); sharedModel.option.decal.dirty = true; } if (colorKey in style) { data.setItemVisual(idx, 'colorFromPalette', false); } } } : null }; } }; // Pick color from palette for the data which has not been set with color yet. // Note: do not support stream rendering. No such cases yet. var dataColorPaletteTask = { performRawSeries: true, overallReset: function (ecModel) { // Each type of series uses one scope. // Pie and funnel are using different scopes. var paletteScopeGroupByType = createHashMap(); ecModel.eachSeries(function (seriesModel) { var colorBy = seriesModel.getColorBy(); if (seriesModel.isColorBySeries()) { return; } var key = seriesModel.type + '-' + colorBy; var colorScope = paletteScopeGroupByType.get(key); if (!colorScope) { colorScope = {}; paletteScopeGroupByType.set(key, colorScope); } inner(seriesModel).scope = colorScope; }); ecModel.eachSeries(function (seriesModel) { if (seriesModel.isColorBySeries() || ecModel.isSeriesFiltered(seriesModel)) { return; } var dataAll = seriesModel.getRawData(); var idxMap = {}; var data = seriesModel.getData(); var colorScope = inner(seriesModel).scope; var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; var colorKey = getDefaultColorKey(seriesModel, stylePath); data.each(function (idx) { var rawIdx = data.getRawIndex(idx); idxMap[rawIdx] = idx; }); // Iterate on data before filtered. To make sure color from palette can be // Consistent when toggling legend. dataAll.each(function (rawIdx) { var idx = idxMap[rawIdx]; var fromPalette = data.getItemVisual(idx, 'colorFromPalette'); // Get color from palette for each data only when the color is inherited from series color, which is // also picked from color palette. So following situation is not in the case: // 1. series.itemStyle.color is set // 2. color is encoded by visualMap if (fromPalette) { var itemStyle = data.ensureUniqueItemVisual(idx, 'style'); var name_1 = dataAll.getName(rawIdx) || rawIdx + ''; var dataCount = dataAll.count(); itemStyle[colorKey] = seriesModel.getColorFromPalette(name_1, colorScope, dataCount); } }); }); } }; export { seriesStyleTask, dataStyleTask, dataColorPaletteTask };