1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package xlsx
- import (
- "fmt"
- "strconv"
- )
- type theme struct {
- colors []string
- }
- func newTheme(themeXml xlsxTheme) *theme {
- clrMap := map[string]string{}
- clrSchemes := themeXml.ThemeElements.ClrScheme.Children
- for _, scheme := range clrSchemes {
- var rgbColor string
- if scheme.SysClr != nil {
- rgbColor = scheme.SysClr.LastClr
- } else {
- rgbColor = scheme.SrgbClr.Val
- }
- clrMap[scheme.XMLName.Local] = rgbColor
- }
- colors := []string{clrMap["lt1"], clrMap["dk1"], clrMap["lt2"], clrMap["dk2"], clrMap["accent1"],
- clrMap["accent2"], clrMap["accent3"], clrMap["accent4"], clrMap["accent5"],
- clrMap["accent6"], clrMap["hlink"], clrMap["folHlink"]}
- return &theme{colors}
- }
- func (t *theme) themeColor(index int64, tint float64) string {
- baseColor := t.colors[index]
- if tint == 0 {
- return "FF" + baseColor
- } else {
- r, _ := strconv.ParseInt(baseColor[0:2], 16, 64)
- g, _ := strconv.ParseInt(baseColor[2:4], 16, 64)
- b, _ := strconv.ParseInt(baseColor[4:6], 16, 64)
- h, s, l := RGBToHSL(uint8(r), uint8(g), uint8(b))
- if tint < 0 {
- l *= (1 + tint)
- } else {
- l = l*(1-tint) + (1 - (1 - tint))
- }
- br, bg, bb := HSLToRGB(h, s, l)
- return fmt.Sprintf("FF%02X%02X%02X", br, bg, bb)
- }
- }
|