From ea047f3e53397ddc98a394f40d7c115bb706b217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20St=C3=BChrk?= Date: Thu, 9 Feb 2023 08:33:37 +0100 Subject: [PATCH] Support scrolling with page up and page down. --- .../TextView/Core/Mac/TextView_Mac.swift | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Sources/Runestone/TextView/Core/Mac/TextView_Mac.swift b/Sources/Runestone/TextView/Core/Mac/TextView_Mac.swift index 385ae6dfb..e5b17f238 100644 --- a/Sources/Runestone/TextView/Core/Mac/TextView_Mac.swift +++ b/Sources/Runestone/TextView/Core/Mac/TextView_Mac.swift @@ -770,6 +770,27 @@ public extension TextView { override func selectAll(_ sender: Any?) { textViewController.selectedRange = NSRange(location: 0, length: textViewController.stringView.string.length) } + + override func scrollPageUp(_ sender: Any?) { + var newOffset = scrollView.contentOffset.applying(.init(translationX: 0, y: -frame.size.height)) + if newOffset.y < 0 { + newOffset.y = 0 + } + textViewController.viewport = CGRect(origin: newOffset, size: frame.size) + textViewController.layoutIfNeeded() + scrollView.contentOffset = newOffset + } + + override func scrollPageDown(_ sender: Any?) { + let newOffset = scrollView.contentOffset.applying(.init(translationX: 0, y: frame.size.height)) + var newViewPort = CGRect(origin: newOffset, size: frame.size) + if newViewPort.maxY > scrollView.contentSize.height { + newViewPort = CGRect(origin: CGPoint(x: newOffset.x, y: scrollView.contentSize.height - frame.size.height), size: frame.size) + } + textViewController.viewport = newViewPort + textViewController.layoutIfNeeded() + scrollView.contentOffset = newOffset + } } // MARK: - Window