update which icon is on border for some shapes

This commit is contained in:
Gavin Nishizawa 2023-07-03 18:50:20 -07:00
parent 3a2cb4eef0
commit dfa9600bbb
No known key found for this signature in database
GPG key ID: AE3B177777CE55CD

View file

@ -1350,26 +1350,40 @@ func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape,
func addAppendixItems(writer io.Writer, targetShape d2target.Shape, s shape.Shape) { func addAppendixItems(writer io.Writer, targetShape d2target.Shape, s shape.Shape) {
var p1, p2 *geo.Point var p1, p2 *geo.Point
if targetShape.Tooltip != "" || targetShape.Link != "" { if targetShape.Tooltip != "" || targetShape.Link != "" {
bothIcons := targetShape.Tooltip != "" && targetShape.Link != ""
corner := geo.NewPoint(float64(targetShape.Pos.X+targetShape.Width), float64(targetShape.Pos.Y)) corner := geo.NewPoint(float64(targetShape.Pos.X+targetShape.Width), float64(targetShape.Pos.Y))
center := geo.NewPoint( center := geo.NewPoint(
float64(targetShape.Pos.X)+float64(targetShape.Width)/2., float64(targetShape.Pos.X)+float64(targetShape.Width)/2.,
float64(targetShape.Pos.Y)+float64(targetShape.Height)/2., float64(targetShape.Pos.Y)+float64(targetShape.Height)/2.,
) )
offset := geo.Vector{-2 * appendixIconRadius, 0}
var leftOnShape bool
switch s.GetType() { switch s.GetType() {
case shape.STEP_TYPE, shape.HEXAGON_TYPE: case shape.STEP_TYPE, shape.HEXAGON_TYPE, shape.QUEUE_TYPE, shape.PAGE_TYPE:
// trace straight left for these // trace straight left for these
center.Y = float64(targetShape.Pos.Y) center.Y = float64(targetShape.Pos.Y)
case shape.PACKAGE_TYPE: case shape.PACKAGE_TYPE:
// trace straight down // trace straight down
center.X = float64(targetShape.Pos.X + targetShape.Width) center.X = float64(targetShape.Pos.X + targetShape.Width)
case shape.CIRCLE_TYPE, shape.OVAL_TYPE, shape.DIAMOND_TYPE,
shape.PERSON_TYPE, shape.CLOUD_TYPE, shape.CYLINDER_TYPE:
if bothIcons {
leftOnShape = true
corner = corner.AddVector(offset)
}
} }
v1 := center.VectorTo(corner) v1 := center.VectorTo(corner)
p1 = shape.TraceToShapeBorder(s, corner, corner.AddVector(v1)) p1 = shape.TraceToShapeBorder(s, corner, corner.AddVector(v1))
if targetShape.Tooltip != "" && targetShape.Link != "" { if bothIcons {
offset := geo.Vector{-2 * appendixIconRadius, 0} if leftOnShape {
// these shapes should have p1 on shape border
p2 = p1.AddVector(offset.Reverse())
p1, p2 = p2, p1
} else {
p2 = p1.AddVector(offset) p2 = p1.AddVector(offset)
} }
} }
}
if targetShape.Tooltip != "" { if targetShape.Tooltip != "" {
x := int(math.Ceil(p1.X)) x := int(math.Ceil(p1.X))