feat: check border-radius value value before checking its decimals. New rx and ry compute method.
This commit is contained in:
parent
6632740fb1
commit
cd1027314e
3 changed files with 27 additions and 20 deletions
|
|
@ -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":
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue