This is an automated email from the ASF dual-hosted git repository.

susiwen8 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/echarts.git


The following commit(s) were added to refs/heads/master by this push:
     new bc641254a feat(View): `View` center supports `string` (#16904)
bc641254a is described below

commit bc641254a293400cd9e1b0415753627578b786a2
Author: susiwen8 <[email protected]>
AuthorDate: Sun May 1 18:00:51 2022 +0800

    feat(View): `View` center supports `string` (#16904)
    
    * fix(graphe):  graphe center don't support string
    
    * feat(roam): `View` center support string
    
    * test(roam): add test case
    
    * fix: use `extensionApi` to get container `height` and `width`
    
    * fix: add params
    
    * fix(roam): move `api` to `setCenter`
    
    * fix: `setCenter` params are required
---
 src/action/roamHelper.ts      |  8 +++++---
 src/chart/graph/createView.ts |  2 +-
 src/chart/graph/install.ts    |  5 +++--
 src/chart/tree/TreeView.ts    |  6 +++---
 src/chart/tree/treeAction.ts  |  5 +++--
 src/component/geo/install.ts  |  5 +++--
 src/coord/View.ts             | 11 +++++++----
 src/coord/geo/geoCreator.ts   |  2 +-
 src/util/types.ts             |  2 +-
 test/graph-simple.html        |  1 +
 test/tree-legend.html         |  3 ++-
 11 files changed, 30 insertions(+), 20 deletions(-)

diff --git a/src/action/roamHelper.ts b/src/action/roamHelper.ts
index b5f64bd6d..d1721a93c 100644
--- a/src/action/roamHelper.ts
+++ b/src/action/roamHelper.ts
@@ -19,6 +19,7 @@
 
 import type Geo from '../coord/geo/Geo';
 import type View from '../coord/View';
+import type ExtensionAPI from '../core/ExtensionAPI';
 import type { Payload } from '../util/types';
 
 export interface RoamPaylod extends Payload {
@@ -42,7 +43,8 @@ export function updateCenterAndZoom(
     zoomLimit?: {
         min?: number,
         max?: number
-    }
+    },
+    api?: ExtensionAPI
 ) {
     const previousZoom = view.getZoom();
     const center = view.getCenter();
@@ -56,7 +58,7 @@ export function updateCenterAndZoom(
         point[0] -= payload.dx;
         point[1] -= payload.dy;
 
-        view.setCenter(getCenterCoord(view, point));
+        view.setCenter(getCenterCoord(view, point), api);
     }
     if (zoom != null) {
         if (zoomLimit) {
@@ -79,7 +81,7 @@ export function updateCenterAndZoom(
 
         view.updateTransform();
         // Get the new center
-        view.setCenter(getCenterCoord(view, point));
+        view.setCenter(getCenterCoord(view, point), api);
         view.setZoom(zoom * previousZoom);
     }
 
diff --git a/src/chart/graph/createView.ts b/src/chart/graph/createView.ts
index 11324eb8f..238c4b618 100644
--- a/src/chart/graph/createView.ts
+++ b/src/chart/graph/createView.ts
@@ -88,7 +88,7 @@ export default function createViewCoordSys(ecModel: 
GlobalModel, api: ExtensionA
             );
 
             // Update roam info
-            viewCoordSys.setCenter(seriesModel.get('center'));
+            viewCoordSys.setCenter(seriesModel.get('center'), api);
             viewCoordSys.setZoom(seriesModel.get('zoom'));
 
             viewList.push(viewCoordSys);
diff --git a/src/chart/graph/install.ts b/src/chart/graph/install.ts
index 38b95c59d..b917be00e 100644
--- a/src/chart/graph/install.ts
+++ b/src/chart/graph/install.ts
@@ -32,6 +32,7 @@ import GraphSeriesModel from './GraphSeries';
 import { RoamPaylod, updateCenterAndZoom } from '../../action/roamHelper';
 import GlobalModel from '../../model/Global';
 import { noop } from 'zrender/src/core/util';
+import type ExtensionAPI from '../../core/ExtensionAPI';
 
 const actionInfo = {
     type: 'graphRoam',
@@ -72,13 +73,13 @@ export function install(registers: 
EChartsExtensionInstallRegisters) {
     }, noop);
 
     // Register roam action.
-    registers.registerAction(actionInfo, function (payload: RoamPaylod, 
ecModel: GlobalModel) {
+    registers.registerAction(actionInfo, function (payload: RoamPaylod, 
ecModel: GlobalModel, api: ExtensionAPI) {
         ecModel.eachComponent({
             mainType: 'series', query: payload
         }, function (seriesModel: GraphSeriesModel) {
             const coordSys = seriesModel.coordinateSystem as View;
 
-            const res = updateCenterAndZoom(coordSys, payload);
+            const res = updateCenterAndZoom(coordSys, payload, undefined, api);
 
             seriesModel.setCenter
                 && seriesModel.setCenter(res.center);
diff --git a/src/chart/tree/TreeView.ts b/src/chart/tree/TreeView.ts
index 640617572..b868c6b9c 100644
--- a/src/chart/tree/TreeView.ts
+++ b/src/chart/tree/TreeView.ts
@@ -172,7 +172,7 @@ class TreeView extends ChartView {
             group.y = layoutInfo.y;
         }
 
-        this._updateViewCoordSys(seriesModel);
+        this._updateViewCoordSys(seriesModel, api);
         this._updateController(seriesModel, ecModel, api);
 
         const oldData = this._data;
@@ -224,7 +224,7 @@ class TreeView extends ChartView {
         this._data = data;
     }
 
-    _updateViewCoordSys(seriesModel: TreeSeriesModel) {
+    _updateViewCoordSys(seriesModel: TreeSeriesModel, api: ExtensionAPI) {
         const data = seriesModel.getData();
         const points: number[][] = [];
         data.each(function (idx) {
@@ -257,7 +257,7 @@ class TreeView extends ChartView {
 
         viewCoordSys.setBoundingRect(min[0], min[1], max[0] - min[0], max[1] - 
min[1]);
 
-        viewCoordSys.setCenter(seriesModel.get('center'));
+        viewCoordSys.setCenter(seriesModel.get('center'), api);
         viewCoordSys.setZoom(seriesModel.get('zoom'));
 
         // Here we use viewCoordSys just for computing the 'position' and 
'scale' of the group
diff --git a/src/chart/tree/treeAction.ts b/src/chart/tree/treeAction.ts
index 8543ef56e..2589d3ef7 100644
--- a/src/chart/tree/treeAction.ts
+++ b/src/chart/tree/treeAction.ts
@@ -22,6 +22,7 @@ import { Payload } from '../../util/types';
 import TreeSeriesModel from './TreeSeries';
 import GlobalModel from '../../model/Global';
 import { EChartsExtensionInstallRegisters } from '../../extension';
+import type ExtensionAPI from '../../core/ExtensionAPI';
 
 export interface TreeExpandAndCollapsePayload extends Payload {
     dataIndex: number
@@ -51,12 +52,12 @@ export function installTreeAction(registers: 
EChartsExtensionInstallRegisters) {
         // the layout. So don't need to go through the whole update process, 
such
         // as 'dataPrcocess', 'coordSystemUpdate', 'layout' and so on.
         update: 'none'
-    }, function (payload: RoamPaylod, ecModel: GlobalModel) {
+    }, function (payload: RoamPaylod, ecModel: GlobalModel, api: ExtensionAPI) 
{
         ecModel.eachComponent({
             mainType: 'series', subType: 'tree', query: payload
         }, function (seriesModel: TreeSeriesModel) {
             const coordSys = seriesModel.coordinateSystem;
-            const res = updateCenterAndZoom(coordSys, payload);
+            const res = updateCenterAndZoom(coordSys, payload, undefined, api);
 
             seriesModel.setCenter
                 && seriesModel.setCenter(res.center);
diff --git a/src/component/geo/install.ts b/src/component/geo/install.ts
index 37a86bd97..d18aa1837 100644
--- a/src/component/geo/install.ts
+++ b/src/component/geo/install.ts
@@ -27,6 +27,7 @@ import { updateCenterAndZoom, RoamPaylod } from 
'../../action/roamHelper';
 import MapSeries from '../../chart/map/MapSeries';
 import GeoView from './GeoView';
 import geoSourceManager from '../../coord/geo/geoSourceManager';
+import type ExtensionAPI from '../../core/ExtensionAPI';
 
 type RegisterMapParams = Parameters<typeof geoSourceManager.registerMap>;
 function registerMap(
@@ -114,7 +115,7 @@ export function install(registers: 
EChartsExtensionInstallRegisters) {
         type: 'geoRoam',
         event: 'geoRoam',
         update: 'updateTransform'
-    }, function (payload: RoamPaylod, ecModel: GlobalModel) {
+    }, function (payload: RoamPaylod, ecModel: GlobalModel, api: ExtensionAPI) 
{
         const componentType = payload.componentType || 'series';
 
         ecModel.eachComponent(
@@ -126,7 +127,7 @@ export function install(registers: 
EChartsExtensionInstallRegisters) {
                 }
 
                 const res = updateCenterAndZoom(
-                    geo, payload, (componentModel as 
GeoModel).get('scaleLimit')
+                    geo, payload, (componentModel as 
GeoModel).get('scaleLimit'), api
                 );
 
                 componentModel.setCenter
diff --git a/src/coord/View.ts b/src/coord/View.ts
index 452fb0ef8..bb4c1affb 100644
--- a/src/coord/View.ts
+++ b/src/coord/View.ts
@@ -29,6 +29,8 @@ import Transformable from 'zrender/src/core/Transformable';
 import { CoordinateSystemMaster, CoordinateSystem } from './CoordinateSystem';
 import GlobalModel from '../model/Global';
 import { ParsedModelFinder, ParsedModelFinderKnown } from '../util/model';
+import { parsePercent } from '../util/number';
+import type ExtensionAPI from '../core/ExtensionAPI';
 
 const v2ApplyTransform = vector.applyTransform;
 
@@ -82,7 +84,6 @@ class View extends Transformable implements 
CoordinateSystemMaster, CoordinateSy
      */
     private _viewRect: BoundingRect;
 
-
     constructor(name?: string) {
         super();
         this.name = name;
@@ -127,12 +128,14 @@ class View extends Transformable implements 
CoordinateSystemMaster, CoordinateSy
     /**
      * Set center of view
      */
-    setCenter(centerCoord?: number[]): void {
+    setCenter(centerCoord: (number | string)[], api: ExtensionAPI): void {
         if (!centerCoord) {
             return;
         }
-        this._center = centerCoord;
-
+        this._center = [
+            parsePercent(centerCoord[0], api.getWidth()),
+            parsePercent(centerCoord[1], api.getHeight())
+        ];
         this._updateCenterAndZoom();
     }
 
diff --git a/src/coord/geo/geoCreator.ts b/src/coord/geo/geoCreator.ts
index c080e153e..1d4bd3730 100644
--- a/src/coord/geo/geoCreator.ts
+++ b/src/coord/geo/geoCreator.ts
@@ -151,7 +151,7 @@ function resizeGeo(this: Geo, geoModel: 
ComponentModel<GeoOption | MapSeriesOpti
 
     this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);
 
-    this.setCenter(geoModel.get('center'));
+    this.setCenter(geoModel.get('center'), api);
     this.setZoom(geoModel.get('zoom'));
 }
 
diff --git a/src/util/types.ts b/src/util/types.ts
index dbaafc81b..c503f48ee 100644
--- a/src/util/types.ts
+++ b/src/util/types.ts
@@ -873,7 +873,7 @@ export interface RoamOptionMixin {
     /**
      * Current center position.
      */
-    center?: number[]
+    center?: (number | string)[]
     /**
      * Current zoom level. Default is 1
      */
diff --git a/test/graph-simple.html b/test/graph-simple.html
index 25899700e..092414d71 100644
--- a/test/graph-simple.html
+++ b/test/graph-simple.html
@@ -55,6 +55,7 @@ under the License.
                                         show: true
                                     }
                                 },
+                                center: ['30%', '80%'],
                                 edgeSymbol: ['circle', 'arrow'],
                                 edgeSymbolSize: [4, 10],
                                 edgeLabel: {
diff --git a/test/tree-legend.html b/test/tree-legend.html
index 63dab9c2a..fbc1357c6 100644
--- a/test/tree-legend.html
+++ b/test/tree-legend.html
@@ -265,7 +265,8 @@ under the License.
                                 left: '70%',
                                 bottom: '22%',
                                 right: '8%',
-
+                                center: ['80%', '10%'],
+                                zoom: 1.2,
                                 symbolSize: 7,
                                 orient: 'RL',
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to