unfilled triangle arrowhead

This commit is contained in:
Gavin Nishizawa 2023-11-07 16:57:43 -08:00
parent 3c6793c108
commit 9d9afcdfe3
No known key found for this signature in database
GPG key ID: AE3B177777CE55CD
3 changed files with 50 additions and 24 deletions

View file

@ -181,9 +181,10 @@ func (a *Attributes) ToArrowhead() d2target.Arrowhead {
return d2target.NoArrowhead return d2target.NoArrowhead
} }
filled := false var filled *bool
if a.Style.Filled != nil { if a.Style.Filled != nil {
filled, _ = strconv.ParseBool(a.Style.Filled.Value) v, _ := strconv.ParseBool(a.Style.Filled.Value)
filled = go2.Pointer(v)
} }
return d2target.ToArrowhead(a.Shape.Value, filled) return d2target.ToArrowhead(a.Shape.Value, filled)
} }

View file

@ -138,6 +138,28 @@ func arrowheadMarker(isTarget bool, id string, connection d2target.Connection) s
) )
} }
path = polygonEl.Render() path = polygonEl.Render()
case d2target.UnfilledTriangleArrowhead:
polygonEl := d2themes.NewThemableElement("polygon")
polygonEl.Fill = d2target.BG_COLOR
polygonEl.Stroke = connection.Stroke
polygonEl.ClassName = "connection"
polygonEl.Attributes = fmt.Sprintf(`stroke-width="%d"`, connection.StrokeWidth)
if isTarget {
polygonEl.Points = fmt.Sprintf("%f,%f %f,%f %f,%f",
0., 0.,
width, height/2.0,
0., height,
)
} else {
polygonEl.Points = fmt.Sprintf("%f,%f %f,%f %f,%f",
width, 0.,
0., height/2.0,
width, height,
)
}
path = polygonEl.Render()
case d2target.TriangleArrowhead: case d2target.TriangleArrowhead:
polygonEl := d2themes.NewThemableElement("polygon") polygonEl := d2themes.NewThemableElement("polygon")
polygonEl.Fill = connection.Stroke polygonEl.Fill = connection.Stroke

View file

@ -720,13 +720,14 @@ func (c Connection) GetID() string {
type Arrowhead string type Arrowhead string
const ( const (
NoArrowhead Arrowhead = "none" NoArrowhead Arrowhead = "none"
ArrowArrowhead Arrowhead = "arrow" ArrowArrowhead Arrowhead = "arrow"
TriangleArrowhead Arrowhead = "triangle" UnfilledTriangleArrowhead Arrowhead = "unfilled-triangle"
DiamondArrowhead Arrowhead = "diamond" TriangleArrowhead Arrowhead = "triangle"
FilledDiamondArrowhead Arrowhead = "filled-diamond" DiamondArrowhead Arrowhead = "diamond"
CircleArrowhead Arrowhead = "circle" FilledDiamondArrowhead Arrowhead = "filled-diamond"
FilledCircleArrowhead Arrowhead = "filled-circle" CircleArrowhead Arrowhead = "circle"
FilledCircleArrowhead Arrowhead = "filled-circle"
// For fat arrows // For fat arrows
LineArrowhead Arrowhead = "line" LineArrowhead Arrowhead = "line"
@ -740,29 +741,28 @@ const (
DefaultArrowhead Arrowhead = TriangleArrowhead DefaultArrowhead Arrowhead = TriangleArrowhead
) )
// valid values for arrowhead.shape
var Arrowheads = map[string]struct{}{ var Arrowheads = map[string]struct{}{
string(NoArrowhead): {}, string(NoArrowhead): {},
string(ArrowArrowhead): {}, string(ArrowArrowhead): {},
string(TriangleArrowhead): {}, string(TriangleArrowhead): {},
string(DiamondArrowhead): {}, string(DiamondArrowhead): {},
string(FilledDiamondArrowhead): {}, string(CircleArrowhead): {},
string(CircleArrowhead): {}, string(CfOne): {},
string(FilledCircleArrowhead): {}, string(CfMany): {},
string(CfOne): {}, string(CfOneRequired): {},
string(CfMany): {}, string(CfManyRequired): {},
string(CfOneRequired): {},
string(CfManyRequired): {},
} }
func ToArrowhead(arrowheadType string, filled bool) Arrowhead { func ToArrowhead(arrowheadType string, filled *bool) Arrowhead {
switch arrowheadType { switch arrowheadType {
case string(DiamondArrowhead): case string(DiamondArrowhead):
if filled { if filled != nil && *filled {
return FilledDiamondArrowhead return FilledDiamondArrowhead
} }
return DiamondArrowhead return DiamondArrowhead
case string(CircleArrowhead): case string(CircleArrowhead):
if filled { if filled != nil && *filled {
return FilledCircleArrowhead return FilledCircleArrowhead
} }
return CircleArrowhead return CircleArrowhead
@ -771,6 +771,9 @@ func ToArrowhead(arrowheadType string, filled bool) Arrowhead {
case string(ArrowArrowhead): case string(ArrowArrowhead):
return ArrowArrowhead return ArrowArrowhead
case string(TriangleArrowhead): case string(TriangleArrowhead):
if filled != nil && !(*filled) {
return UnfilledTriangleArrowhead
}
return TriangleArrowhead return TriangleArrowhead
case string(CfOne): case string(CfOne):
return CfOne return CfOne
@ -794,7 +797,7 @@ func (arrowhead Arrowhead) Dimensions(strokeWidth float64) (width, height float6
baseHeight = 4 baseHeight = 4
widthMultiplier = 4 widthMultiplier = 4
heightMultiplier = 4 heightMultiplier = 4
case TriangleArrowhead: case TriangleArrowhead, UnfilledTriangleArrowhead:
baseWidth = 4 baseWidth = 4
baseHeight = 4 baseHeight = 4
widthMultiplier = 3 widthMultiplier = 3