| 
/* 
 | 
* 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 { __extends } from "tslib"; 
 | 
/** 
 | 
 * Simple view coordinate system 
 | 
 * Mapping given x, y to transformd view x, y 
 | 
 */ 
 | 
import * as vector from 'zrender/lib/core/vector.js'; 
 | 
import * as matrix from 'zrender/lib/core/matrix.js'; 
 | 
import BoundingRect from 'zrender/lib/core/BoundingRect.js'; 
 | 
import Transformable from 'zrender/lib/core/Transformable.js'; 
 | 
import { parsePercent } from '../util/number.js'; 
 | 
var v2ApplyTransform = vector.applyTransform; 
 | 
var View = /** @class */function (_super) { 
 | 
  __extends(View, _super); 
 | 
  function View(name) { 
 | 
    var _this = _super.call(this) || this; 
 | 
    _this.type = 'view'; 
 | 
    _this.dimensions = ['x', 'y']; 
 | 
    /** 
 | 
     * Represents the transform brought by roam/zoom. 
 | 
     * If `View['_viewRect']` applies roam transform, 
 | 
     * we can get the final displayed rect. 
 | 
     */ 
 | 
    _this._roamTransformable = new Transformable(); 
 | 
    /** 
 | 
     * Represents the transform from `View['_rect']` to `View['_viewRect']`. 
 | 
     */ 
 | 
    _this._rawTransformable = new Transformable(); 
 | 
    _this.name = name; 
 | 
    return _this; 
 | 
  } 
 | 
  View.prototype.setBoundingRect = function (x, y, width, height) { 
 | 
    this._rect = new BoundingRect(x, y, width, height); 
 | 
    return this._rect; 
 | 
  }; 
 | 
  /** 
 | 
   * @return {module:zrender/core/BoundingRect} 
 | 
   */ 
 | 
  View.prototype.getBoundingRect = function () { 
 | 
    return this._rect; 
 | 
  }; 
 | 
  View.prototype.setViewRect = function (x, y, width, height) { 
 | 
    this._transformTo(x, y, width, height); 
 | 
    this._viewRect = new BoundingRect(x, y, width, height); 
 | 
  }; 
 | 
  /** 
 | 
   * Transformed to particular position and size 
 | 
   */ 
 | 
  View.prototype._transformTo = function (x, y, width, height) { 
 | 
    var rect = this.getBoundingRect(); 
 | 
    var rawTransform = this._rawTransformable; 
 | 
    rawTransform.transform = rect.calculateTransform(new BoundingRect(x, y, width, height)); 
 | 
    var rawParent = rawTransform.parent; 
 | 
    rawTransform.parent = null; 
 | 
    rawTransform.decomposeTransform(); 
 | 
    rawTransform.parent = rawParent; 
 | 
    this._updateTransform(); 
 | 
  }; 
 | 
  /** 
 | 
   * Set center of view 
 | 
   */ 
 | 
  View.prototype.setCenter = function (centerCoord, api) { 
 | 
    if (!centerCoord) { 
 | 
      return; 
 | 
    } 
 | 
    this._center = [parsePercent(centerCoord[0], api.getWidth()), parsePercent(centerCoord[1], api.getHeight())]; 
 | 
    this._updateCenterAndZoom(); 
 | 
  }; 
 | 
  View.prototype.setZoom = function (zoom) { 
 | 
    zoom = zoom || 1; 
 | 
    var zoomLimit = this.zoomLimit; 
 | 
    if (zoomLimit) { 
 | 
      if (zoomLimit.max != null) { 
 | 
        zoom = Math.min(zoomLimit.max, zoom); 
 | 
      } 
 | 
      if (zoomLimit.min != null) { 
 | 
        zoom = Math.max(zoomLimit.min, zoom); 
 | 
      } 
 | 
    } 
 | 
    this._zoom = zoom; 
 | 
    this._updateCenterAndZoom(); 
 | 
  }; 
 | 
  /** 
 | 
   * Get default center without roam 
 | 
   */ 
 | 
  View.prototype.getDefaultCenter = function () { 
 | 
    // Rect before any transform 
 | 
    var rawRect = this.getBoundingRect(); 
 | 
    var cx = rawRect.x + rawRect.width / 2; 
 | 
    var cy = rawRect.y + rawRect.height / 2; 
 | 
    return [cx, cy]; 
 | 
  }; 
 | 
  View.prototype.getCenter = function () { 
 | 
    return this._center || this.getDefaultCenter(); 
 | 
  }; 
 | 
  View.prototype.getZoom = function () { 
 | 
    return this._zoom || 1; 
 | 
  }; 
 | 
  View.prototype.getRoamTransform = function () { 
 | 
    return this._roamTransformable.getLocalTransform(); 
 | 
  }; 
 | 
  /** 
 | 
   * Remove roam 
 | 
   */ 
 | 
  View.prototype._updateCenterAndZoom = function () { 
 | 
    // Must update after view transform updated 
 | 
    var rawTransformMatrix = this._rawTransformable.getLocalTransform(); 
 | 
    var roamTransform = this._roamTransformable; 
 | 
    var defaultCenter = this.getDefaultCenter(); 
 | 
    var center = this.getCenter(); 
 | 
    var zoom = this.getZoom(); 
 | 
    center = vector.applyTransform([], center, rawTransformMatrix); 
 | 
    defaultCenter = vector.applyTransform([], defaultCenter, rawTransformMatrix); 
 | 
    roamTransform.originX = center[0]; 
 | 
    roamTransform.originY = center[1]; 
 | 
    roamTransform.x = defaultCenter[0] - center[0]; 
 | 
    roamTransform.y = defaultCenter[1] - center[1]; 
 | 
    roamTransform.scaleX = roamTransform.scaleY = zoom; 
 | 
    this._updateTransform(); 
 | 
  }; 
 | 
  /** 
 | 
   * Update transform props on `this` based on the current 
 | 
   * `this._roamTransformable` and `this._rawTransformable`. 
 | 
   */ 
 | 
  View.prototype._updateTransform = function () { 
 | 
    var roamTransformable = this._roamTransformable; 
 | 
    var rawTransformable = this._rawTransformable; 
 | 
    rawTransformable.parent = roamTransformable; 
 | 
    roamTransformable.updateTransform(); 
 | 
    rawTransformable.updateTransform(); 
 | 
    matrix.copy(this.transform || (this.transform = []), rawTransformable.transform || matrix.create()); 
 | 
    this._rawTransform = rawTransformable.getLocalTransform(); 
 | 
    this.invTransform = this.invTransform || []; 
 | 
    matrix.invert(this.invTransform, this.transform); 
 | 
    this.decomposeTransform(); 
 | 
  }; 
 | 
  View.prototype.getTransformInfo = function () { 
 | 
    var rawTransformable = this._rawTransformable; 
 | 
    var roamTransformable = this._roamTransformable; 
 | 
    // Because roamTransformabel has `originX/originY` modified, 
 | 
    // but the caller of `getTransformInfo` can not handle `originX/originY`, 
 | 
    // so need to recalculate them. 
 | 
    var dummyTransformable = new Transformable(); 
 | 
    dummyTransformable.transform = roamTransformable.transform; 
 | 
    dummyTransformable.decomposeTransform(); 
 | 
    return { 
 | 
      roam: { 
 | 
        x: dummyTransformable.x, 
 | 
        y: dummyTransformable.y, 
 | 
        scaleX: dummyTransformable.scaleX, 
 | 
        scaleY: dummyTransformable.scaleY 
 | 
      }, 
 | 
      raw: { 
 | 
        x: rawTransformable.x, 
 | 
        y: rawTransformable.y, 
 | 
        scaleX: rawTransformable.scaleX, 
 | 
        scaleY: rawTransformable.scaleY 
 | 
      } 
 | 
    }; 
 | 
  }; 
 | 
  View.prototype.getViewRect = function () { 
 | 
    return this._viewRect; 
 | 
  }; 
 | 
  /** 
 | 
   * Get view rect after roam transform 
 | 
   */ 
 | 
  View.prototype.getViewRectAfterRoam = function () { 
 | 
    var rect = this.getBoundingRect().clone(); 
 | 
    rect.applyTransform(this.transform); 
 | 
    return rect; 
 | 
  }; 
 | 
  /** 
 | 
   * Convert a single (lon, lat) data item to (x, y) point. 
 | 
   */ 
 | 
  View.prototype.dataToPoint = function (data, noRoam, out) { 
 | 
    var transform = noRoam ? this._rawTransform : this.transform; 
 | 
    out = out || []; 
 | 
    return transform ? v2ApplyTransform(out, data, transform) : vector.copy(out, data); 
 | 
  }; 
 | 
  /** 
 | 
   * Convert a (x, y) point to (lon, lat) data 
 | 
   */ 
 | 
  View.prototype.pointToData = function (point) { 
 | 
    var invTransform = this.invTransform; 
 | 
    return invTransform ? v2ApplyTransform([], point, invTransform) : [point[0], point[1]]; 
 | 
  }; 
 | 
  View.prototype.convertToPixel = function (ecModel, finder, value) { 
 | 
    var coordSys = getCoordSys(finder); 
 | 
    return coordSys === this ? coordSys.dataToPoint(value) : null; 
 | 
  }; 
 | 
  View.prototype.convertFromPixel = function (ecModel, finder, pixel) { 
 | 
    var coordSys = getCoordSys(finder); 
 | 
    return coordSys === this ? coordSys.pointToData(pixel) : null; 
 | 
  }; 
 | 
  /** 
 | 
   * @implements 
 | 
   */ 
 | 
  View.prototype.containPoint = function (point) { 
 | 
    return this.getViewRectAfterRoam().contain(point[0], point[1]); 
 | 
  }; 
 | 
  View.dimensions = ['x', 'y']; 
 | 
  return View; 
 | 
}(Transformable); 
 | 
function getCoordSys(finder) { 
 | 
  var seriesModel = finder.seriesModel; 
 | 
  return seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph. 
 | 
} 
 | 
export default View; 
 |