update icon positioning according to shapes
This commit is contained in:
parent
6fd6e67ae0
commit
8a9fa24ee6
1 changed files with 49 additions and 15 deletions
|
|
@ -936,7 +936,7 @@ func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape,
|
||||||
} else {
|
} else {
|
||||||
drawClass(writer, diagramHash, targetShape)
|
drawClass(writer, diagramHash, targetShape)
|
||||||
}
|
}
|
||||||
addAppendixItems(writer, targetShape)
|
addAppendixItems(writer, targetShape, s)
|
||||||
fmt.Fprint(writer, `</g>`)
|
fmt.Fprint(writer, `</g>`)
|
||||||
fmt.Fprint(writer, closingTag)
|
fmt.Fprint(writer, closingTag)
|
||||||
return labelMask, nil
|
return labelMask, nil
|
||||||
|
|
@ -950,7 +950,7 @@ func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape,
|
||||||
} else {
|
} else {
|
||||||
drawTable(writer, diagramHash, targetShape)
|
drawTable(writer, diagramHash, targetShape)
|
||||||
}
|
}
|
||||||
addAppendixItems(writer, targetShape)
|
addAppendixItems(writer, targetShape, s)
|
||||||
fmt.Fprint(writer, `</g>`)
|
fmt.Fprint(writer, `</g>`)
|
||||||
fmt.Fprint(writer, closingTag)
|
fmt.Fprint(writer, closingTag)
|
||||||
return labelMask, nil
|
return labelMask, nil
|
||||||
|
|
@ -1341,28 +1341,62 @@ func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addAppendixItems(writer, targetShape)
|
addAppendixItems(writer, targetShape, s)
|
||||||
|
|
||||||
fmt.Fprint(writer, closingTag)
|
fmt.Fprint(writer, closingTag)
|
||||||
return labelMask, nil
|
return labelMask, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func addAppendixItems(writer io.Writer, shape d2target.Shape) {
|
func addAppendixItems(writer io.Writer, targetShape d2target.Shape, s shape.Shape) {
|
||||||
rightPadForTooltip := 0
|
var p1, p2 *geo.Point
|
||||||
if shape.Tooltip != "" {
|
if targetShape.Tooltip != "" || targetShape.Link != "" {
|
||||||
rightPadForTooltip = 2 * appendixIconRadius
|
corner := geo.NewPoint(float64(targetShape.Pos.X+targetShape.Width), float64(targetShape.Pos.Y))
|
||||||
fmt.Fprintf(writer, `<g transform="translate(%d %d)" class="appendix-icon">%s</g>`,
|
center := geo.NewPoint(
|
||||||
shape.Pos.X+shape.Width-appendixIconRadius,
|
float64(targetShape.Pos.X)+float64(targetShape.Width)/2.,
|
||||||
shape.Pos.Y-appendixIconRadius,
|
float64(targetShape.Pos.Y)+float64(targetShape.Height)/2.,
|
||||||
TooltipIcon,
|
|
||||||
)
|
)
|
||||||
fmt.Fprintf(writer, `<title>%s</title>`, svg.EscapeText(shape.Tooltip))
|
v1 := center.VectorTo(corner)
|
||||||
|
p1 = shape.TraceToShapeBorder(s, corner, corner.AddVector(v1))
|
||||||
|
if targetShape.Tooltip != "" && targetShape.Link != "" {
|
||||||
|
//. \\ corner
|
||||||
|
//. │ \\
|
||||||
|
//. │ \\p2
|
||||||
|
//. │ \\p1
|
||||||
|
//. │ \\
|
||||||
|
//. │ \\
|
||||||
|
//. └─────────────────\\
|
||||||
|
//. center
|
||||||
|
// we use the offset corner to find a 2nd point on the shape to estimate the tangent
|
||||||
|
// we use the tangent to find p2 on the shape at the correct distance from p1 (according to estimated tangent)
|
||||||
|
offset := geo.Vector{-2 * appendixIconRadius, 0}
|
||||||
|
offsetCorner := corner.AddVector(offset)
|
||||||
|
offsetP1 := shape.TraceToShapeBorder(s, offsetCorner, offsetCorner.AddVector(v1))
|
||||||
|
tangent := p1.VectorTo(offsetP1).Unit().Multiply(2 * appendixIconRadius)
|
||||||
|
// 2nd point traced to shape from p1 shifted by icon diameter along tangent
|
||||||
|
p2 = shape.TraceToShapeBorder(s, p1.AddVector(tangent), corner.AddVector(tangent))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if shape.Link != "" {
|
if targetShape.Tooltip != "" {
|
||||||
|
x := int(math.Ceil(p1.X))
|
||||||
|
y := int(math.Ceil(p1.Y))
|
||||||
|
|
||||||
fmt.Fprintf(writer, `<g transform="translate(%d %d)" class="appendix-icon">%s</g>`,
|
fmt.Fprintf(writer, `<g transform="translate(%d %d)" class="appendix-icon">%s</g>`,
|
||||||
shape.Pos.X+shape.Width-appendixIconRadius-rightPadForTooltip,
|
x-appendixIconRadius,
|
||||||
shape.Pos.Y-appendixIconRadius,
|
y-appendixIconRadius,
|
||||||
|
TooltipIcon,
|
||||||
|
)
|
||||||
|
fmt.Fprintf(writer, `<title>%s</title>`, svg.EscapeText(targetShape.Tooltip))
|
||||||
|
}
|
||||||
|
if targetShape.Link != "" {
|
||||||
|
if p2 == nil {
|
||||||
|
p2 = p1
|
||||||
|
}
|
||||||
|
x := int(math.Ceil(p2.X))
|
||||||
|
y := int(math.Ceil(p2.Y))
|
||||||
|
fmt.Fprintf(writer, `<g transform="translate(%d %d)" class="appendix-icon">%s</g>`,
|
||||||
|
x-appendixIconRadius,
|
||||||
|
y-appendixIconRadius,
|
||||||
LinkIcon,
|
LinkIcon,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue