@@ -5,81 +5,6 @@ public enum LegendIcon {
55 case shape( ScatterPlotSeriesOptions . ScatterPattern , Color )
66}
77
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-
838/// A container which has a value at each `RectEdge`.
849public struct EdgeComponents < T> {
8510 public var left : T
0 commit comments