提交 34cee641 编写于 作者: P pissang

Fix setDirty of updateTransform (by 100pah).

上级 db620045
......@@ -858,26 +858,26 @@ var updateMethods = {
ChartView.markUpdateMethod(payload, 'updateTransform');
var seriesModels = [];
var dirtyMap = zrUtil.createHashMap();
ecModel.eachSeries(function (seriesModel) {
var chartView = ecIns._chartsMap[seriesModel.__viewId];
if (chartView.updateTransform) {
var result = chartView.updateTransform
&& chartView.updateTransform(seriesModel, ecModel, api, payload);
result && result.update && seriesModels.push(seriesModel);
result && result.update && dirtyMap.set(seriesModel.uid, 1);
}
else {
seriesModels.push(seriesModel);
dirtyMap.set(seriesModel.uid, 1);
}
});
// Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
// this._scheduler.performVisualTasks(visualFuncs, ecModel, payload, 'layout', true);
this._scheduler.performVisualTasks(
visualFuncs, ecModel, payload, {setDirty: true, seriesModels: seriesModels}
visualFuncs, ecModel, payload, {setDirty: true, dirtyMap: dirtyMap}
);
renderSeries(this, ecModel, this._api, payload, seriesModels);
renderSeries(this, ecModel, this._api, payload, dirtyMap);
performPostUpdateFuncs(ecModel, this._api);
},
......@@ -1412,18 +1412,21 @@ function render(ecIns, ecModel, api, payload) {
* Render each chart and component
* @private
*/
function renderSeries(ecIns, ecModel, api, payload, dirtySeriesModels) {
function renderSeries(ecIns, ecModel, api, payload, dirtyMap) {
// Render all charts
var scheduler = ecIns._scheduler;
var unfinished;
dirtySeriesModels ? each(dirtySeriesModels, doEach) : ecModel.eachSeries(doEach);
function doEach(seriesModel) {
ecModel.eachSeries(function (seriesModel) {
var chartView = ecIns._chartsMap[seriesModel.__viewId];
chartView.__alive = true;
var renderTask = chartView.renderTask;
scheduler.updatePayload(renderTask, payload);
dirtySeriesModels && renderTask.dirty();
if (dirtyMap && dirtyMap.get(seriesModel.uid)) {
renderTask.dirty();
}
unfinished |= renderTask.perform(scheduler.getPerformArgs(renderTask));
chartView.group.silent = !!seriesModel.get('silent');
......@@ -1431,7 +1434,7 @@ function renderSeries(ecIns, ecModel, api, payload, dirtySeriesModels) {
updateZ(seriesModel, chartView);
updateBlend(seriesModel, chartView);
}
});
scheduler.unfinished |= unfinished;
// If use hover layer
......
......@@ -150,12 +150,14 @@ function performStageTasks(scheduler, stageHandlers, ecModel, payload, opt) {
var overallTask = stageHandlerRecord.overallTask;
if (overallTask) {
if (opt.setDirty) {
overallTask.dirty();
each(overallTask.agentStubs, function (stub) {
var overallNeedDirty;
each(overallTask.agentStubs, function (stub) {
if (needSetDirty(opt, stub)) {
stub.dirty();
});
}
overallNeedDirty = true;
}
});
overallNeedDirty && overallTask.dirty();
updatePayload(overallTask, payload);
var performArgs = scheduler.getPerformArgs(overallTask, opt.block);
// Execute stubs firstly, which may set the overall task dirty,
......@@ -166,27 +168,30 @@ function performStageTasks(scheduler, stageHandlers, ecModel, payload, opt) {
unfinished |= overallTask.perform(performArgs);
}
else if (seriesTaskMap) {
opt.seriesModels
? each(opt.seriesModels, eachSeries)
: ecModel.eachRawSeries(eachSeries);
}
function eachSeries(seriesModel) {
var task = seriesTaskMap.get(seriesModel.uid);
if (!task) {
return;
}
opt.setDirty && task.dirty();
var performArgs = scheduler.getPerformArgs(task, opt.block);
// ??? chck skip necessary.
performArgs.skip = !stageHandler.processRawSeries && ecModel.isSeriesFiltered(seriesModel);
updatePayload(task, payload);
unfinished |= task.perform(performArgs);
ecModel.eachRawSeries(function (seriesModel) {
var pipelineId = seriesModel.uid;
var task = seriesTaskMap.get(pipelineId);
if (!task) {
return;
}
if (needSetDirty(opt, task)) {
task.dirty();
}
var performArgs = scheduler.getPerformArgs(task, opt.block);
// ??? chck skip necessary.
performArgs.skip = !stageHandler.processRawSeries && ecModel.isSeriesFiltered(seriesModel);
updatePayload(task, payload);
unfinished |= task.perform(performArgs);
});
}
});
function needSetDirty(opt, task) {
return opt.setDirty && (!opt.dirtyMap || opt.dirtyMap.get(task.__pipelineId));
}
scheduler.unfinished |= unfinished;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册