import type { DisplayObject } from '@antv/g'; import { get, set } from '@antv/util'; const CacheTargetKey = 'cachedStyle'; const getStyleCacheKey = (name: string) => `__${name}__`; /** * 缓存图形样式 * * Cache shape style * @param element - 图形元素 | shape element * @param name - 样式名 | style name */ export function cacheStyle(element: DisplayObject, name: string | string[]) { const names = Array.isArray(name) ? name : [name]; if (!get(element, CacheTargetKey)) set(element, CacheTargetKey, {}); names.forEach((n) => { set(get(element, CacheTargetKey), getStyleCacheKey(n), element.attributes[n]); }); } /** * 获取缓存的样式 * * Get cached style * @param element - 图形元素 | shape element * @param name - 样式名 | style name * @returns 样式值 | style value */ export function getCachedStyle(element: DisplayObject, name: string) { return get(element, [CacheTargetKey, getStyleCacheKey(name)]); } /** * 是否有缓存的样式 * * Whether there is a cached style * @param element - 图形元素 | shape element * @param name - 样式名 | style name * @returns 是否有缓存的样式 | Whether there is a cached style */ export function hasCachedStyle(element: DisplayObject, name: string) { return getStyleCacheKey(name) in (get(element, CacheTargetKey) || {}); } /** * 设置缓存的样式 * * Set cached style * @param element - 图形元素 | shape element * @param name - 样式名 | style name * @param value - 样式值 | style value */ export function setCacheStyle(element: DisplayObject, name: string, value: any) { set(element, [CacheTargetKey, getStyleCacheKey(name)], value); }