diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 3f80a0c09..537b89ad1 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -42,3 +42,4 @@ - Images can now be set to sizes smaller than 128x128. [#702](https://github.com/terrastruct/d2/pull/702) - Tooltips with ampersand would result in invalid SVGs. [#798](https://github.com/terrastruct/d2/pull/798) - Fixes class height when there are no rows. [#756](https://github.com/terrastruct/d2/pull/756) +- Border radius was not firefox-compatible. [#799](https://github.com/terrastruct/d2/pull/799) diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go index 8d4cb68cb..25c5dd88e 100644 --- a/d2renderers/d2svg/d2svg.go +++ b/d2renderers/d2svg/d2svg.go @@ -802,13 +802,17 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske // TODO should standardize "" to rectangle case d2target.ShapeRectangle, d2target.ShapeSequenceDiagram, "": + rx := "" + if targetShape.BorderRadius != 0 { + rx = fmt.Sprintf(` rx="%d"`, targetShape.BorderRadius) + } if targetShape.ThreeDee { fmt.Fprint(writer, render3dRect(targetShape)) } else { if !targetShape.DoubleBorder { if targetShape.Multiple { - fmt.Fprintf(writer, ``, - targetShape.Pos.X+10, targetShape.Pos.Y-10, targetShape.Width, targetShape.Height, style) + fmt.Fprintf(writer, ``, + targetShape.Pos.X+10, targetShape.Pos.Y-10, targetShape.Width, targetShape.Height, style, rx) } if sketchRunner != nil { out, err := d2sketch.Rect(sketchRunner, targetShape) @@ -817,15 +821,15 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske } fmt.Fprint(writer, out) } else { - fmt.Fprintf(writer, ``, - targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style) + fmt.Fprintf(writer, ``, + targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style, rx) } } else { if targetShape.Multiple { - fmt.Fprintf(writer, ``, - targetShape.Pos.X+10, targetShape.Pos.Y-10, targetShape.Width, targetShape.Height, style) - fmt.Fprintf(writer, ``, - targetShape.Pos.X+10+d2target.INNER_BORDER_OFFSET, targetShape.Pos.Y-10+d2target.INNER_BORDER_OFFSET, targetShape.Width-2*d2target.INNER_BORDER_OFFSET, targetShape.Height-2*d2target.INNER_BORDER_OFFSET, style) + fmt.Fprintf(writer, ``, + targetShape.Pos.X+10, targetShape.Pos.Y-10, targetShape.Width, targetShape.Height, style, rx) + fmt.Fprintf(writer, ``, + targetShape.Pos.X+10+d2target.INNER_BORDER_OFFSET, targetShape.Pos.Y-10+d2target.INNER_BORDER_OFFSET, targetShape.Width-2*d2target.INNER_BORDER_OFFSET, targetShape.Height-2*d2target.INNER_BORDER_OFFSET, style, rx) } if sketchRunner != nil { out, err := d2sketch.DoubleRect(sketchRunner, targetShape) @@ -834,10 +838,10 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske } fmt.Fprint(writer, out) } else { - fmt.Fprintf(writer, ``, - targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style) - fmt.Fprintf(writer, ``, - targetShape.Pos.X+d2target.INNER_BORDER_OFFSET, targetShape.Pos.Y+d2target.INNER_BORDER_OFFSET, targetShape.Width-2*d2target.INNER_BORDER_OFFSET, targetShape.Height-2*d2target.INNER_BORDER_OFFSET, style) + fmt.Fprintf(writer, ``, + targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style, rx) + fmt.Fprintf(writer, ``, + targetShape.Pos.X+d2target.INNER_BORDER_OFFSET, targetShape.Pos.Y+d2target.INNER_BORDER_OFFSET, targetShape.Width-2*d2target.INNER_BORDER_OFFSET, targetShape.Height-2*d2target.INNER_BORDER_OFFSET, style, rx) } } } diff --git a/d2target/d2target.go b/d2target/d2target.go index a9647f8e8..e5cf20cdb 100644 --- a/d2target/d2target.go +++ b/d2target/d2target.go @@ -199,9 +199,6 @@ func (s Shape) CSSStyle() string { dashSize, gapSize := svg.GetStrokeDashAttributes(float64(s.StrokeWidth), s.StrokeDash) out += fmt.Sprintf(`stroke-dasharray:%f,%f;`, dashSize, gapSize) } - if s.BorderRadius != 0 { - out += fmt.Sprintf(`rx:%d;`, s.BorderRadius) - } return out } diff --git a/e2etests/stable_test.go b/e2etests/stable_test.go index 99322c205..bca51d2e7 100644 --- a/e2etests/stable_test.go +++ b/e2etests/stable_test.go @@ -2013,6 +2013,18 @@ x: { y: { style.border-radius: 10 } +multiple2: { + style.border-radius: 6 + style.multiple: true +} +double: { + style.border-radius: 6 + style.double-border: true +} +three-dee: { + style.border-radius: 6 + style.3d: true +} `, }, { diff --git a/e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg b/e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg index 5ced08a2f..a1676a6a8 100644 --- a/e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg @@ -39,7 +39,7 @@ width="380" height="824" viewBox="-140 -108 380 824">