From 03616a56f10395e00cec921ccabac0df7809a416 Mon Sep 17 00:00:00 2001 From: MiniPear Date: Thu, 20 Jul 2023 14:14:25 +0800 Subject: [PATCH] feat(title): auto layout --- .../static/alphabetIntervalTitleAuto.png | Bin 0 -> 25920 bytes .../static/alphabet-interval-title-auto.ts | 32 ++++++++++++++++++ __tests__/plots/static/index.ts | 1 + src/component/title.ts | 1 + src/runtime/component.ts | 27 +++++++++++++++ src/theme/classic.ts | 1 + 6 files changed, 62 insertions(+) create mode 100644 __tests__/integration/snapshots/static/alphabetIntervalTitleAuto.png create mode 100644 __tests__/plots/static/alphabet-interval-title-auto.ts diff --git a/__tests__/integration/snapshots/static/alphabetIntervalTitleAuto.png b/__tests__/integration/snapshots/static/alphabetIntervalTitleAuto.png new file mode 100644 index 0000000000000000000000000000000000000000..2354224ac33e56e105826866c120dcb0590851de GIT binary patch literal 25920 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 literal 0 HcmV?d00001 diff --git a/__tests__/plots/static/alphabet-interval-title-auto.ts b/__tests__/plots/static/alphabet-interval-title-auto.ts new file mode 100644 index 0000000000..b45cde2dad --- /dev/null +++ b/__tests__/plots/static/alphabet-interval-title-auto.ts @@ -0,0 +1,32 @@ +import { G2Spec } from '../../../src'; + +export function alphabetIntervalTitleAuto(): G2Spec { + return { + type: 'interval', + padding: 'auto', + title: { + title: 'Use frequency of keyboard keys', + subtitle: 'The mostest frequency letter are E, T, A.', + titleFontSize: 30, + subtitleFontSize: 20, + }, + data: { + type: 'fetch', + value: 'data/alphabet.csv', + }, + axis: { + y: { labelFormatter: '.0%' }, + }, + encode: { + x: 'letter', + y: 'frequency', + color: 'steelblue', + }, + viewStyle: { + viewFill: '#4e79a7', + plotFill: '#f28e2c', + mainFill: '#e15759', + contentFill: '#76b7b2', + }, + }; +} diff --git a/__tests__/plots/static/index.ts b/__tests__/plots/static/index.ts index 1ba0fc7c8c..9178ae1be0 100644 --- a/__tests__/plots/static/index.ts +++ b/__tests__/plots/static/index.ts @@ -273,3 +273,4 @@ export { alphabetIntervalAutoPaddingSlider } from './alphabet-interval-auto-padd export { countriesBubbleLegendSize } from './countries-bubble-legend-size'; export { cars2PointOrdinalSize } from './cars2-point-ordinal-size'; export { cars2PointConstantColorSize } from './cars2-point-constant-color-size'; +export { alphabetIntervalTitleAuto } from './alphabet-interval-title-auto'; diff --git a/src/component/title.ts b/src/component/title.ts index 7153108d8c..a255c9e9b4 100644 --- a/src/component/title.ts +++ b/src/component/title.ts @@ -69,6 +69,7 @@ const Title = createComponent({ .node(); const bounds = mainTitle.getLocalBounds(); + console.log(bounds.max[1], y, spacing); maybeAppend(container, '.sub-title', 'text') .attr('className', 'sub-title') .call((selection) => { diff --git a/src/runtime/component.ts b/src/runtime/component.ts index 1eb7fb980e..7d9453a7ca 100644 --- a/src/runtime/component.ts +++ b/src/runtime/component.ts @@ -584,6 +584,7 @@ export function computeComponentSize( if (t.startsWith('legendContinuous')) return computeContinuousLegendSize; if (t === 'legendCategory') return computeCategoryLegendSize; if (t.startsWith('slider')) return computeSliderSize; + if (t === 'title') return computeTitleSize; return () => {}; }; return createCompute()( @@ -625,6 +626,32 @@ function computeGroupSize( children.forEach((d) => (d.size = maxSize)); } +function computeTitleSize( + component: G2GuideComponentOptions, + crossSize: number, + crossPadding: [number, number], + position: GCP, + theme: G2Theme, + library: G2Library, +) { + const { + title, + subtitle, + spacing = 0, + ...style + } = deepMix({}, theme.title, component); + if (title) { + const titleStyle = subObject(style, 'title'); + const titleBBox = computeLabelSize(title, titleStyle); + component.size = titleBBox.height; + } + if (subtitle) { + const subtitleStyle = subObject(style, 'subtitle'); + const subtitleBBox = computeLabelSize(subtitle, subtitleStyle); + component.size += spacing + subtitleBBox.height; + } +} + function computeSliderSize( component: G2GuideComponentOptions, crossSize: number, diff --git a/src/theme/classic.ts b/src/theme/classic.ts index 4bf30e43ab..ed69c41e23 100644 --- a/src/theme/classic.ts +++ b/src/theme/classic.ts @@ -408,6 +408,7 @@ export const Classic: TC = (options) => { thumbHighlightedFillOpacity: 0.2, }, title: { + spacing: 8, titleFill: COLORS.BLACK, titleFillOpacity: 0.85, titleFontSize: 14,