import * as matrix from 'zrender/src/core/matrix'; function createTransform(zoom) { let transform = matrix.create(); transform = matrix.scale(matrix.create(), transform, [zoom.scale, zoom.scale]); transform = matrix.translate(matrix.create(), transform, [zoom.offsetX, zoom.offsetY]); return transform; } function createBoundingRect(view) { let rect = view.getBoundingRect(); let scale = view.scale[0]; let offsetX = view.position[0]; let offsetY = view.position[1]; rect.width = rect.width * scale; rect.height = rect.height * scale; rect.x = rect.x * scale + offsetX; rect.y = rect.y * scale + offsetY; return rect; } class transformController { constructor(painter) { this.$painter = painter; this.$zr = painter.$zr; this.parentLevel = painter.parentLevel; this.rect = {x:0, y:0, width: this.$zr.getWidth(), height: this.$zr.getHeight()}; this.transform = createTransform({scale: 1, offsetX: 0, offsetY: 0}); } checkVisible(view) { return createBoundingRect(view).intersect(this.rect); } revisibleView(view) { if (this.checkVisible(view)) { view.show(); } else { view.hide(); } view.dirty(); } transformView(view) { if (view) { view.transform = this.transform; view.decomposeTransform(); this.revisibleView(view); } return view; } transformAll () { this.parentLevel.eachChild((level) => { level.eachChild((view) => { this.transformView(view); }); }); } revisibleAll() { this.parentLevel.eachChild((level) => { level.eachChild((view) => { this.revisibleView(view); }); }); } updateTransform(zoom) { this.transform = createTransform(zoom); this.transformAll(); } } export default transformController;