@@ -49,11 +49,7 @@ struct RNCSliderContent: View {
4949 @ObservedObject var model : RNCSliderModel
5050
5151 var body : some View {
52- if model. ranged {
53- RNCRangedSliderContent ( model: model)
54- } else {
55- RNCSingleSliderContent ( model: model)
56- }
52+ RNCRangedSliderContent ( model: model)
5753 }
5854}
5955
@@ -98,11 +94,14 @@ struct RNCRangedSliderContent: View {
9894 let diameter = min ( Self . thumbDiameter, geometry. size. height)
9995 // The span the centre of a thumb moves across. Both thumbs stay fully
10096 // inside the view, so it is short of the width by one thumb.
101- let travel = max ( geometry. size. width - diameter, 0 )
97+ let travel = max ( geometry. size. width - ( model . ranged ? diameter : 0 ) , 0 )
10298
10399 let leftOffset = offset ( of: model. valueLeft, in: range, travel: travel)
104100 let rightOffset = offset ( of: model. valueRight, in: range, travel: travel)
105101
102+ let trackFillWidth = model. ranged ? max ( rightOffset - leftOffset, 0 ) : leftOffset
103+ let trackFillStartPoint = model. ranged ? min ( leftOffset, rightOffset) + diameter / 2 : 0
104+
106105 ZStack ( alignment: . leading) {
107106 Capsule ( )
108107 . fill ( Self . trackColor)
@@ -112,16 +111,18 @@ struct RNCRangedSliderContent: View {
112111 // a thumb. `max` keeps it from inverting on values crossed by JS.
113112 Capsule ( )
114113 . fill ( Color . accentColor)
115- . frame ( width: max ( rightOffset - leftOffset , 0 ) , height: Self . trackHeight)
116- . offset ( x: min ( leftOffset , rightOffset ) + diameter / 2 )
114+ . frame ( width: trackFillWidth , height: Self . trackHeight)
115+ . offset ( x: trackFillStartPoint )
117116
118117 thumb ( . left, diameter: diameter, offset: leftOffset, range: range, travel: travel)
119118 // Both thumbs pinned to the upper bound overlap exactly, and the right
120119 // one has nowhere left to go - so the left one has to take the touches
121120 // or the pair is stuck there.
122121 . zIndex ( model. valueLeft >= range. upperBound ? 1 : 0 )
123122
124- thumb ( . right, diameter: diameter, offset: rightOffset, range: range, travel: travel)
123+ if model. ranged {
124+ thumb ( . right, diameter: diameter, offset: rightOffset, range: range, travel: travel)
125+ }
125126 }
126127 . frame ( width: geometry. size. width, height: geometry. size. height)
127128 }
0 commit comments