Skip to content

Commit ea047f3

Browse files
committed
Support scrolling with page up and page down.
1 parent f507bf9 commit ea047f3

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

Sources/Runestone/TextView/Core/Mac/TextView_Mac.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,27 @@ public extension TextView {
770770
override func selectAll(_ sender: Any?) {
771771
textViewController.selectedRange = NSRange(location: 0, length: textViewController.stringView.string.length)
772772
}
773+
774+
override func scrollPageUp(_ sender: Any?) {
775+
var newOffset = scrollView.contentOffset.applying(.init(translationX: 0, y: -frame.size.height))
776+
if newOffset.y < 0 {
777+
newOffset.y = 0
778+
}
779+
textViewController.viewport = CGRect(origin: newOffset, size: frame.size)
780+
textViewController.layoutIfNeeded()
781+
scrollView.contentOffset = newOffset
782+
}
783+
784+
override func scrollPageDown(_ sender: Any?) {
785+
let newOffset = scrollView.contentOffset.applying(.init(translationX: 0, y: frame.size.height))
786+
var newViewPort = CGRect(origin: newOffset, size: frame.size)
787+
if newViewPort.maxY > scrollView.contentSize.height {
788+
newViewPort = CGRect(origin: CGPoint(x: newOffset.x, y: scrollView.contentSize.height - frame.size.height), size: frame.size)
789+
}
790+
textViewController.viewport = newViewPort
791+
textViewController.layoutIfNeeded()
792+
scrollView.contentOffset = newOffset
793+
}
773794
}
774795

775796
// MARK: - Window

0 commit comments

Comments
 (0)