Spaces:
Running
Running
| /* | |
| * 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 * as zrUtil from 'zrender/src/core/util'; | |
| import * as graphic from '../../util/graphic'; | |
| import { makeInner } from '../../util/model'; | |
| import GridModel from '../../coord/cartesian/GridModel'; | |
| import type SingleAxisView from './SingleAxisView'; | |
| import type CartesianAxisView from './CartesianAxisView'; | |
| import type SingleAxisModel from '../../coord/single/AxisModel'; | |
| import type CartesianAxisModel from '../../coord/cartesian/AxisModel'; | |
| import AxisView from './AxisView'; | |
| const inner = makeInner<{ | |
| // Hash map of color index | |
| splitAreaColors: zrUtil.HashMap<number> | |
| }, AxisView>(); | |
| export function rectCoordAxisBuildSplitArea( | |
| axisView: SingleAxisView | CartesianAxisView, | |
| axisGroup: graphic.Group, | |
| axisModel: SingleAxisModel | CartesianAxisModel, | |
| gridModel: GridModel | SingleAxisModel | |
| ) { | |
| const axis = axisModel.axis; | |
| if (axis.scale.isBlank()) { | |
| return; | |
| } | |
| // TODO: TYPE | |
| const splitAreaModel = (axisModel as CartesianAxisModel).getModel('splitArea'); | |
| const areaStyleModel = splitAreaModel.getModel('areaStyle'); | |
| let areaColors = areaStyleModel.get('color'); | |
| const gridRect = gridModel.coordinateSystem.getRect(); | |
| const ticksCoords = axis.getTicksCoords({ | |
| tickModel: splitAreaModel, | |
| clamp: true | |
| }); | |
| if (!ticksCoords.length) { | |
| return; | |
| } | |
| // For Making appropriate splitArea animation, the color and anid | |
| // should be corresponding to previous one if possible. | |
| const areaColorsLen = areaColors.length; | |
| const lastSplitAreaColors = inner(axisView).splitAreaColors; | |
| const newSplitAreaColors = zrUtil.createHashMap<number>(); | |
| let colorIndex = 0; | |
| if (lastSplitAreaColors) { | |
| for (let i = 0; i < ticksCoords.length; i++) { | |
| const cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue); | |
| if (cIndex != null) { | |
| colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen; | |
| break; | |
| } | |
| } | |
| } | |
| let prev = axis.toGlobalCoord(ticksCoords[0].coord); | |
| const areaStyle = areaStyleModel.getAreaStyle(); | |
| areaColors = zrUtil.isArray(areaColors) ? areaColors : [areaColors]; | |
| for (let i = 1; i < ticksCoords.length; i++) { | |
| const tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); | |
| let x; | |
| let y; | |
| let width; | |
| let height; | |
| if (axis.isHorizontal()) { | |
| x = prev; | |
| y = gridRect.y; | |
| width = tickCoord - x; | |
| height = gridRect.height; | |
| prev = x + width; | |
| } | |
| else { | |
| x = gridRect.x; | |
| y = prev; | |
| width = gridRect.width; | |
| height = tickCoord - y; | |
| prev = y + height; | |
| } | |
| const tickValue = ticksCoords[i - 1].tickValue; | |
| tickValue != null && newSplitAreaColors.set(tickValue, colorIndex); | |
| axisGroup.add(new graphic.Rect({ | |
| anid: tickValue != null ? 'area_' + tickValue : null, | |
| shape: { | |
| x: x, | |
| y: y, | |
| width: width, | |
| height: height | |
| }, | |
| style: zrUtil.defaults({ | |
| fill: areaColors[colorIndex] | |
| }, areaStyle), | |
| autoBatch: true, | |
| silent: true | |
| })); | |
| colorIndex = (colorIndex + 1) % areaColorsLen; | |
| } | |
| inner(axisView).splitAreaColors = newSplitAreaColors; | |
| } | |
| export function rectCoordAxisHandleRemove(axisView: SingleAxisView | CartesianAxisView) { | |
| inner(axisView).splitAreaColors = null; | |
| } | |