From 84e8c25e375006a2661d1f81bdaf1ec2018872d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Fo=C5=A1n=C3=A1r?= Date: Mon, 9 Jan 2023 22:50:17 +0100 Subject: [PATCH] implemented (limited) darkening of theme colors and fixed rendering of the 3D box --- d2renderers/d2svg/d2svg.go | 15 ++++++++------- lib/color/color.go | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go index cd0f299a3..1233a6ac6 100644 --- a/d2renderers/d2svg/d2svg.go +++ b/d2renderers/d2svg/d2svg.go @@ -618,6 +618,7 @@ func render3dRect(targetShape d2target.Shape) string { ) border := svg_style.NewThemableElement("path") border.D = strings.Join(borderSegments, " ") + border.Fill = color.None _, borderStroke := svg_style.ShapeTheme(targetShape) border.Stroke = borderStroke borderStyle := svg_style.ShapeStyle(targetShape) @@ -646,6 +647,7 @@ func render3dRect(targetShape d2target.Shape) string { mainShape.Mask = fmt.Sprintf("url(#%s)", maskID) mainShapeFill, _ := svg_style.ShapeTheme(targetShape) mainShape.Fill = mainShapeFill + mainShape.Stroke = color.None mainShape.Style = svg_style.ShapeStyle(targetShape) mainShapeRendered := mainShape.Render() @@ -663,18 +665,17 @@ func render3dRect(targetShape d2target.Shape) string { fmt.Sprintf("%d,%d", v.X+targetShape.Pos.X, v.Y+targetShape.Pos.Y), ) } - // TODO make darker color part of the theme? - darkerColor := targetShape.Fill - // darkerColor, err := color.Darken(targetShape.Fill) - // if err != nil { - // darkerColor = targetShape.Fill - // } + // TODO make darker color part of the theme? or just keep this bypass + darkerColor, err := color.Darken(targetShape.Fill) + if err != nil { + darkerColor = targetShape.Fill + } sideShape := svg_style.NewThemableElement("polygon") sideShape.Fill = darkerColor sideShape.Points = strings.Join(sidePoints, " ") sideShape.Mask = fmt.Sprintf("url(#%s)", maskID) sideShape.Style = svg_style.ShapeStyle(targetShape) - renderedSides := mainShape.Render() + renderedSides := sideShape.Render() return borderMask + mainShapeRendered + renderedSides + renderedBorder } diff --git a/lib/color/color.go b/lib/color/color.go index 3f1109a82..1bb7d854d 100644 --- a/lib/color/color.go +++ b/lib/color/color.go @@ -1,11 +1,36 @@ package color import ( + "regexp" + "github.com/lucasb-eyer/go-colorful" "github.com/mazznoer/csscolorparser" ) +var themeRegex = regexp.MustCompile("^B[1-6]$") + func Darken(colorString string) (string, error) { + if themeRegex.MatchString(colorString) { + switch colorString[1] { + case '1': + return B1, nil + case '2': + return B1, nil + case '3': + return B2, nil + case '4': + return B3, nil + case '5': + return B4, nil + case '6': + return B5, nil + } + } + + return DarkenCSS(colorString) +} + +func DarkenCSS(colorString string) (string, error) { c, err := csscolorparser.Parse(colorString) if err != nil { return "", err