aboutsummaryrefslogtreecommitdiffhomepage
path: root/cocoa
diff options
context:
space:
mode:
authorNeil Hodgson <nyamatongwe@gmail.com>2023-03-02 16:46:14 +1100
committerNeil Hodgson <nyamatongwe@gmail.com>2023-03-02 16:46:14 +1100
commitc61df8742a4865ac9c67f8ed017248b82fe5574e (patch)
treed6872e88601bb6dcdcc0e7b93de125fd33312ca7 /cocoa
parente18633f14c36732d007e8c5bb742cc7d3e69d22d (diff)
downloadscintilla-mirror-c61df8742a4865ac9c67f8ed017248b82fe5574e.tar.gz
Cache client size when view moved or sized. That allows access to it from
secondary threads which otherwise shows warnings. Earlier approach of caching client rectangle failed to handle scrolling.
Diffstat (limited to 'cocoa')
-rw-r--r--cocoa/ScintillaCocoa.h3
-rw-r--r--cocoa/ScintillaCocoa.mm17
2 files changed, 17 insertions, 3 deletions
diff --git a/cocoa/ScintillaCocoa.h b/cocoa/ScintillaCocoa.h
index 4c1f10a97..f8c3357e0 100644
--- a/cocoa/ScintillaCocoa.h
+++ b/cocoa/ScintillaCocoa.h
@@ -103,6 +103,8 @@ private:
bool isFirstResponder;
bool isActive;
+ Point sizeClient;
+
bool enteredSetScrollingSize;
bool GetPasteboardData(NSPasteboard *board, SelectionText *selectedText);
@@ -118,6 +120,7 @@ private:
protected:
Point GetVisibleOriginInMain() const override;
+ Point ClientSize() const override;
PRectangle GetClientRectangle() const override;
PRectangle GetClientDrawingRectangle() override;
Point ConvertPoint(NSPoint point);
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index 4f4fa1b71..223c9dac0 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -732,15 +732,22 @@ Scintilla::Internal::Point ScintillaCocoa::GetVisibleOriginInMain() const {
//--------------------------------------------------------------------------------------------------
/**
+ * Return the size of the client area which has been cached.
+ */
+Scintilla::Internal::Point ScintillaCocoa::ClientSize() const {
+ return sizeClient;
+}
+
+//--------------------------------------------------------------------------------------------------
+
+/**
* Instead of returning the size of the inner view we have to return the visible part of it
* in order to make scrolling working properly.
* The returned value is in document coordinates.
*/
PRectangle ScintillaCocoa::GetClientRectangle() const {
NSScrollView *scrollView = ScrollContainer();
- NSSize size = scrollView.contentView.bounds.size;
- Point origin = GetVisibleOriginInMain();
- return PRectangle(origin.x, origin.y, origin.x+size.width, origin.y + size.height);
+ return NSRectToPRectangle(scrollView.contentView.bounds);
}
//--------------------------------------------------------------------------------------------------
@@ -2033,6 +2040,10 @@ bool ScintillaCocoa::SetScrollingSize() {
void ScintillaCocoa::Resize() {
SetScrollingSize();
+
+ const PRectangle rcClient = GetClientRectangle();
+ sizeClient = Point(rcClient.Width(), rcClient.Height());
+
ChangeSize();
}