@@ -5,81 +5,6 @@ public enum LegendIcon {
5
5
case shape( ScatterPlotSeriesOptions . ScatterPattern , Color )
6
6
}
7
7
8
- public protocol LayoutComponent {
9
-
10
- /// Returns the minimum size required to display this element.
11
- ///
12
- /// - parameters:
13
- /// - edge: The edge on which the element will be displayed.
14
- /// - renderer: The renderer which will be used to draw the element. Helpful for measuring text.
15
- /// - note: The return value's `width` and `height` always correspond to x and y distances, respectively.
16
- /// Rectangular elements will want to swap their horizontal widths and heights when displayed on vertical edges.
17
- ///
18
- func measure( edge: RectEdge , _ renderer: Renderer ) -> Size
19
-
20
- /// Draws the element in the given `Rect`.
21
- ///
22
- /// - parameters:
23
- /// - rect: The region to draw in.
24
- /// - measuredSize: The minimum size calculated by the last call to `measure`. Helpful if the size is expensive to calculate.
25
- /// - edge: The edge on which the element will be displayed.
26
- /// - renderer: The renderer to use when drawing the element.
27
- ///
28
- func draw( _ rect: Rect , measuredSize: Size , edge: RectEdge , renderer: Renderer )
29
- }
30
-
31
- /// A `LayoutComponent` wrapper which adds padding to an internal `LayoutComponent`
32
- ///
33
- private struct _Padded < T: LayoutComponent > : LayoutComponent {
34
- var base : T
35
- var padding : EdgeComponents < Float > = . zero
36
-
37
- func measure( edge: RectEdge , _ renderer: Renderer ) -> Size {
38
- var size = base. measure ( edge: edge, renderer)
39
- size. width += padding. left + padding. right
40
- size. height += padding. top + padding. bottom
41
- return size
42
- }
43
- func draw( _ rect: Rect , measuredSize: Size , edge: RectEdge , renderer: Renderer ) {
44
- var adjustedMeasuredSize = measuredSize
45
- adjustedMeasuredSize. width -= padding. left + padding. right
46
- adjustedMeasuredSize. height -= padding. top + padding. bottom
47
- let adjustedRect = rect. inset ( by: padding)
48
- base. draw ( adjustedRect, measuredSize: adjustedMeasuredSize, edge: edge, renderer: renderer)
49
- }
50
- }
51
- extension LayoutComponent {
52
-
53
- /// Returns a new `LayoutComponent` which adds the given padding to this `LayoutComponent`.
54
- ///
55
- public func padding( _ padding: EdgeComponents < Float > ) -> LayoutComponent {
56
- return _Padded ( base: self , padding: padding)
57
- }
58
- }
59
-
60
- public struct Label : LayoutComponent {
61
- var text : String = " "
62
- var size : Float = 12
63
- var color : Color = . black
64
-
65
- public func measure( edge: RectEdge , _ renderer: Renderer ) -> Size {
66
- let hSize = renderer. getTextLayoutSize ( text: text, textSize: size)
67
- return edge. isHorizontal ? hSize : hSize. swappingComponents ( )
68
- }
69
- public func draw( _ rect: Rect , measuredSize: Size , edge: RectEdge , renderer: Renderer ) {
70
- var origin = rect. center + Point( - measuredSize. width/ 2 , - measuredSize. height/ 2 )
71
- let angle : Float
72
- if edge. isHorizontal {
73
- angle = 0
74
- } else {
75
- angle = 90
76
- origin += Point ( rect. width, 0 )
77
- }
78
- renderer. drawText ( text: text, location: origin, textSize: size,
79
- color: color, strokeWidth: 1.2 , angle: angle)
80
- }
81
- }
82
-
83
8
/// A container which has a value at each `RectEdge`.
84
9
public struct EdgeComponents < T> {
85
10
public var left : T
0 commit comments