You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/04/07 11:39:12 UTC

[echarts] 01/01: fix(map): fix label layout may not update in map

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

shenyi pushed a commit to branch fix-map-label
in repository https://gitbox.apache.org/repos/asf/echarts.git

commit 669209d903a67644d7bc6765371ad7e974188f8a
Author: pissang <bm...@gmail.com>
AuthorDate: Wed Apr 7 19:37:48 2021 +0800

    fix(map): fix label layout may not update in map
---
 src/chart/map/MapView.ts        |  8 ------
 src/component/helper/MapDraw.ts | 59 +++++++++++++++++------------------------
 src/util/symbol.ts              |  2 +-
 3 files changed, 25 insertions(+), 44 deletions(-)

diff --git a/src/chart/map/MapView.ts b/src/chart/map/MapView.ts
index 48df6e8..b8984c8 100644
--- a/src/chart/map/MapView.ts
+++ b/src/chart/map/MapView.ts
@@ -25,17 +25,9 @@ import MapSeries, { MapDataItemOption } from './MapSeries';
 import GlobalModel from '../../model/Global';
 import ExtensionAPI from '../../core/ExtensionAPI';
 import { Payload, DisplayState, ECElement } from '../../util/types';
-import Model from '../../model/Model';
 import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';
 import { Z2_EMPHASIS_LIFT } from '../../util/states';
 
-interface HighDownRecord {
-    recordVersion: number;
-    labelModel: Model;
-    hoverLabelModel: Model;
-    emphasisText: string;
-    normalText: string;
-};
 
 class MapView extends ChartView {
 
diff --git a/src/component/helper/MapDraw.ts b/src/component/helper/MapDraw.ts
index 5388053..f592023 100644
--- a/src/component/helper/MapDraw.ts
+++ b/src/component/helper/MapDraw.ts
@@ -41,7 +41,6 @@ import Model from '../../model/Model';
 import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';
 import { getECData } from '../../util/innerStore';
 import { createOrUpdatePatternFromDecal } from '../../util/decal';
-import { makeInner } from '../../util/model';
 import ZRText, {TextStyleProps} from 'zrender/src/graphic/Text';
 import { ViewCoordSysTransformInfoPart } from '../../coord/View';
 import { GeoSVGGraphicRecord, GeoSVGResource } from '../../coord/geo/GeoSVGResource';
@@ -50,11 +49,7 @@ import Element from 'zrender/src/Element';
 import List from '../../data/List';
 import { GeoJSONRegion } from '../../coord/geo/Region';
 import { SVGNodeTagLower } from 'zrender/src/tool/parseSVG';
-
-const mapLabelTransform = makeInner<{
-    x: number
-    y: number
-}, ZRText>();
+import { makeInner } from '../../util/model';
 
 interface RegionsGroup extends graphic.Group {
 }
@@ -96,6 +91,9 @@ const STATE_TRIGGER_TAG_MAP = zrUtil.createHashMap<number, SVGNodeTagLower>(
 const LABEL_HOST_MAP = zrUtil.createHashMap<number, SVGNodeTagLower>(
     OPTION_STYLE_ENABLED_TAGS.concat(['g']) as SVGNodeTagLower[]
 );
+const mapLabelRaw = makeInner<{
+    ignore: boolean
+}, ZRText>();
 
 
 function getFixedItemStyle(model: Model<GeoItemStyleOption>) {
@@ -520,30 +518,11 @@ class MapDraw {
             return action;
         }
 
-        const updateLabelTransforms = () => {
-            const group = this.group;
-            this._regionsGroup.traverse(function (el) {
-                const textContent = el.getTextContent();
-                if (textContent) {
-                    el.setTextConfig({
-                        local: true
-                    });
-                    textContent.x = mapLabelTransform(textContent).x || 0;
-                    textContent.y = mapLabelTransform(textContent).y || 0;
-                    textContent.scaleX = 1 / group.scaleX;
-                    textContent.scaleY = 1 / group.scaleY;
-                    textContent.markRedraw();
-                }
-            });
-        };
-
         controller.off('pan').on('pan', function (e) {
             this._mouseDownFlag = false;
 
             roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);
 
-            updateLabelTransforms();
-
             api.dispatchAction(zrUtil.extend(makeActionBase(), {
                 dx: e.dx,
                 dy: e.dy
@@ -555,7 +534,14 @@ class MapDraw {
 
             roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);
 
-            updateLabelTransforms();
+            // Reset ignore, avoid ignore is changed in LabelManager and can't restored.
+            // TODO: roam action in map should not run LabelManager#addLabelsOfSeries
+            this.group.traverse(el => {
+                const label = el.getTextContent();
+                if (label) {
+                    label.ignore = mapLabelRaw(label).ignore;
+                }
+            });
 
             api.dispatchAction(zrUtil.extend(makeActionBase(), {
                 zoom: e.scale,
@@ -727,17 +713,20 @@ function resetLabelForRegion(
 
         const textEl = el.getTextContent();
         if (textEl) {
-            mapLabelTransform(textEl).x = textEl.x = labelXY ? labelXY[0] : 0;
-            mapLabelTransform(textEl).y = textEl.y = labelXY ? labelXY[1] : 0;
-            textEl.z2 = 10;
             textEl.afterUpdate = labelTextAfterUpdate;
-        }
 
-        // Need to apply the `translate`.
-        if (el.textConfig) {
-            el.textConfig.local = true;
-            if (labelXY) {
-                el.textConfig.position = null;
+            mapLabelRaw(textEl).ignore = textEl.ignore;
+
+            if (el.textConfig) {
+                if (labelXY) {
+                    // Compute a relative offset based on the el bounding rect.
+                    const rect = el.getBoundingRect().clone();
+                    rect.applyTransform(el.getComputedTransform());
+                    el.textConfig.position = [
+                        ((labelXY[0] - rect.x) / rect.width * 100) + '%',
+                        ((labelXY[1] - rect.y) / rect.height * 100) + '%'
+                    ];
+                }
             }
         }
 
diff --git a/src/util/symbol.ts b/src/util/symbol.ts
index bc8de18..dee0263 100644
--- a/src/util/symbol.ts
+++ b/src/util/symbol.ts
@@ -288,7 +288,7 @@ const SymbolClz = graphic.Path.extend({
         return res;
     },
 
-    buildPath: function (ctx, shape, inBundle) {
+    buildPath(ctx, shape, inBundle) {
         let symbolType = shape.symbolType;
         if (symbolType !== 'none') {
             let proxySymbol = symbolBuildProxies[symbolType];

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org