aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cocoa/ScintillaCocoa.h3
-rw-r--r--cocoa/ScintillaCocoa.mm12
-rw-r--r--cocoa/ScintillaView.h56
-rw-r--r--cocoa/ScintillaView.mm44
4 files changed, 59 insertions, 56 deletions
diff --git a/cocoa/ScintillaCocoa.h b/cocoa/ScintillaCocoa.h
index 25b9807d7..23c84e616 100644
--- a/cocoa/ScintillaCocoa.h
+++ b/cocoa/ScintillaCocoa.h
@@ -88,6 +88,7 @@ namespace Scintilla {
class ScintillaCocoa : public ScintillaBase
{
private:
+ ScintillaView* sciView;
TimerTarget* timerTarget;
NSEvent* lastMouseEvent;
@@ -131,7 +132,7 @@ protected:
virtual void CancelModes();
public:
- ScintillaCocoa(SCIContentView* view, SCIMarginView* viewMargin);
+ ScintillaCocoa(ScintillaView* sciView_, SCIContentView* viewContent, SCIMarginView* viewMargin);
virtual ~ScintillaCocoa();
void SetDelegate(id<ScintillaNotificationProtocol> delegate_);
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index 90752d71c..076d6fcde 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -395,11 +395,15 @@ const CGFloat paddingHighlightY = 2;
//----------------- ScintillaCocoa -----------------------------------------------------------------
-ScintillaCocoa::ScintillaCocoa(SCIContentView* view, SCIMarginView* viewMargin)
+ScintillaCocoa::ScintillaCocoa(ScintillaView* sciView_, SCIContentView* viewContent, SCIMarginView* viewMargin)
{
vs.marginInside = false;
- wMain = view; // Don't retain since we're owned by view, which would cause a cycle
+
+ // Don't retain since we're owned by view, which would cause a cycle
+ sciView = sciView_;
+ wMain = viewContent;
wMargin = viewMargin;
+
timerTarget = [[TimerTarget alloc] init: this];
lastMouseEvent = NULL;
delegate = NULL;
@@ -896,7 +900,7 @@ sptr_t ScintillaCocoa::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPar
case SCI_SETPHASESDRAW: {
sptr_t r = ScintillaBase::WndProc(iMessage, wParam, lParam);
- [ContentView().owner updateIndicatorIME];
+ [sciView updateIndicatorIME];
return r;
}
@@ -1999,7 +2003,7 @@ bool ScintillaCocoa::SetScrollingSize(void) {
SetVerticalScrollPos();
enteredSetScrollingSize = false;
}
- [inner.owner setMarginWidth: vs.fixedColumnWidth];
+ [sciView setMarginWidth: vs.fixedColumnWidth];
return changes;
}
diff --git a/cocoa/ScintillaView.h b/cocoa/ScintillaView.h
index 4194ec4e9..8c4cdfe2e 100644
--- a/cocoa/ScintillaView.h
+++ b/cocoa/ScintillaView.h
@@ -36,8 +36,6 @@
*/
typedef void(*SciNotifyFunc) (intptr_t windowid, unsigned int iMessage, uintptr_t wParam, uintptr_t lParam);
-@class ScintillaView;
-
extern NSString *const SCIUpdateUINotification;
@protocol ScintillaNotificationProtocol
@@ -47,18 +45,7 @@ extern NSString *const SCIUpdateUINotification;
/**
* SCIMarginView draws line numbers and other margins next to the text view.
*/
-@interface SCIMarginView : NSRulerView
-{
-@private
- int marginWidth;
- ScintillaView *owner;
- NSMutableArray *currentCursors;
-}
-
-@property (assign) int marginWidth;
-@property (assign) ScintillaView *owner;
-
-- (id)initWithScrollView:(NSScrollView *)aScrollView;
+@interface SCIMarginView : NSRulerView;
@end
@@ -71,43 +58,18 @@ extern NSString *const SCIUpdateUINotification;
NSUserInterfaceValidations,
NSDraggingSource,
NSDraggingDestination,
- NSAccessibilityStaticText>
-{
-@private
- ScintillaView* mOwner;
- NSCursor* mCurrentCursor;
- NSTrackingArea *trackingArea;
-
- // Set when we are in composition mode and partial input is displayed.
- NSRange mMarkedTextRange;
-}
-
-@property (nonatomic, assign) ScintillaView* owner;
-
-- (void) setCursor: (int) cursor;
+ NSAccessibilityStaticText>;
-- (BOOL) canUndo;
-- (BOOL) canRedo;
+- (void) setCursor: (int) cursor; // Needed by ScintillaCocoa
@end
-@interface ScintillaView : NSView <InfoBarCommunicator, ScintillaNotificationProtocol>
-{
-@private
- // This is the actual content to which the backend renders itself.
- SCIContentView* mContent;
-
- NSScrollView *scrollView;
- SCIMarginView *marginView;
-
- CGFloat zoomDelta;
-
- // Area to display additional controls (e.g. zoom info, caret position, status info).
- NSView <InfoBarCommunicator>* mInfoBar;
- BOOL mInfoBarAtTop;
-
- id<ScintillaNotificationProtocol> mDelegate;
-}
+/**
+ * ScintillaView is the class instantiated by client code.
+ * It contains an NSScrollView which contains a SCIMarginView and a SCIContentView.
+ * It is responsible for providing an API and communicating to a delegate.
+ */
+@interface ScintillaView : NSView <InfoBarCommunicator, ScintillaNotificationProtocol>;
@property (nonatomic, assign) id<ScintillaNotificationProtocol> delegate;
@property (nonatomic, readonly) NSScrollView *scrollView;
diff --git a/cocoa/ScintillaView.mm b/cocoa/ScintillaView.mm
index 292a2b982..7000d96e3 100644
--- a/cocoa/ScintillaView.mm
+++ b/cocoa/ScintillaView.mm
@@ -15,7 +15,8 @@
using namespace Scintilla;
-// Add backend property as a private category
+// Add backend property to ScintillaView as a private category.
+// Specified here as backend accessed by SCIMarginView and SCIContentView.
@interface ScintillaView ()
@property (nonatomic, readonly) Scintilla::ScintillaCocoa* backend;
@end
@@ -51,8 +52,17 @@ static NSCursor *cursorFromEnum(Window::Cursor cursor)
}
}
+// Add marginWidth and owner properties as a private category.
+@interface SCIMarginView ()
+@property (assign) int marginWidth;
+@property (nonatomic, assign) ScintillaView* owner;
+@end
-@implementation SCIMarginView
+@implementation SCIMarginView {
+ int marginWidth;
+ ScintillaView *owner;
+ NSMutableArray *currentCursors;
+}
@synthesize marginWidth, owner;
@@ -160,7 +170,19 @@ static NSCursor *cursorFromEnum(Window::Cursor cursor)
@end
-@implementation SCIContentView
+// Add owner property as a private category.
+@interface SCIContentView ()
+@property (nonatomic, assign) ScintillaView* owner;
+@end
+
+@implementation SCIContentView {
+ ScintillaView* mOwner;
+ NSCursor* mCurrentCursor;
+ NSTrackingArea *trackingArea;
+
+ // Set when we are in composition mode and partial input is displayed.
+ NSRange mMarkedTextRange;
+}
@synthesize owner = mOwner;
@@ -1190,6 +1212,20 @@ sourceOperationMaskForDraggingContext: (NSDraggingContext) context
// The back end is kind of a controller and model in one.
// It uses the content view for display.
Scintilla::ScintillaCocoa* mBackend;
+
+ // This is the actual content to which the backend renders itself.
+ SCIContentView* mContent;
+
+ NSScrollView *scrollView;
+ SCIMarginView *marginView;
+
+ CGFloat zoomDelta;
+
+ // Area to display additional controls (e.g. zoom info, caret position, status info).
+ NSView <InfoBarCommunicator>* mInfoBar;
+ BOOL mInfoBarAtTop;
+
+ id<ScintillaNotificationProtocol> mDelegate;
}
@synthesize backend = mBackend;
@@ -1442,7 +1478,7 @@ sourceOperationMaskForDraggingContext: (NSDraggingContext) context
[scrollView setHasVerticalRuler:YES];
[scrollView setRulersVisible:YES];
- mBackend = new ScintillaCocoa(mContent, marginView);
+ mBackend = new ScintillaCocoa(self, mContent, marginView);
// Establish a connection from the back end to this container so we can handle situations
// which require our attention.