Merge pull request #614 from MarekSpodBiedry:issue-544

This commit is contained in:
Brandon Thomas
2026-10-13 00:07:33 -04:00
2 changed files with 25 additions and 5 deletions
+7 -5
View File
@@ -255,7 +255,7 @@ fn draw_kind(ctx: &mut Ctx, chart: &Chart, data: &ChartData, area: Bx) {
Doughnut => pie(ctx, chart, data, area, 0.5, false),
Sunburst => pie(ctx, chart, data, area, 0.2, true),
Treemap => treemap(ctx, chart, data, area),
Funnel => funnel(ctx, data, area),
Funnel => funnel(ctx, chart, data, area),
Radar => radar(ctx, chart, data, area),
_ => {
let area = axis_titles(ctx, chart, area);
@@ -1316,7 +1316,7 @@ fn waterfall(ctx: &mut Ctx, chart: &Chart, data: &ChartData, area: Bx) {
// ---------------------------------------------------------------- funnel
fn funnel(ctx: &mut Ctx, data: &ChartData, area: Bx) {
fn funnel(ctx: &mut Ctx, chart: &Chart, data: &ChartData, area: Bx) {
let Some(s) = data.series.first() else { return };
let n = data.categories.len().max(s.values.len()).min(MAX_CATS);
if n == 0 {
@@ -1346,9 +1346,11 @@ fn funnel(ctx: &mut Ctx, data: &ChartData, area: Bx) {
}
if show {
let yc = y + bh / 2.0;
let t = f.format(s.values.get(j).copied().flatten().unwrap_or(0.0), None);
let color = if ctx.tw(&t, LABEL_SIZE) + 4.0 <= bw { on(s.color) } else { TEXT };
ctx.text(plot.cx(), yc, &t, LABEL_SIZE, color, HAlign::Center, VAlign::Middle);
if chart.data_labels {
let t = f.format(s.values.get(j).copied().flatten().unwrap_or(0.0), None);
let color = if ctx.tw(&t, LABEL_SIZE) + 4.0 <= bw { on(s.color) } else { TEXT };
ctx.text(plot.cx(), yc, &t, LABEL_SIZE, color, HAlign::Center, VAlign::Middle);
}
let l = ctx.fit(labels.get(j).map(String::as_str).unwrap_or(""), LABEL_SIZE, lw - 8.0);
ctx.text(plot.x - 6.0, yc, &l, LABEL_SIZE, TEXT, HAlign::Right, VAlign::Middle);
}
+18
View File
@@ -947,6 +947,24 @@ fn union_series_references() {
}
#[test]
fn funnel_value_labels_follow_the_data_labels_flag() {
let data = ChartData {
categories: vec!["a".into(), "b".into(), "c".into()],
series: vec![series("S", &[11111.0, 22222.0, 33333.0], [20, 96, 130, 255], ChartKind::Funnel)],
};
let mut c = chart(ChartKind::Funnel);
c.data_labels = false;
let off = render(&c, &data, 500.0, 350.0, &ApproxMeasure);
c.data_labels = true;
let on = render(&c, &data, 500.0, 350.0, &ApproxMeasure);
let values = ["$11,111", "$22,222", "$33,333"];
for v in values {
assert!(texts(&on).contains(&v), "{v} missing with labels on");
assert!(!texts(&off).contains(&v), "{v} drawn with labels off");
}
for cat in ["a", "b", "c"] {
assert!(texts(&off).contains(&cat));
assert!(texts(&on).contains(&cat));
fn pie_points_follow_workbook_theme() {
let mut wb = Workbook::new();
wb.theme.colors[4] = 0x4F6D8A;