diff options
Diffstat (limited to 'src/Editor.h')
-rw-r--r-- | src/Editor.h | 177 |
1 files changed, 95 insertions, 82 deletions
diff --git a/src/Editor.h b/src/Editor.h index 42944929b..08e7d134b 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -8,7 +8,7 @@ #ifndef EDITOR_H #define EDITOR_H -namespace Scintilla { +namespace Scintilla::Internal { /** */ @@ -55,7 +55,7 @@ public: upTo = 0; } void Need(WorkItems items_, Sci::Position pos) noexcept { - if (FlagSet(items_, WorkItems::style) && (upTo < pos)) + if (Scintilla::FlagSet(items_, WorkItems::style) && (upTo < pos)) upTo = pos; items = static_cast<WorkItems>(static_cast<int>(items) | static_cast<int>(items_)); } @@ -70,16 +70,16 @@ public: bool rectangular; bool lineCopy; int codePage; - int characterSet; - SelectionText() noexcept : rectangular(false), lineCopy(false), codePage(0), characterSet(0) {} + Scintilla::CharacterSet characterSet; + SelectionText() noexcept : rectangular(false), lineCopy(false), codePage(0), characterSet(Scintilla::CharacterSet::Ansi) {} void Clear() noexcept { s.clear(); rectangular = false; lineCopy = false; codePage = 0; - characterSet = 0; + characterSet = Scintilla::CharacterSet::Ansi; } - void Copy(const std::string &s_, int codePage_, int characterSet_, bool rectangular_, bool lineCopy_) { + void Copy(const std::string &s_, int codePage_, Scintilla::CharacterSet characterSet_, bool rectangular_, bool lineCopy_) { s = s_; codePage = codePage_; characterSet = characterSet_; @@ -145,16 +145,25 @@ struct WrapPending { } }; -struct CaretPolicy { - int policy; // Combination from CARET_SLOP, CARET_STRICT, CARET_JUMPS, CARET_EVEN +struct CaretPolicySlop { + Scintilla::CaretPolicy policy; // Combination from CaretPolicy::Slop, CaretPolicy::Strict, CaretPolicy::Jumps, CaretPolicy::Even int slop; // Pixels for X, lines for Y - CaretPolicy(uptr_t policy_=0, sptr_t slop_=0) noexcept : - policy(static_cast<int>(policy_)), slop(static_cast<int>(slop_)) {} + CaretPolicySlop(Scintilla::CaretPolicy policy_, intptr_t slop_) noexcept : + policy(policy_), slop(static_cast<int>(slop_)) {} + CaretPolicySlop(uintptr_t policy_=0, intptr_t slop_=0) noexcept : + policy(static_cast<Scintilla::CaretPolicy>(policy_)), slop(static_cast<int>(slop_)) {} }; struct CaretPolicies { - CaretPolicy x; - CaretPolicy y; + CaretPolicySlop x; + CaretPolicySlop y; +}; + +struct VisiblePolicySlop { + Scintilla::VisiblePolicy policy; // Combination from VisiblePolicy::Slop, VisiblePolicy::Strict + int slop; // Pixels for X, lines for Y + VisiblePolicySlop(uintptr_t policy_ = 0, intptr_t slop_ = 0) noexcept : + policy(static_cast<Scintilla::VisiblePolicy>(policy_)), slop(static_cast<int>(slop_)) {} }; enum class XYScrollOptions { @@ -165,6 +174,10 @@ enum class XYScrollOptions { all = useMargin | vertical | horizontal }; +constexpr XYScrollOptions operator|(XYScrollOptions a, XYScrollOptions b) noexcept { + return static_cast<XYScrollOptions>(static_cast<int>(a) | static_cast<int>(b)); +} + /** */ class Editor : public EditModel, public DocWatcher { @@ -179,14 +192,14 @@ protected: // ScintillaBase subclass needs access to much of Editor * When a style attribute is changed, this cache is flushed. */ bool stylesValid; ViewStyle vs; - int technology; + Scintilla::Technology technology; Point sizeRGBAImage; float scaleRGBAImage; MarginView marginView; EditView view; - int cursorMode; + Scintilla::CursorShape cursorMode; bool mouseDownCaptures; bool mouseWheelCaptures; @@ -196,14 +209,14 @@ protected: // ScintillaBase subclass needs access to much of Editor int scrollWidth; bool verticalScrollBarVisible; bool endAtLastLine; - int caretSticky; - int marginOptions; + Scintilla::CaretSticky caretSticky; + Scintilla::MarginOption marginOptions; bool mouseSelectionRectangularSwitch; bool multipleSelection; bool additionalSelectionTyping; - int multiPasteMode; + Scintilla::MultiPaste multiPasteMode; - int virtualSpaceOptions; + Scintilla::VirtualSpace virtualSpaceOptions; KeyMap kmap; @@ -232,12 +245,12 @@ protected: // ScintillaBase subclass needs access to much of Editor Sci::Position wordSelectAnchorEndPos; Sci::Position wordSelectInitialCaretPos; SelectionSegment targetRange; - int searchFlags; + Scintilla::FindOption searchFlags; Sci::Line topLine; Sci::Position posTopLine; Sci::Position lengthForEncode; - int needUpdateUI; + Scintilla::Update needUpdateUI; enum class PaintState { notPainting, painting, abandoned } paintState; bool paintAbandonedByStyling; @@ -245,23 +258,23 @@ protected: // ScintillaBase subclass needs access to much of Editor bool paintingAllText; bool willRedrawAll; WorkNeeded workNeeded; - int idleStyling; + Scintilla::IdleStyling idleStyling; bool needIdleStyling; - int modEventMask; + Scintilla::ModificationFlags modEventMask; bool commandEvents; SelectionText drag; CaretPolicies caretPolicies; - CaretPolicy visiblePolicy; + VisiblePolicySlop visiblePolicy; Sci::Position searchAnchor; bool recordingMacro; - int foldAutomatic; + Scintilla::AutomaticFold foldAutomatic; // Wrapping support WrapPending wrapPending; @@ -317,7 +330,7 @@ protected: // ScintillaBase subclass needs access to much of Editor void InvalidateRange(Sci::Position start, Sci::Position end); bool UserVirtualSpace() const noexcept { - return ((virtualSpaceOptions & SCVS_USERACCESSIBLE) != 0); + return (FlagSet(virtualSpaceOptions, Scintilla::VirtualSpace::UserAccessible)); } Sci::Position CurrentPosition() const; bool SelectionEmpty() const noexcept; @@ -389,8 +402,8 @@ protected: // ScintillaBase subclass needs access to much of Editor void PaintSelMargin(Surface *surfaceWindow, const PRectangle &rc); void RefreshPixMaps(Surface *surfaceWindow); void Paint(Surface *surfaceWindow, PRectangle rcArea); - Sci::Position FormatRange(bool draw, const Sci_RangeToFormat *pfr); - long TextWidth(uptr_t style, const char *text); + Sci::Position FormatRange(bool draw, const Scintilla::RangeToFormat *pfr); + long TextWidth(Scintilla::uptr_t style, const char *text); virtual void SetVerticalScrollPos() = 0; virtual void SetHorizontalScrollPos() = 0; @@ -403,7 +416,7 @@ protected: // ScintillaBase subclass needs access to much of Editor Sci::Position RealizeVirtualSpace(Sci::Position position, Sci::Position virtualSpace); SelectionPosition RealizeVirtualSpace(const SelectionPosition &position); void AddChar(char ch); - virtual void InsertCharacter(std::string_view sv, CharacterSource charSource); + virtual void InsertCharacter(std::string_view sv, Scintilla::CharacterSource charSource); void ClearBeforeTentativeStart(); void InsertPaste(const char *text, Sci::Position len); enum class PasteShape { stream=0, rectangular = 1, line = 2 }; @@ -424,25 +437,25 @@ protected: // ScintillaBase subclass needs access to much of Editor void DelCharBack(bool allowLineStartDeletion); virtual void ClaimSelection() = 0; - static int ModifierFlags(bool shift, bool ctrl, bool alt, bool meta=false, bool super=false) noexcept; + static Scintilla::KeyMod ModifierFlags(bool shift, bool ctrl, bool alt, bool meta=false, bool super=false) noexcept; virtual void NotifyChange() = 0; virtual void NotifyFocus(bool focus); virtual void SetCtrlID(int identifier); virtual int GetCtrlID() { return ctrlID; } - virtual void NotifyParent(SCNotification scn) = 0; + virtual void NotifyParent(Scintilla::NotificationData scn) = 0; virtual void NotifyStyleToNeeded(Sci::Position endStyleNeeded); - void NotifyChar(int ch, CharacterSource charSource); + void NotifyChar(int ch, Scintilla::CharacterSource charSource); void NotifySavePoint(bool isSavePoint); void NotifyModifyAttempt(); - virtual void NotifyDoubleClick(Point pt, int modifiers); - void NotifyHotSpotClicked(Sci::Position position, int modifiers); - void NotifyHotSpotDoubleClicked(Sci::Position position, int modifiers); - void NotifyHotSpotReleaseClick(Sci::Position position, int modifiers); + virtual void NotifyDoubleClick(Point pt, Scintilla::KeyMod modifiers); + void NotifyHotSpotClicked(Sci::Position position, Scintilla::KeyMod modifiers); + void NotifyHotSpotDoubleClicked(Sci::Position position, Scintilla::KeyMod modifiers); + void NotifyHotSpotReleaseClick(Sci::Position position, Scintilla::KeyMod modifiers); bool NotifyUpdateUI(); void NotifyPainted(); - void NotifyIndicatorClick(bool click, Sci::Position position, int modifiers); - bool NotifyMarginClick(Point pt, int modifiers); - bool NotifyMarginRightClick(Point pt, int modifiers); + void NotifyIndicatorClick(bool click, Sci::Position position, Scintilla::KeyMod modifiers); + bool NotifyMarginClick(Point pt, Scintilla::KeyMod modifiers); + bool NotifyMarginRightClick(Point pt, Scintilla::KeyMod modifiers); void NotifyNeedShown(Sci::Position pos, Sci::Position len); void NotifyDwelling(Point pt, bool state); void NotifyZoom(); @@ -454,10 +467,10 @@ protected: // ScintillaBase subclass needs access to much of Editor void NotifyDeleted(Document *document, void *userData) noexcept override; void NotifyStyleNeeded(Document *doc, void *userData, Sci::Position endStyleNeeded) override; void NotifyLexerChanged(Document *doc, void *userData) override; - void NotifyErrorOccurred(Document *doc, void *userData, int status) override; - void NotifyMacroRecord(unsigned int iMessage, uptr_t wParam, sptr_t lParam); + void NotifyErrorOccurred(Document *doc, void *userData, Scintilla::Status status) override; + void NotifyMacroRecord(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam); - void ContainerNeedsUpdate(int flags) noexcept; + void ContainerNeedsUpdate(Scintilla::Update flags) noexcept; void PageMove(int direction, Selection::SelTypes selt=Selection::SelTypes::none, bool stuttered = false); enum class CaseMapping { same, upper, lower }; virtual std::string CaseMapString(const std::string &s, CaseMapping caseMapping); @@ -475,18 +488,18 @@ protected: // ScintillaBase subclass needs access to much of Editor Sci::Position VCHomeDisplayPosition(Sci::Position position); Sci::Position VCHomeWrapPosition(Sci::Position position); Sci::Position LineEndWrapPosition(Sci::Position position); - int HorizontalMove(unsigned int iMessage); - int DelWordOrLine(unsigned int iMessage); - virtual int KeyCommand(unsigned int iMessage); - virtual int KeyDefault(int /* key */, int /*modifiers*/); - int KeyDownWithModifiers(int key, int modifiers, bool *consumed); + int HorizontalMove(Scintilla::Message iMessage); + int DelWordOrLine(Scintilla::Message iMessage); + virtual int KeyCommand(Scintilla::Message iMessage); + virtual int KeyDefault(Scintilla::Keys /* key */, Scintilla::KeyMod /*modifiers*/); + int KeyDownWithModifiers(Scintilla::Keys key, Scintilla::KeyMod modifiers, bool *consumed); void Indent(bool forwards); virtual std::unique_ptr<CaseFolder> CaseFolderForEncoding(); - Sci::Position FindText(uptr_t wParam, sptr_t lParam); + Sci::Position FindText(Scintilla::uptr_t wParam, Scintilla::sptr_t lParam); void SearchAnchor(); - Sci::Position SearchText(unsigned int iMessage, uptr_t wParam, sptr_t lParam); + Sci::Position SearchText(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam); Sci::Position SearchInTarget(const char *text, Sci::Position length); void GoToLine(Sci::Line lineNo); @@ -511,10 +524,10 @@ protected: // ScintillaBase subclass needs access to much of Editor void WordSelection(Sci::Position pos); void DwellEnd(bool mouseMoved); void MouseLeave(); - virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers); - virtual void RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers); - void ButtonMoveWithModifiers(Point pt, unsigned int curTime, int modifiers); - void ButtonUpWithModifiers(Point pt, unsigned int curTime, int modifiers); + virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, Scintilla::KeyMod modifiers); + virtual void RightButtonDownWithModifiers(Point pt, unsigned int curTime, Scintilla::KeyMod modifiers); + void ButtonMoveWithModifiers(Point pt, unsigned int curTime, Scintilla::KeyMod modifiers); + void ButtonUpWithModifiers(Point pt, unsigned int curTime, Scintilla::KeyMod modifiers); bool Idle(); enum class TickReason { caret, scroll, widen, dwell, platform }; @@ -534,13 +547,13 @@ protected: // ScintillaBase subclass needs access to much of Editor void StartIdleStyling(bool truncatedLastStyling); void StyleAreaBounded(PRectangle rcArea, bool scrolling); constexpr bool SynchronousStylingToVisible() const noexcept { - return (idleStyling == SC_IDLESTYLING_NONE) || (idleStyling == SC_IDLESTYLING_AFTERVISIBLE); + return (idleStyling == Scintilla::IdleStyling::None) || (idleStyling == Scintilla::IdleStyling::AfterVisible); } - void IdleStyling(); + void IdleStyle(); virtual void IdleWork(); virtual void QueueIdleWork(WorkItems items, Sci::Position upTo=0); - virtual int SupportsFeature(int feature); + virtual int SupportsFeature(Scintilla::Supports feature); virtual bool PaintContains(PRectangle rc); bool PaintContainsMargin(); void CheckForChangeOutsidePaint(Range r); @@ -549,18 +562,18 @@ protected: // ScintillaBase subclass needs access to much of Editor void SetAnnotationHeights(Sci::Line start, Sci::Line end); virtual void SetDocPointer(Document *document); - void SetAnnotationVisible(int visible); - void SetEOLAnnotationVisible(int visible); + void SetAnnotationVisible(Scintilla::AnnotationVisible visible); + void SetEOLAnnotationVisible(Scintilla::EOLAnnotationVisible visible); Sci::Line ExpandLine(Sci::Line line); void SetFoldExpanded(Sci::Line lineDoc, bool expanded); - void FoldLine(Sci::Line line, int action); - void FoldExpand(Sci::Line line, int action, int level); + void FoldLine(Sci::Line line, Scintilla::FoldAction action); + void FoldExpand(Sci::Line line, Scintilla::FoldAction action, Scintilla::FoldLevel level); Sci::Line ContractedFoldNext(Sci::Line lineStart) const; void EnsureLineVisible(Sci::Line lineDoc, bool enforcePolicy); - void FoldChanged(Sci::Line line, int levelNow, int levelPrev); + void FoldChanged(Sci::Line line, Scintilla::FoldLevel levelNow, Scintilla::FoldLevel levelPrev); void NeedShown(Sci::Position pos, Sci::Position len); - void FoldAll(int action); + void FoldAll(Scintilla::FoldAction action); Sci::Position GetTag(char *tagValue, int tagNumber); Sci::Position ReplaceTarget(bool replacePatterns, const char *text, Sci::Position length=-1); @@ -580,39 +593,39 @@ protected: // ScintillaBase subclass needs access to much of Editor Sci::Line WrapCount(Sci::Line line); void AddStyledText(const char *buffer, Sci::Position appendLength); - virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) = 0; - bool ValidMargin(uptr_t wParam) const noexcept; - void StyleSetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam); - sptr_t StyleGetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam); - void SetSelectionNMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam); + virtual Scintilla::sptr_t DefWndProc(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam) = 0; + bool ValidMargin(Scintilla::uptr_t wParam) const noexcept; + void StyleSetMessage(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam); + Scintilla::sptr_t StyleGetMessage(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam); + void SetSelectionNMessage(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam); - static const char *StringFromEOLMode(int eolMode) noexcept; + static const char *StringFromEOLMode(Scintilla::EndOfLine eolMode) noexcept; // Coercion functions for transforming WndProc parameters into pointers - static void *PtrFromSPtr(sptr_t lParam) noexcept { + static void *PtrFromSPtr(Scintilla::sptr_t lParam) noexcept { return reinterpret_cast<void *>(lParam); } - static const char *ConstCharPtrFromSPtr(sptr_t lParam) noexcept { + static const char *ConstCharPtrFromSPtr(Scintilla::sptr_t lParam) noexcept { return static_cast<const char *>(PtrFromSPtr(lParam)); } - static const unsigned char *ConstUCharPtrFromSPtr(sptr_t lParam) noexcept { + static const unsigned char *ConstUCharPtrFromSPtr(Scintilla::sptr_t lParam) noexcept { return static_cast<const unsigned char *>(PtrFromSPtr(lParam)); } - static char *CharPtrFromSPtr(sptr_t lParam) noexcept { + static char *CharPtrFromSPtr(Scintilla::sptr_t lParam) noexcept { return static_cast<char *>(PtrFromSPtr(lParam)); } - static unsigned char *UCharPtrFromSPtr(sptr_t lParam) noexcept { + static unsigned char *UCharPtrFromSPtr(Scintilla::sptr_t lParam) noexcept { return static_cast<unsigned char *>(PtrFromSPtr(lParam)); } - static void *PtrFromUPtr(uptr_t wParam) noexcept { + static void *PtrFromUPtr(Scintilla::uptr_t wParam) noexcept { return reinterpret_cast<void *>(wParam); } - static const char *ConstCharPtrFromUPtr(uptr_t wParam) noexcept { + static const char *ConstCharPtrFromUPtr(Scintilla::uptr_t wParam) noexcept { return static_cast<const char *>(PtrFromUPtr(wParam)); } - static sptr_t StringResult(sptr_t lParam, const char *val) noexcept; - static sptr_t BytesResult(sptr_t lParam, const unsigned char *val, size_t len) noexcept; + static Scintilla::sptr_t StringResult(Scintilla::sptr_t lParam, const char *val) noexcept; + static Scintilla::sptr_t BytesResult(Scintilla::sptr_t lParam, const unsigned char *val, size_t len) noexcept; // Set a variable controlling appearance to a value and invalidates the display // if a change was made. Avoids extra text and the possibility of mistyping. @@ -633,11 +646,11 @@ public: // Public so the COM thunks can access it. bool IsUnicodeMode() const noexcept; // Public so scintilla_send_message can use it. - virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam); + virtual Scintilla::sptr_t WndProc(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam); // Public so scintilla_set_id can use it. int ctrlID; // Public so COM methods for drag and drop can set it. - int errorStatus; + Scintilla::Status errorStatus; friend class AutoSurface; }; @@ -648,16 +661,16 @@ class AutoSurface { private: std::unique_ptr<Surface> surf; public: - AutoSurface(const Editor *ed, int technology = -1) { + AutoSurface(const Editor *ed) { if (ed->wMain.GetID()) { - surf = Surface::Allocate(technology != -1 ? technology : ed->technology); + surf = Surface::Allocate(ed->technology); surf->Init(ed->wMain.GetID()); surf->SetMode(SurfaceMode(ed->CodePage(), ed->BidirectionalR2L())); } } - AutoSurface(SurfaceID sid, Editor *ed, int technology = -1) { + AutoSurface(SurfaceID sid, Editor *ed, std::optional<Scintilla::Technology> technology = {}) { if (ed->wMain.GetID()) { - surf = Surface::Allocate(technology != -1 ? technology : ed->technology); + surf = Surface::Allocate(technology ? *technology : ed->technology); surf->Init(sid, ed->wMain.GetID()); surf->SetMode(SurfaceMode(ed->CodePage(), ed->BidirectionalR2L())); } |