diff options
| author | mixedpuppy <unknown> | 2007-12-05 23:06:58 +0000 | 
|---|---|---|
| committer | mixedpuppy <unknown> | 2007-12-05 23:06:58 +0000 | 
| commit | 21f54a4c47ad89ab870be19b4db5ca1914992608 (patch) | |
| tree | 7a56a2c74170e09c85b98ecdeebce310d001ad7d /macosx/ScintillaMacOSX.h | |
| parent | edac7fdf643fc5f1a374508f4f993de0951ff324 (diff) | |
| download | scintilla-mirror-21f54a4c47ad89ab870be19b4db5ca1914992608.tar.gz | |
modified version of adobe OSX patches.  Most of these patches are provided by Adobe, though I've
reorganized a lot of them
- improved drag/drop
- make copy/paste use modern pasteboard api's
- optimized textlayout usage
- reduce assertions for debug builds
- implement IME support
- other minor things
patches are available in openkomodo, which is a good test ground for scintilla osx (until someone
ports SCiTE).
Diffstat (limited to 'macosx/ScintillaMacOSX.h')
| -rw-r--r-- | macosx/ScintillaMacOSX.h | 54 | 
1 files changed, 46 insertions, 8 deletions
| diff --git a/macosx/ScintillaMacOSX.h b/macosx/ScintillaMacOSX.h index 1b386b48b..66d4f0f68 100644 --- a/macosx/ScintillaMacOSX.h +++ b/macosx/ScintillaMacOSX.h @@ -2,8 +2,10 @@   *  ScintillaMacOSX.h   *  tutorial   * - *  Created by Evan Jones on Sun Sep 01 2002. - *  Copyright (c) 2002 __MyCompanyName__. All rights reserved. + *  Original code by Evan Jones on Sun Sep 01 2002. + *  Contributors: + *  Shane Caraveo, ActiveState + *  Bernd Paradies, Adobe   *   */  #include "TView.h" @@ -50,20 +52,41 @@  #include "ScintillaCallTip.h"  static const OSType scintillaMacOSType = 'Scin'; -static const OSType scintillaNotifyObject = 'Snob'; -static const OSType scintillaNotifyFN = 'Snfn';  namespace Scintilla { +/** +On the Mac, there is no WM_COMMAND or WM_NOTIFY message that can be sent +back to the parent. Therefore, there must be a callback handler that acts +like a Windows WndProc, where Scintilla can send notifications to. Use +ScintillaMacOSX::registerNotifyHandler() to register such a handler. +Messgae format is: +<br> +WM_COMMAND: HIWORD (wParam) = notification code, LOWORD (wParam) = 0 (no control ID), lParam = ScintillaMacOSX* +<br> +WM_NOTIFY: wParam = 0 (no control ID), lParam = ptr to SCNotification structure, with hwndFrom set to ScintillaMacOSX* +*/ +typedef void(*SciNotifyFunc) (intptr_t windowid, unsigned int iMessage, uintptr_t wParam, uintptr_t lParam); + +/** +Scintilla sends these two messages to the nofity handler. Please refer +to the Windows API doc for details about the message format. +*/ +#define	WM_COMMAND	1001 +#define WM_NOTIFY	1002 +  class ScintillaMacOSX : public ScintillaBase, public TView  {   public:      HIViewRef vScrollBar;      HIViewRef hScrollBar;      SInt32 scrollBarFixedSize; +    SciNotifyFunc	notifyProc; +    intptr_t		notifyObj;      bool capturedMouse; -    bool inDragSession; // true if scintilla initiated the drag session +    // true if scintilla initiated the drag session +    bool inDragSession() { return inDragDrop == ddDragging; };       bool isTracking;       // Private so ScintillaMacOSX objects can not be copied @@ -82,15 +105,26 @@ public:      /** Returns the HIView object kind, needed to subclass TView. */      virtual ControlKind GetKind() { return kScintillaKind; } +    /// Register the notify callback +    void registerNotifyCallback(intptr_t windowid, SciNotifyFunc callback);  private:      virtual void Initialise();      virtual void Finalise(); +     +    // pasteboard support +    bool GetPasteboardData(PasteboardRef &pasteBoard, +                           SelectionText *selectedText, bool *isFileURL); +    void SetPasteboardData(PasteboardRef &pasteBoard, +                           const SelectionText &selectedText); +    char *GetStringFromCFString(CFStringRef &textString, int *textLen); + +    // Drag and drop      virtual void StartDrag();      Scintilla::Point GetDragPoint(DragRef inDrag); -    OSStatus GetDragData(DragRef inDrag, PasteboardRef &pasteBoard, CFStringRef *textString); +    bool GetDragData(DragRef inDrag, PasteboardRef &pasteBoard, +                         SelectionText *selectedText, +                         bool *isFileURL);      void SetDragCursor(DragRef inDrag); - -    // Drag and drop      virtual bool DragEnter(DragRef inDrag );      virtual bool DragWithin(DragRef inDrag );      virtual bool DragLeave(DragRef inDrag ); @@ -104,6 +138,7 @@ private:      MouseTrackingRegionID mouseTrackingID;      HIPoint GetLocalPoint(::Point pt); +    void InsertCharacters (const UniChar* buf, int len);      static pascal void IdleTimerEventHandler(EventLoopTimerRef inTimer,                                               EventLoopIdleTimerMessage inState,                                               void *scintilla ); @@ -136,7 +171,10 @@ public: // Public for scintilla_send_message      virtual void NotifyParent(SCNotification scn);      void NotifyKey(int key, int modifiers);      void NotifyURIDropped(const char *list); +#ifndef EXT_INPUT +    // Extended UTF8-UTF6-conversion to handle surrogate pairs correctly (CL265070)      virtual int KeyDefault(int key, int modifiers); +#endif      static pascal OSStatus CommandEventHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* data );      bool HasSelection(); | 
