Skip to content

Commit 567b62a

Browse files
Make both single and double thumb variants based on same layout
This allows the consistant approach to further customization
1 parent b637550 commit 567b62a

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

package/ios/RNCSliderView.swift

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)