feat: check border-radius value value before checking its decimals. New rx and ry compute method.

This commit is contained in:
Antoine Poivey 2023-03-17 18:52:21 +01:00
parent 6632740fb1
commit cd1027314e
No known key found for this signature in database
GPG key ID: 6AA1C83421F1A287
3 changed files with 27 additions and 20 deletions

View file

@ -167,6 +167,10 @@ type Style struct {
DoubleBorder *Scalar `json:"doubleBorder,omitempty"` DoubleBorder *Scalar `json:"doubleBorder,omitempty"`
} }
func hasDecimalValue(value float64) bool {
return math.Mod(value, 1) != 0
}
func (s *Style) Apply(key, value string) error { func (s *Style) Apply(key, value string) error {
switch key { switch key {
case "opacity": case "opacity":
@ -220,8 +224,8 @@ func (s *Style) Apply(key, value string) error {
if err != nil || (f < 0 || f > 20) { if err != nil || (f < 0 || f > 20) {
return errors.New(`expected "border-radius" to be a number between 0 and 20`) return errors.New(`expected "border-radius" to be a number between 0 and 20`)
} }
if hasDecimalValue := math.Mod(f, 1) != 0; f > 1 && hasDecimalValue { if f > 1 && hasDecimalValue(f) {
return errors.New(`expected "border-radius" to be an integer if superior to 1`) return errors.New(`expected "border-radius" to be an integer if greater than 1`)
} }
s.BorderRadius.Value = value s.BorderRadius.Value = value
case "shadow": case "shadow":

View file

@ -983,12 +983,6 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
// TODO should standardize "" to rectangle // TODO should standardize "" to rectangle
case d2target.ShapeRectangle, d2target.ShapeSequenceDiagram, "": case d2target.ShapeRectangle, d2target.ShapeSequenceDiagram, "":
// TODO use Rx property of NewThemableElement instead
// DO
rx := ""
if targetShape.BorderRadius != 0 {
rx = fmt.Sprintf(` rx="%s"`, d2themes.FormatRxRy(targetShape.BorderRadius))
}
if targetShape.ThreeDee { if targetShape.ThreeDee {
fmt.Fprint(writer, render3dRect(targetShape)) fmt.Fprint(writer, render3dRect(targetShape))
} else { } else {
@ -1002,7 +996,8 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
el.Fill = fill el.Fill = fill
el.Stroke = stroke el.Stroke = stroke
el.Style = style el.Style = style
el.Attributes = rx el.Rx = targetShape.BorderRadius
el.Ry = targetShape.BorderRadius
fmt.Fprint(writer, el.Render()) fmt.Fprint(writer, el.Render())
} }
if sketchRunner != nil { if sketchRunner != nil {
@ -1020,7 +1015,8 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
el.Fill = fill el.Fill = fill
el.Stroke = stroke el.Stroke = stroke
el.Style = style el.Style = style
el.Attributes = rx el.Rx = targetShape.BorderRadius
el.Ry = targetShape.BorderRadius
fmt.Fprint(writer, el.Render()) fmt.Fprint(writer, el.Render())
} }
} else { } else {
@ -1033,7 +1029,8 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
el.Fill = fill el.Fill = fill
el.Stroke = stroke el.Stroke = stroke
el.Style = style el.Style = style
el.Attributes = rx el.Rx = targetShape.BorderRadius
el.Ry = targetShape.BorderRadius
fmt.Fprint(writer, el.Render()) fmt.Fprint(writer, el.Render())
el = d2themes.NewThemableElement("rect") el = d2themes.NewThemableElement("rect")
@ -1044,7 +1041,8 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
el.Fill = fill el.Fill = fill
el.Stroke = stroke el.Stroke = stroke
el.Style = style el.Style = style
el.Attributes = rx el.Rx = targetShape.BorderRadius
el.Ry = targetShape.BorderRadius
fmt.Fprint(writer, el.Render()) fmt.Fprint(writer, el.Render())
} }
if sketchRunner != nil { if sketchRunner != nil {
@ -1062,7 +1060,8 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
el.Fill = fill el.Fill = fill
el.Stroke = stroke el.Stroke = stroke
el.Style = style el.Style = style
el.Attributes = rx el.Rx = targetShape.BorderRadius
el.Ry = targetShape.BorderRadius
fmt.Fprint(writer, el.Render()) fmt.Fprint(writer, el.Render())
el = d2themes.NewThemableElement("rect") el = d2themes.NewThemableElement("rect")
@ -1073,7 +1072,8 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
el.Fill = fill el.Fill = fill
el.Stroke = stroke el.Stroke = stroke
el.Style = style el.Style = style
el.Attributes = rx el.Rx = targetShape.BorderRadius
el.Ry = targetShape.BorderRadius
fmt.Fprint(writer, el.Render()) fmt.Fprint(writer, el.Render())
} }
} }

View file

@ -135,10 +135,10 @@ func (el *ThemableElement) Render() string {
out += fmt.Sprintf(` r="%f"`, el.R) out += fmt.Sprintf(` r="%f"`, el.R)
} }
if el.Rx != math.MaxFloat64 { if el.Rx != math.MaxFloat64 {
out += fmt.Sprintf(` rx="%s"`, FormatRxRy(el.Rx)) out += fmt.Sprintf(` rx="%f"`, calculateAxisRadius(el.Rx, el.Width))
} }
if el.Ry != math.MaxFloat64 { if el.Ry != math.MaxFloat64 {
out += fmt.Sprintf(` ry="%s"`, FormatRxRy(el.Ry)) out += fmt.Sprintf(` ry="%f"`, calculateAxisRadius(el.Ry, el.Height))
} }
if el.Cx != math.MaxFloat64 { if el.Cx != math.MaxFloat64 {
out += fmt.Sprintf(` cx="%f"`, el.Cx) out += fmt.Sprintf(` cx="%f"`, el.Cx)
@ -207,9 +207,12 @@ func (el *ThemableElement) Render() string {
return out + " />" return out + " />"
} }
func FormatRxRy(value float64) string { func calculateAxisRadius(borderRadius float64, sideLength float64) float64 {
if 0 < value && value < 1 { if borderRadius >= 1 {
return fmt.Sprintf(`%v%%`, int(value*100)) return borderRadius
} }
return fmt.Sprintf(`%f`, value) if sideLength == math.MaxFloat64 {
return 0
}
return borderRadius * sideLength
} }