diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go index a7fc2a130..10fb9c42d 100644 --- a/d2renderers/d2svg/d2svg.go +++ b/d2renderers/d2svg/d2svg.go @@ -42,6 +42,9 @@ const ( appendixIconRadius = 16 ) +var multipleOffset = geo.NewVector(10, -10) +var borderOffset = geo.NewVector(5, 5) + //go:embed tooltip.svg var TooltipIcon string @@ -590,7 +593,8 @@ func renderOval(tl *geo.Point, width, height float64, style string) string { } func renderDoubleOval(tl *geo.Point, width, height float64, style string) string { - return renderOval(tl, width, height, style) + renderOval(&geo.Point{X: tl.X + 5, Y: tl.Y + 5}, width-10, height-10, style) + var innerTL *geo.Point = tl.AddVector(borderOffset) + return renderOval(tl, width, height, style) + renderOval(innerTL, width-10, height-10, style) } func defineShadowFilter(writer io.Writer) { @@ -764,20 +768,7 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske fmt.Fprintf(writer, closingTag) return labelMask, nil case d2target.ShapeOval: - if !targetShape.DoubleBorder { - if targetShape.Multiple { - fmt.Fprint(writer, renderOval(multipleTL, width, height, style)) - } - if sketchRunner != nil { - out, err := d2sketch.Oval(sketchRunner, targetShape) - if err != nil { - return "", err - } - fmt.Fprintf(writer, out) - } else { - fmt.Fprint(writer, renderOval(tl, width, height, style)) - } - } else { + if targetShape.DoubleBorder { if targetShape.Multiple { fmt.Fprint(writer, renderDoubleOval(multipleTL, width, height, style)) } @@ -790,6 +781,19 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske } else { fmt.Fprint(writer, renderDoubleOval(tl, width, height, style)) } + } else { + if targetShape.Multiple { + fmt.Fprint(writer, renderOval(multipleTL, width, height, style)) + } + if sketchRunner != nil { + out, err := d2sketch.Oval(sketchRunner, targetShape) + if err != nil { + return "", err + } + fmt.Fprintf(writer, out) + } else { + fmt.Fprint(writer, renderOval(tl, width, height, style)) + } } case d2target.ShapeImage: fmt.Fprintf(writer, ``,