Fix when using theme colors
This commit is contained in:
parent
ead2850fc4
commit
349fac7193
3 changed files with 64 additions and 9 deletions
|
|
@ -284,7 +284,7 @@ func compile(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, sketc
|
||||||
|
|
||||||
var svg []byte
|
var svg []byte
|
||||||
if filepath.Ext(outputPath) == ".pdf" {
|
if filepath.Ext(outputPath) == ".pdf" {
|
||||||
svg, err = renderPDF(ctx, ms, plugin, sketch, pad, outputPath, page, ruler, diagram, nil, nil)
|
svg, err = renderPDF(ctx, ms, plugin, sketch, pad, themeID, outputPath, page, ruler, diagram, nil, nil)
|
||||||
} else {
|
} else {
|
||||||
compileDur := time.Since(start)
|
compileDur := time.Since(start)
|
||||||
svg, err = render(ctx, ms, compileDur, plugin, sketch, pad, themeID, darkThemeID, inputPath, outputPath, bundle, forceAppendix, page, ruler, diagram)
|
svg, err = render(ctx, ms, compileDur, plugin, sketch, pad, themeID, darkThemeID, inputPath, outputPath, bundle, forceAppendix, page, ruler, diagram)
|
||||||
|
|
@ -436,7 +436,7 @@ func _render(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, sketc
|
||||||
return svg, nil
|
return svg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderPDF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, sketch bool, pad int64, outputPath string, page playwright.Page, ruler *textmeasure.Ruler, diagram *d2target.Diagram, pdf *pdflib.GoFPDF, boardPath []string) (svg []byte, err error) {
|
func renderPDF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, sketch bool, pad, themeID int64, outputPath string, page playwright.Page, ruler *textmeasure.Ruler, diagram *d2target.Diagram, pdf *pdflib.GoFPDF, boardPath []string) (svg []byte, err error) {
|
||||||
var isRoot bool
|
var isRoot bool
|
||||||
if pdf == nil {
|
if pdf == nil {
|
||||||
pdf = pdflib.Init()
|
pdf = pdflib.Init()
|
||||||
|
|
@ -487,26 +487,26 @@ func renderPDF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, ske
|
||||||
return svg, err
|
return svg, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = pdf.AddPDFPage(pngImg, currBoardPath, rootFill)
|
err = pdf.AddPDFPage(pngImg, currBoardPath, themeID, rootFill)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return svg, err
|
return svg, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, dl := range diagram.Layers {
|
for _, dl := range diagram.Layers {
|
||||||
_, err := renderPDF(ctx, ms, plugin, sketch, pad, "", page, ruler, dl, pdf, currBoardPath)
|
_, err := renderPDF(ctx, ms, plugin, sketch, pad, themeID, "", page, ruler, dl, pdf, currBoardPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, dl := range diagram.Scenarios {
|
for _, dl := range diagram.Scenarios {
|
||||||
_, err := renderPDF(ctx, ms, plugin, sketch, pad, "", page, ruler, dl, pdf, currBoardPath)
|
_, err := renderPDF(ctx, ms, plugin, sketch, pad, themeID, "", page, ruler, dl, pdf, currBoardPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, dl := range diagram.Steps {
|
for _, dl := range diagram.Steps {
|
||||||
_, err := renderPDF(ctx, ms, plugin, sketch, pad, "", page, ruler, dl, pdf, currBoardPath)
|
_, err := renderPDF(ctx, ms, plugin, sketch, pad, themeID, "", page, ruler, dl, pdf, currBoardPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
// Color codes: darkest (N1) -> lightest (N7)
|
// Color codes: darkest (N1) -> lightest (N7)
|
||||||
package d2themes
|
package d2themes
|
||||||
|
|
||||||
|
import "oss.terrastruct.com/d2/lib/color"
|
||||||
|
|
||||||
type Theme struct {
|
type Theme struct {
|
||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
|
@ -68,3 +70,49 @@ var DarkNeutral = Neutral{
|
||||||
N6: "#313244",
|
N6: "#313244",
|
||||||
N7: "#1E1E2E",
|
N7: "#1E1E2E",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ResolveThemeColor(theme Theme, code string) string {
|
||||||
|
if !color.IsThemeColor(code) {
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
switch code {
|
||||||
|
case "N1":
|
||||||
|
return theme.Colors.Neutrals.N1
|
||||||
|
case "N2":
|
||||||
|
return theme.Colors.Neutrals.N2
|
||||||
|
case "N3":
|
||||||
|
return theme.Colors.Neutrals.N3
|
||||||
|
case "N4":
|
||||||
|
return theme.Colors.Neutrals.N4
|
||||||
|
case "N5":
|
||||||
|
return theme.Colors.Neutrals.N5
|
||||||
|
case "N6":
|
||||||
|
return theme.Colors.Neutrals.N6
|
||||||
|
case "N7":
|
||||||
|
return theme.Colors.Neutrals.N7
|
||||||
|
case "B1":
|
||||||
|
return theme.Colors.B1
|
||||||
|
case "B2":
|
||||||
|
return theme.Colors.B2
|
||||||
|
case "B3":
|
||||||
|
return theme.Colors.B3
|
||||||
|
case "B4":
|
||||||
|
return theme.Colors.B4
|
||||||
|
case "B5":
|
||||||
|
return theme.Colors.B5
|
||||||
|
case "B6":
|
||||||
|
return theme.Colors.B6
|
||||||
|
case "AA2":
|
||||||
|
return theme.Colors.AA2
|
||||||
|
case "AA4":
|
||||||
|
return theme.Colors.AA4
|
||||||
|
case "AA5":
|
||||||
|
return theme.Colors.AA5
|
||||||
|
case "AB4":
|
||||||
|
return theme.Colors.AB4
|
||||||
|
case "AB5":
|
||||||
|
return theme.Colors.AB5
|
||||||
|
default:
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ import (
|
||||||
"github.com/jung-kurt/gofpdf"
|
"github.com/jung-kurt/gofpdf"
|
||||||
|
|
||||||
"oss.terrastruct.com/d2/d2renderers/d2fonts"
|
"oss.terrastruct.com/d2/d2renderers/d2fonts"
|
||||||
|
"oss.terrastruct.com/d2/d2themes"
|
||||||
|
"oss.terrastruct.com/d2/d2themes/d2themescatalog"
|
||||||
"oss.terrastruct.com/d2/lib/color"
|
"oss.terrastruct.com/d2/lib/color"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -33,7 +35,7 @@ func Init() *GoFPDF {
|
||||||
return &fpdf
|
return &fpdf
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GoFPDF) GetFillRGB(fill string) (color.RGB, error) {
|
func (g *GoFPDF) GetFillRGB(themeID int64, fill string) (color.RGB, error) {
|
||||||
if fill == "" || strings.ToLower(fill) == "transparent" {
|
if fill == "" || strings.ToLower(fill) == "transparent" {
|
||||||
return color.RGB{
|
return color.RGB{
|
||||||
Red: 255,
|
Red: 255,
|
||||||
|
|
@ -47,10 +49,15 @@ func (g *GoFPDF) GetFillRGB(fill string) (color.RGB, error) {
|
||||||
return rgb, nil
|
return rgb, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if color.IsThemeColor(fill) {
|
||||||
|
theme := d2themescatalog.Find(themeID)
|
||||||
|
fill = d2themes.ResolveThemeColor(theme, fill)
|
||||||
|
}
|
||||||
|
|
||||||
return color.Hex2RGB(fill)
|
return color.Hex2RGB(fill)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GoFPDF) AddPDFPage(png []byte, boardPath []string, fill string) error {
|
func (g *GoFPDF) AddPDFPage(png []byte, boardPath []string, themeID int64, fill string) error {
|
||||||
var opt gofpdf.ImageOptions
|
var opt gofpdf.ImageOptions
|
||||||
opt.ImageType = "png"
|
opt.ImageType = "png"
|
||||||
imageInfo := g.pdf.RegisterImageOptionsReader(strings.Join(boardPath, "/"), opt, bytes.NewReader(png))
|
imageInfo := g.pdf.RegisterImageOptionsReader(strings.Join(boardPath, "/"), opt, bytes.NewReader(png))
|
||||||
|
|
@ -73,7 +80,7 @@ func (g *GoFPDF) AddPDFPage(png []byte, boardPath []string, fill string) error {
|
||||||
pageWidth = math.Max(math.Max(minPageDimension, imageWidth), headerWidth)
|
pageWidth = math.Max(math.Max(minPageDimension, imageWidth), headerWidth)
|
||||||
pageHeight = math.Max(minPageDimension, imageHeight)
|
pageHeight = math.Max(minPageDimension, imageHeight)
|
||||||
|
|
||||||
fillRGB, err := g.GetFillRGB(fill)
|
fillRGB, err := g.GetFillRGB(themeID, fill)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue