fix(color-module): 修复暗黑模式下中性色计算错误

调整暗黑模式下的中性色计算逻辑,确保在不同主题下颜色值计算正确。主要修改了outline、shadow、surface等颜色的计算方式,根据is_dark标志使用不同的系数。
This commit is contained in:
徐涛 2025-07-18 15:45:11 +08:00
parent 600c8c92ce
commit a7ef8eb576

View File

@ -2,10 +2,10 @@ use std::{collections::HashMap, sync::Arc};
use linked_hash_map::LinkedHashMap;
use palette::{
color_theory::{Analogous, Complementary, SplitComplementary, Tetradic, Triadic},
Oklch, ShiftHue,
color_theory::{Analogous, Complementary, SplitComplementary, Tetradic, Triadic},
};
use serde::{ser::SerializeStruct, Serialize};
use serde::{Serialize, ser::SerializeStruct};
use crate::{
convert::map_oklch_to_srgb_hex,
@ -193,20 +193,23 @@ impl Baseline {
}
};
let reference_lightness = if is_dark {
neutral_lightest.l
} else {
neutral_darkest.l
} else {
neutral_lightest.l
};
let neutral_swatch = Arc::new(NeutralSwatch::new(*neutral_lightest, *neutral_darkest));
let outline_color = neutral_swatch.get(reference_lightness * 0.8);
let outline_variant_color = neutral_swatch.get(reference_lightness * 0.6);
let shadow_color = neutral_swatch.get(10.0);
let overlay_color = neutral_swatch.get(reference_lightness * 0.2);
let outline_color =
neutral_swatch.get(neutral_lightest.l * if is_dark { 0.5 } else { 0.7 });
let outline_variant_color =
neutral_swatch.get(neutral_lightest.l * if is_dark { 0.3 } else { 0.8 });
let shadow_color = neutral_swatch.get(0.1);
let overlay_color =
neutral_swatch.get(neutral_lightest.l * if is_dark { 0.4 } else { 0.5 });
let neutral_color = neutral_swatch.get(75.0);
let neutral_variant_color = neutral_swatch.get(55.0);
let surface_color = neutral_swatch.get(98.0);
let surface_variant_color = neutral_swatch.get(90.0);
let neutral_color = neutral_swatch.get(if is_dark { 0.35 } else { 0.65 });
let neutral_variant_color = neutral_swatch.get(if is_dark { 0.45 } else { 0.55 });
let surface_color = neutral_swatch.get(if is_dark { 0.10 } else { 0.98 });
let surface_variant_color = neutral_swatch.get(if is_dark { 0.20 } else { 0.85 });
let neutral_set = ColorSet::new(
&neutral_color,