From 99e91e19efc562828af58fb9fde33b2e5d01f9a0 Mon Sep 17 00:00:00 2001 From: xxxwang1983 <132745901+xxxwang1983@users.noreply.github.com> Date: Tue, 30 Jan 2024 09:58:24 +0800 Subject: [PATCH] This closes #1794, add new GetBaseColor function (#1798) Co-authored-by: wangjingwei --- styles.go | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/styles.go b/styles.go index 54635042ac..91e4c5728d 100644 --- a/styles.go +++ b/styles.go @@ -1369,14 +1369,11 @@ var ( } ) -// getThemeColor provides a function to convert theme color or index color to -// RGB color. -func (f *File) getThemeColor(clr *xlsxColor) string { - var RGB string - if clr == nil || f.Theme == nil { - return RGB - } - if clrScheme := f.Theme.ThemeElements.ClrScheme; clr.Theme != nil { +// GetBaseColor returns the preferred hex color code by giving hex color code, +// indexed color, and theme color. +func (f *File) GetBaseColor(hexColor string, indexedColor int, themeColor *int) string { + if f.Theme != nil && themeColor != nil { + clrScheme := f.Theme.ThemeElements.ClrScheme if val, ok := map[int]*string{ 0: &clrScheme.Lt1.SysClr.LastClr, 1: &clrScheme.Dk1.SysClr.LastClr, @@ -1388,21 +1385,35 @@ func (f *File) getThemeColor(clr *xlsxColor) string { 7: clrScheme.Accent4.SrgbClr.Val, 8: clrScheme.Accent5.SrgbClr.Val, 9: clrScheme.Accent6.SrgbClr.Val, - }[*clr.Theme]; ok && val != nil { - return strings.TrimPrefix(ThemeColor(*val, clr.Tint), "FF") + }[*themeColor]; ok && val != nil { + return *val } } - if len(clr.RGB) == 6 { - return clr.RGB + if len(hexColor) == 6 { + return hexColor + } + if len(hexColor) == 8 { + return strings.TrimPrefix(hexColor, "FF") + } + if f.Styles != nil && f.Styles.Colors != nil && f.Styles.Colors.IndexedColors != nil && + indexedColor < len(f.Styles.Colors.IndexedColors.RgbColor) { + return strings.TrimPrefix(f.Styles.Colors.IndexedColors.RgbColor[indexedColor].RGB, "FF") } - if len(clr.RGB) == 8 { - return strings.TrimPrefix(clr.RGB, "FF") + if indexedColor < len(IndexedColorMapping) { + return IndexedColorMapping[indexedColor] } - if f.Styles.Colors != nil && f.Styles.Colors.IndexedColors != nil && clr.Indexed < len(f.Styles.Colors.IndexedColors.RgbColor) { - return strings.TrimPrefix(ThemeColor(strings.TrimPrefix(f.Styles.Colors.IndexedColors.RgbColor[clr.Indexed].RGB, "FF"), clr.Tint), "FF") + return hexColor +} + +// getThemeColor provides a function to convert theme color or index color to +// RGB color. +func (f *File) getThemeColor(clr *xlsxColor) string { + var RGB string + if clr == nil || f.Theme == nil { + return RGB } - if clr.Indexed < len(IndexedColorMapping) { - return strings.TrimPrefix(ThemeColor(IndexedColorMapping[clr.Indexed], clr.Tint), "FF") + if RGB = f.GetBaseColor(clr.RGB, clr.Indexed, clr.Theme); RGB != "" { + RGB = strings.TrimPrefix(ThemeColor(RGB, clr.Tint), "FF") } return RGB }