-
Notifications
You must be signed in to change notification settings - Fork 47
/
TextLegendKeyElementFactory.kt
42 lines (35 loc) · 1.62 KB
/
TextLegendKeyElementFactory.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
* Copyright (c) 2023. JetBrains s.r.o.
* Use of this source code is governed by the MIT license that can be found in the LICENSE file.
*/
package org.jetbrains.letsPlot.core.plot.base.geom
import org.jetbrains.letsPlot.commons.geometry.DoubleVector
import org.jetbrains.letsPlot.core.plot.base.DataPointAesthetics
import org.jetbrains.letsPlot.core.plot.base.aes.AesScaling
import org.jetbrains.letsPlot.core.plot.base.aes.AestheticsUtil
import org.jetbrains.letsPlot.core.plot.base.geom.util.TextUtil
import org.jetbrains.letsPlot.core.plot.base.render.LegendKeyElementFactory
import org.jetbrains.letsPlot.core.plot.base.render.svg.Text
import org.jetbrains.letsPlot.core.plot.base.render.svg.TextLabel
import org.jetbrains.letsPlot.datamodel.svg.dom.SvgGElement
import org.jetbrains.letsPlot.datamodel.svg.dom.SvgRectElement
internal class TextLegendKeyElementFactory :
LegendKeyElementFactory {
override fun createKeyElement(p: DataPointAesthetics, size: DoubleVector): SvgGElement {
val rect = SvgRectElement(0.0, 0.0, size.x, size.y)
AestheticsUtil.updateFill(rect, p)
val label = TextLabel("a")
TextUtil.decorate(label, p)
label.setHorizontalAnchor(Text.HorizontalAnchor.MIDDLE)
label.setVerticalAnchor(Text.VerticalAnchor.CENTER)
label.moveTo(size.x / 2, size.y / 2)
val g = SvgGElement()
g.children().add(rect)
g.children().add(label.rootGroup)
return g
}
override fun minimumKeySize(p: DataPointAesthetics): DoubleVector {
val strokeWidth = AesScaling.strokeWidth(p)
return DoubleVector(4.0, strokeWidth + 4)
}
}