mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
macos: SplitView dragging
This commit is contained in:
@ -21,7 +21,7 @@ struct GhosttyApp: App {
|
|||||||
case .error:
|
case .error:
|
||||||
ErrorView()
|
ErrorView()
|
||||||
case .ready:
|
case .ready:
|
||||||
SplitView(.horizontal, left: {
|
SplitView(.vertical, left: {
|
||||||
Color.green
|
Color.green
|
||||||
}, right: {
|
}, right: {
|
||||||
Color.red
|
Color.red
|
||||||
|
@ -5,7 +5,7 @@ struct SplitView<L: View, R: View>: View {
|
|||||||
let left: L
|
let left: L
|
||||||
let right: R
|
let right: R
|
||||||
|
|
||||||
private let splitterVisibleSize: CGFloat = 5
|
private let splitterVisibleSize: CGFloat = 2
|
||||||
private let splitterInvisibleSize: CGFloat = 5
|
private let splitterInvisibleSize: CGFloat = 5
|
||||||
|
|
||||||
@State var split: CGFloat = 0.5
|
@State var split: CGFloat = 0.5
|
||||||
@ -25,6 +25,24 @@ struct SplitView<L: View, R: View>: View {
|
|||||||
.offset(x: rightRect.origin.x, y: rightRect.origin.y)
|
.offset(x: rightRect.origin.x, y: rightRect.origin.y)
|
||||||
Splitter(direction: direction, visibleSize: splitterVisibleSize, invisibleSize: splitterInvisibleSize)
|
Splitter(direction: direction, visibleSize: splitterVisibleSize, invisibleSize: splitterInvisibleSize)
|
||||||
.position(splitterPoint)
|
.position(splitterPoint)
|
||||||
|
.gesture(dragGesture(geo.size, splitterPoint: splitterPoint))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func dragGesture(_ size: CGSize, splitterPoint: CGPoint) -> some Gesture {
|
||||||
|
return DragGesture()
|
||||||
|
.onChanged { gesture in
|
||||||
|
let minSize: CGFloat = 10
|
||||||
|
|
||||||
|
switch (direction) {
|
||||||
|
case .horizontal:
|
||||||
|
let new = min(max(minSize, gesture.location.x), size.width - minSize)
|
||||||
|
split = new / size.width
|
||||||
|
|
||||||
|
case .vertical:
|
||||||
|
let new = min(max(minSize, gesture.location.y), size.height - minSize)
|
||||||
|
split = new / size.height
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -57,7 +75,9 @@ struct SplitView<L: View, R: View>: View {
|
|||||||
result.size.width -= result.origin.x
|
result.size.width -= result.origin.x
|
||||||
|
|
||||||
case .vertical:
|
case .vertical:
|
||||||
assert(false)
|
result.origin.y += leftRect.size.height
|
||||||
|
result.origin.y += splitterVisibleSize / 2
|
||||||
|
result.size.height -= result.origin.y
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
Reference in New Issue
Block a user