Skip to content

Commit

Permalink
Merge pull request #11890 from newraina/fix-11690
Browse files Browse the repository at this point in the history
fix: add missing splitArea support for singleAxis #11690
  • Loading branch information
pissang authored Jan 6, 2020
2 parents 7824ae4 + 9269cf3 commit 7d23849
Showing 1 changed file with 106 additions and 4 deletions.
110 changes: 106 additions & 4 deletions src/component/axis/SingleAxisView.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ var axisBuilderAttrs = [
'axisLine', 'axisTickLabel', 'axisName'
];

var selfBuilderAttr = 'splitLine';
var selfBuilderAttrs = ['splitArea', 'splitLine'];

var SingleAxisView = AxisView.extend({

Expand All @@ -42,17 +42,26 @@ var SingleAxisView = AxisView.extend({

group.removeAll();

var oldAxisGroup = this._axisGroup;
this._axisGroup = new graphic.Group();

var layout = singleAxisHelper.layout(axisModel);

var axisBuilder = new AxisBuilder(axisModel, layout);

zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);

group.add(this._axisGroup);
group.add(axisBuilder.getGroup());

if (axisModel.get(selfBuilderAttr + '.show')) {
this['_' + selfBuilderAttr](axisModel);
}
var gridModel = axisModel.getCoordSysModel();
zrUtil.each(selfBuilderAttrs, function (name) {
if (axisModel.get(name + '.show')) {
this['_' + name](axisModel, gridModel);
}
}, this);

graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);

SingleAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);
},
Expand Down Expand Up @@ -125,6 +134,99 @@ var SingleAxisView = AxisView.extend({
silent: true
}));
}
},

/**
* @param {module:echarts/coord/cartesian/AxisModel} axisModel
* @param {module:echarts/coord/cartesian/GridModel} gridModel
* @private
*/
_splitArea: function (axisModel, gridModel) {
var axis = axisModel.axis;

if (axis.scale.isBlank()) {
return;
}

var splitAreaModel = axisModel.getModel('splitArea');
var areaStyleModel = splitAreaModel.getModel('areaStyle');
var areaColors = areaStyleModel.get('color');

var gridRect = gridModel.coordinateSystem.getRect();

var 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.
var areaColorsLen = areaColors.length;
var lastSplitAreaColors = this._splitAreaColors;
var newSplitAreaColors = zrUtil.createHashMap();
var colorIndex = 0;
if (lastSplitAreaColors) {
for (var i = 0; i < ticksCoords.length; i++) {
var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue);
if (cIndex != null) {
colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen;
break;
}
}
}

var prev = axis.toGlobalCoord(ticksCoords[0].coord);

var areaStyle = areaStyleModel.getAreaStyle();
areaColors = zrUtil.isArray(areaColors) ? areaColors : [areaColors];

for (var i = 1; i < ticksCoords.length; i++) {
var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);

var x;
var y;
var width;
var 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;
}

var tickValue = ticksCoords[i - 1].tickValue;
tickValue != null && newSplitAreaColors.set(tickValue, colorIndex);

this._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),
silent: true
}));

colorIndex = (colorIndex + 1) % areaColorsLen;
}

this._splitAreaColors = newSplitAreaColors;
}
});

Expand Down

0 comments on commit 7d23849

Please sign in to comment.