diff options
| author | Neil <nyamatongwe@gmail.com> | 2021-05-24 19:31:06 +1000 |
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2021-05-24 19:31:06 +1000 |
| commit | 92290868cf9753d2df0d494cb44e2ff62a570b58 (patch) | |
| tree | 001e6cfce84372a03997de3138d630751ee8d38a /gtk/ScintillaGTKAccessible.cxx | |
| parent | ee1886079d0a5cd350ee8e3379be347943ba93ae (diff) | |
| download | scintilla-mirror-92290868cf9753d2df0d494cb44e2ff62a570b58.tar.gz | |
Define C++ version of the Scintilla API in ScintillaTypes.h, ScintillaMessages.h
and ScintillaStructures.h using scoped enumerations.
Use these headers instead of Scintilla.h internally.
External definitions go in the Scintilla namespace and internal definitio0ns in
Scintilla::Internal.
Diffstat (limited to 'gtk/ScintillaGTKAccessible.cxx')
| -rw-r--r-- | gtk/ScintillaGTKAccessible.cxx | 175 |
1 files changed, 91 insertions, 84 deletions
diff --git a/gtk/ScintillaGTKAccessible.cxx b/gtk/ScintillaGTKAccessible.cxx index 25490277b..bff9a4572 100644 --- a/gtk/ScintillaGTKAccessible.cxx +++ b/gtk/ScintillaGTKAccessible.cxx @@ -89,12 +89,16 @@ #endif // ScintillaGTK.h and stuff it needs +#include "ScintillaTypes.h" +#include "ScintillaMessages.h" +#include "ScintillaStructures.h" +#include "ILoader.h" +#include "ILexer.h" + #include "Debugging.h" #include "Geometry.h" #include "Platform.h" -#include "ILoader.h" -#include "ILexer.h" #include "Scintilla.h" #include "ScintillaWidget.h" #include "CharacterCategoryMap.h" @@ -130,6 +134,7 @@ #include "ScintillaGTKAccessible.h" using namespace Scintilla; +using namespace Scintilla::Internal; struct ScintillaObjectAccessiblePrivate { ScintillaGTKAccessible *pscin; @@ -223,30 +228,30 @@ gchar *ScintillaGTKAccessible::GetTextAfterOffset(int charOffset, break; case ATK_TEXT_BOUNDARY_WORD_START: - startByte = sci->WndProc(SCI_WORDENDPOSITION, byteOffset, 1); - startByte = sci->WndProc(SCI_WORDENDPOSITION, startByte, 0); - endByte = sci->WndProc(SCI_WORDENDPOSITION, startByte, 1); - endByte = sci->WndProc(SCI_WORDENDPOSITION, endByte, 0); + startByte = sci->WndProc(Message::WordEndPosition, byteOffset, 1); + startByte = sci->WndProc(Message::WordEndPosition, startByte, 0); + endByte = sci->WndProc(Message::WordEndPosition, startByte, 1); + endByte = sci->WndProc(Message::WordEndPosition, endByte, 0); break; case ATK_TEXT_BOUNDARY_WORD_END: - startByte = sci->WndProc(SCI_WORDENDPOSITION, byteOffset, 0); - startByte = sci->WndProc(SCI_WORDENDPOSITION, startByte, 1); - endByte = sci->WndProc(SCI_WORDENDPOSITION, startByte, 0); - endByte = sci->WndProc(SCI_WORDENDPOSITION, endByte, 1); + startByte = sci->WndProc(Message::WordEndPosition, byteOffset, 0); + startByte = sci->WndProc(Message::WordEndPosition, startByte, 1); + endByte = sci->WndProc(Message::WordEndPosition, startByte, 0); + endByte = sci->WndProc(Message::WordEndPosition, endByte, 1); break; case ATK_TEXT_BOUNDARY_LINE_START: { - int line = sci->WndProc(SCI_LINEFROMPOSITION, byteOffset, 0); - startByte = sci->WndProc(SCI_POSITIONFROMLINE, line + 1, 0); - endByte = sci->WndProc(SCI_POSITIONFROMLINE, line + 2, 0); + int line = sci->WndProc(Message::LineFromPosition, byteOffset, 0); + startByte = sci->WndProc(Message::PositionFromLine, line + 1, 0); + endByte = sci->WndProc(Message::PositionFromLine, line + 2, 0); break; } case ATK_TEXT_BOUNDARY_LINE_END: { - int line = sci->WndProc(SCI_LINEFROMPOSITION, byteOffset, 0); - startByte = sci->WndProc(SCI_GETLINEENDPOSITION, line, 0); - endByte = sci->WndProc(SCI_GETLINEENDPOSITION, line + 1, 0); + int line = sci->WndProc(Message::LineFromPosition, byteOffset, 0); + startByte = sci->WndProc(Message::GetLineEndPosition, line, 0); + endByte = sci->WndProc(Message::GetLineEndPosition, line + 1, 0); break; } @@ -273,24 +278,24 @@ gchar *ScintillaGTKAccessible::GetTextBeforeOffset(int charOffset, break; case ATK_TEXT_BOUNDARY_WORD_START: - endByte = sci->WndProc(SCI_WORDSTARTPOSITION, byteOffset, 0); - endByte = sci->WndProc(SCI_WORDSTARTPOSITION, endByte, 1); - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, endByte, 0); - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, startByte, 1); + endByte = sci->WndProc(Message::WordStartPosition, byteOffset, 0); + endByte = sci->WndProc(Message::WordStartPosition, endByte, 1); + startByte = sci->WndProc(Message::WordStartPosition, endByte, 0); + startByte = sci->WndProc(Message::WordStartPosition, startByte, 1); break; case ATK_TEXT_BOUNDARY_WORD_END: - endByte = sci->WndProc(SCI_WORDSTARTPOSITION, byteOffset, 1); - endByte = sci->WndProc(SCI_WORDSTARTPOSITION, endByte, 0); - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, endByte, 1); - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, startByte, 0); + endByte = sci->WndProc(Message::WordStartPosition, byteOffset, 1); + endByte = sci->WndProc(Message::WordStartPosition, endByte, 0); + startByte = sci->WndProc(Message::WordStartPosition, endByte, 1); + startByte = sci->WndProc(Message::WordStartPosition, startByte, 0); break; case ATK_TEXT_BOUNDARY_LINE_START: { - int line = sci->WndProc(SCI_LINEFROMPOSITION, byteOffset, 0); - endByte = sci->WndProc(SCI_POSITIONFROMLINE, line, 0); + int line = sci->WndProc(Message::LineFromPosition, byteOffset, 0); + endByte = sci->WndProc(Message::PositionFromLine, line, 0); if (line > 0) { - startByte = sci->WndProc(SCI_POSITIONFROMLINE, line - 1, 0); + startByte = sci->WndProc(Message::PositionFromLine, line - 1, 0); } else { startByte = endByte; } @@ -298,14 +303,14 @@ gchar *ScintillaGTKAccessible::GetTextBeforeOffset(int charOffset, } case ATK_TEXT_BOUNDARY_LINE_END: { - int line = sci->WndProc(SCI_LINEFROMPOSITION, byteOffset, 0); + int line = sci->WndProc(Message::LineFromPosition, byteOffset, 0); if (line > 0) { - endByte = sci->WndProc(SCI_GETLINEENDPOSITION, line - 1, 0); + endByte = sci->WndProc(Message::GetLineEndPosition, line - 1, 0); } else { endByte = 0; } if (line > 1) { - startByte = sci->WndProc(SCI_GETLINEENDPOSITION, line - 2, 0); + startByte = sci->WndProc(Message::GetLineEndPosition, line - 2, 0); } else { startByte = endByte; } @@ -331,46 +336,46 @@ gchar *ScintillaGTKAccessible::GetTextAtOffset(int charOffset, switch (boundaryType) { case ATK_TEXT_BOUNDARY_CHAR: startByte = byteOffset; - endByte = sci->WndProc(SCI_POSITIONAFTER, byteOffset, 0); + endByte = sci->WndProc(Message::PositionAfter, byteOffset, 0); break; case ATK_TEXT_BOUNDARY_WORD_START: - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, byteOffset, 1); - endByte = sci->WndProc(SCI_WORDENDPOSITION, byteOffset, 1); - if (! sci->WndProc(SCI_ISRANGEWORD, startByte, endByte)) { + startByte = sci->WndProc(Message::WordStartPosition, byteOffset, 1); + endByte = sci->WndProc(Message::WordEndPosition, byteOffset, 1); + if (! sci->WndProc(Message::IsRangeWord, startByte, endByte)) { // if the cursor was not on a word, forward back - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, startByte, 0); - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, startByte, 1); + startByte = sci->WndProc(Message::WordStartPosition, startByte, 0); + startByte = sci->WndProc(Message::WordStartPosition, startByte, 1); } - endByte = sci->WndProc(SCI_WORDENDPOSITION, endByte, 0); + endByte = sci->WndProc(Message::WordEndPosition, endByte, 0); break; case ATK_TEXT_BOUNDARY_WORD_END: - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, byteOffset, 1); - endByte = sci->WndProc(SCI_WORDENDPOSITION, byteOffset, 1); - if (! sci->WndProc(SCI_ISRANGEWORD, startByte, endByte)) { + startByte = sci->WndProc(Message::WordStartPosition, byteOffset, 1); + endByte = sci->WndProc(Message::WordEndPosition, byteOffset, 1); + if (! sci->WndProc(Message::IsRangeWord, startByte, endByte)) { // if the cursor was not on a word, forward back - endByte = sci->WndProc(SCI_WORDENDPOSITION, endByte, 0); - endByte = sci->WndProc(SCI_WORDENDPOSITION, endByte, 1); + endByte = sci->WndProc(Message::WordEndPosition, endByte, 0); + endByte = sci->WndProc(Message::WordEndPosition, endByte, 1); } - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, startByte, 0); + startByte = sci->WndProc(Message::WordStartPosition, startByte, 0); break; case ATK_TEXT_BOUNDARY_LINE_START: { - int line = sci->WndProc(SCI_LINEFROMPOSITION, byteOffset, 0); - startByte = sci->WndProc(SCI_POSITIONFROMLINE, line, 0); - endByte = sci->WndProc(SCI_POSITIONFROMLINE, line + 1, 0); + int line = sci->WndProc(Message::LineFromPosition, byteOffset, 0); + startByte = sci->WndProc(Message::PositionFromLine, line, 0); + endByte = sci->WndProc(Message::PositionFromLine, line + 1, 0); break; } case ATK_TEXT_BOUNDARY_LINE_END: { - int line = sci->WndProc(SCI_LINEFROMPOSITION, byteOffset, 0); + int line = sci->WndProc(Message::LineFromPosition, byteOffset, 0); if (line > 0) { - startByte = sci->WndProc(SCI_GETLINEENDPOSITION, line - 1, 0); + startByte = sci->WndProc(Message::GetLineEndPosition, line - 1, 0); } else { startByte = 0; } - endByte = sci->WndProc(SCI_GETLINEENDPOSITION, line, 0); + endByte = sci->WndProc(Message::GetLineEndPosition, line, 0); break; } @@ -394,16 +399,16 @@ gchar *ScintillaGTKAccessible::GetStringAtOffset(int charOffset, switch (granularity) { case ATK_TEXT_GRANULARITY_CHAR: startByte = byteOffset; - endByte = sci->WndProc(SCI_POSITIONAFTER, byteOffset, 0); + endByte = sci->WndProc(Message::PositionAfter, byteOffset, 0); break; case ATK_TEXT_GRANULARITY_WORD: - startByte = sci->WndProc(SCI_WORDSTARTPOSITION, byteOffset, 1); - endByte = sci->WndProc(SCI_WORDENDPOSITION, byteOffset, 1); + startByte = sci->WndProc(Message::WordStartPosition, byteOffset, 1); + endByte = sci->WndProc(Message::WordEndPosition, byteOffset, 1); break; case ATK_TEXT_GRANULARITY_LINE: { - gint line = sci->WndProc(SCI_LINEFROMPOSITION, byteOffset, 0); - startByte = sci->WndProc(SCI_POSITIONFROMLINE, line, 0); - endByte = sci->WndProc(SCI_GETLINEENDPOSITION, line, 0); + gint line = sci->WndProc(Message::LineFromPosition, byteOffset, 0); + startByte = sci->WndProc(Message::PositionFromLine, line, 0); + endByte = sci->WndProc(Message::GetLineEndPosition, line, 0); break; } default: @@ -433,11 +438,11 @@ gint ScintillaGTKAccessible::GetCharacterCount() { } gint ScintillaGTKAccessible::GetCaretOffset() { - return CharacterOffsetFromByteOffset(sci->WndProc(SCI_GETCURRENTPOS, 0, 0)); + return CharacterOffsetFromByteOffset(sci->WndProc(Message::GetCurrentPos, 0, 0)); } gboolean ScintillaGTKAccessible::SetCaretOffset(int charOffset) { - sci->WndProc(SCI_GOTOPOS, ByteOffsetFromCharacterOffset(charOffset), 0); + sci->WndProc(Message::GotoPos, ByteOffsetFromCharacterOffset(charOffset), 0); return TRUE; } @@ -461,7 +466,7 @@ gint ScintillaGTKAccessible::GetOffsetAtPoint(gint x, gint y, AtkCoordType coord } // FIXME: should we handle scrolling? - return CharacterOffsetFromByteOffset(sci->WndProc(SCI_CHARPOSITIONFROMPOINTCLOSE, x, y)); + return CharacterOffsetFromByteOffset(sci->WndProc(Message::CharPositionFromPointClose, x, y)); } void ScintillaGTKAccessible::GetCharacterExtents(int charOffset, @@ -471,14 +476,14 @@ void ScintillaGTKAccessible::GetCharacterExtents(int charOffset, Sci::Position byteOffset = ByteOffsetFromCharacterOffset(charOffset); // FIXME: should we handle scrolling? - *x = sci->WndProc(SCI_POINTXFROMPOSITION, 0, byteOffset); - *y = sci->WndProc(SCI_POINTYFROMPOSITION, 0, byteOffset); + *x = sci->WndProc(Message::PointXFromPosition, 0, byteOffset); + *y = sci->WndProc(Message::PointYFromPosition, 0, byteOffset); - int line = sci->WndProc(SCI_LINEFROMPOSITION, byteOffset, 0); - *height = sci->WndProc(SCI_TEXTHEIGHT, line, 0); + int line = sci->WndProc(Message::LineFromPosition, byteOffset, 0); + *height = sci->WndProc(Message::TextHeight, line, 0); int nextByteOffset = PositionAfter(byteOffset); - int next_x = sci->WndProc(SCI_POINTXFROMPOSITION, 0, nextByteOffset); + int next_x = sci->WndProc(Message::PointXFromPosition, 0, nextByteOffset); if (next_x > *x) { *width = next_x - *x; } else if (nextByteOffset > byteOffset) { @@ -538,7 +543,7 @@ AtkAttributeSet *ScintillaGTKAccessible::GetAttributesForStyle(unsigned int styl attr_set = AddTextAttribute(attr_set, ATK_TEXT_ATTR_FAMILY_NAME, g_strdup(style.fontName)); attr_set = AddTextAttribute(attr_set, ATK_TEXT_ATTR_SIZE, g_strdup_printf("%d", style.size / SC_FONT_SIZE_MULTIPLIER)); - attr_set = AddTextIntAttribute(attr_set, ATK_TEXT_ATTR_WEIGHT, CLAMP(style.weight, 100, 1000)); + attr_set = AddTextIntAttribute(attr_set, ATK_TEXT_ATTR_WEIGHT, CLAMP(static_cast<int>(style.weight), 100, 1000)); attr_set = AddTextIntAttribute(attr_set, ATK_TEXT_ATTR_STYLE, style.italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL); attr_set = AddTextIntAttribute(attr_set, ATK_TEXT_ATTR_UNDERLINE, style.underline ? PANGO_UNDERLINE_SINGLE : PANGO_UNDERLINE_NONE); attr_set = AddTextColorAttribute(attr_set, ATK_TEXT_ATTR_FG_COLOR, style.fore); @@ -554,7 +559,7 @@ AtkAttributeSet *ScintillaGTKAccessible::GetRunAttributes(int charOffset, int *s Sci::Position byteOffset; if (charOffset == -1) { - byteOffset = sci->WndProc(SCI_GETCURRENTPOS, 0, 0); + byteOffset = sci->WndProc(Message::GetCurrentPos, 0, 0); } else { byteOffset = ByteOffsetFromCharacterOffset(charOffset); } @@ -601,9 +606,9 @@ gboolean ScintillaGTKAccessible::AddSelection(int startChar, int endChar) { ByteRangeFromCharacterRange(startChar, endChar, startByte, endByte); // use WndProc() to set the selections so it notifies as needed if (n_selections > 1 || ! sci->sel.Empty()) { - sci->WndProc(SCI_ADDSELECTION, startByte, endByte); + sci->WndProc(Message::AddSelection, startByte, endByte); } else { - sci->WndProc(SCI_SETSELECTION, startByte, endByte); + sci->WndProc(Message::SetSelection, startByte, endByte); } return TRUE; @@ -615,11 +620,11 @@ gboolean ScintillaGTKAccessible::RemoveSelection(gint selection_num) { return FALSE; if (n_selections > 1) { - sci->WndProc(SCI_DROPSELECTIONN, selection_num, 0); + sci->WndProc(Message::DropSelectionN, selection_num, 0); } else if (sci->sel.Empty()) { return FALSE; } else { - sci->WndProc(SCI_CLEARSELECTIONS, 0, 0); + sci->WndProc(Message::ClearSelections, 0, 0); } return TRUE; @@ -632,8 +637,8 @@ gboolean ScintillaGTKAccessible::SetSelection(gint selection_num, int startChar, Sci::Position startByte, endByte; ByteRangeFromCharacterRange(startChar, endChar, startByte, endByte); - sci->WndProc(SCI_SETSELECTIONNSTART, selection_num, startByte); - sci->WndProc(SCI_SETSELECTIONNEND, selection_num, endByte); + sci->WndProc(Message::SetSelectionNStart, selection_num, startByte); + sci->WndProc(Message::SetSelectionNEnd, selection_num, endByte); return TRUE; } @@ -666,7 +671,7 @@ void ScintillaGTKAccessible::AtkTextIface::init(::AtkTextIface *iface) { void ScintillaGTKAccessible::SetTextContents(const gchar *contents) { // FIXME: it's probably useless to check for READONLY here, SETTEXT probably does it just fine? if (! sci->pdoc->IsReadOnly()) { - sci->WndProc(SCI_SETTEXT, 0, (sptr_t) contents); + sci->WndProc(Message::SetText, 0, (sptr_t) contents); } } @@ -797,7 +802,7 @@ bool ScintillaGTKAccessible::Enabled() const { // Callbacks void ScintillaGTKAccessible::UpdateCursor() { - Sci::Position pos = sci->WndProc(SCI_GETCURRENTPOS, 0, 0); + Sci::Position pos = sci->WndProc(Message::GetCurrentPos, 0, 0); if (old_pos != pos) { int charPosition = CharacterOffsetFromByteOffset(pos); g_signal_emit_by_name(accessible, "text-caret-moved", charPosition); @@ -867,39 +872,41 @@ void ScintillaGTKAccessible::NotifyReadOnly() { void ScintillaGTKAccessible::SetAccessibility(bool enabled) { // Called by ScintillaGTK when application has enabled or disabled accessibility if (enabled) - sci->pdoc->AllocateLineCharacterIndex(SC_LINECHARACTERINDEX_UTF32); + sci->pdoc->AllocateLineCharacterIndex(LineCharacterIndexType::Utf32); else - sci->pdoc->ReleaseLineCharacterIndex(SC_LINECHARACTERINDEX_UTF32); + sci->pdoc->ReleaseLineCharacterIndex(LineCharacterIndexType::Utf32); } -void ScintillaGTKAccessible::Notify(GtkWidget *, gint, SCNotification *nt) { +void ScintillaGTKAccessible::Notify(GtkWidget *, gint, NotificationData *nt) { if (!Enabled()) return; switch (nt->nmhdr.code) { - case SCN_MODIFIED: { - if (nt->modificationType & SC_MOD_INSERTTEXT) { + case Notification::Modified: { + if (FlagSet(nt->modificationType, ModificationFlags::InsertText)) { int startChar = CharacterOffsetFromByteOffset(nt->position); int lengthChar = sci->pdoc->CountCharacters(nt->position, nt->position + nt->length); g_signal_emit_by_name(accessible, "text-changed::insert", startChar, lengthChar); UpdateCursor(); } - if (nt->modificationType & SC_MOD_BEFOREDELETE) { + if (FlagSet(nt->modificationType, ModificationFlags::BeforeDelete)) { int startChar = CharacterOffsetFromByteOffset(nt->position); int lengthChar = sci->pdoc->CountCharacters(nt->position, nt->position + nt->length); g_signal_emit_by_name(accessible, "text-changed::delete", startChar, lengthChar); } - if (nt->modificationType & SC_MOD_DELETETEXT) { + if (FlagSet(nt->modificationType, ModificationFlags::DeleteText)) { UpdateCursor(); } - if (nt->modificationType & SC_MOD_CHANGESTYLE) { + if (FlagSet(nt->modificationType, ModificationFlags::ChangeStyle)) { g_signal_emit_by_name(accessible, "text-attributes-changed"); } } break; - case SCN_UPDATEUI: { - if (nt->updated & SC_UPDATE_SELECTION) { + case Notification::UpdateUI: { + if (FlagSet(nt->updated, Update::Selection)) { UpdateCursor(); } } break; + default: + break; } } @@ -1145,7 +1152,7 @@ static AtkStateSet *scintilla_object_accessible_ref_state_set(AtkObject *accessi if (widget == nullptr) { atk_state_set_add_state(state_set, ATK_STATE_DEFUNCT); } else { - if (! scintilla_send_message(SCINTILLA_OBJECT(widget), SCI_GETREADONLY, 0, 0)) + if (! scintilla_send_message(SCINTILLA_OBJECT(widget), static_cast<int>(Message::GetReadOnly), 0, 0)) atk_state_set_add_state(state_set, ATK_STATE_EDITABLE); #if ATK_CHECK_VERSION(2, 16, 0) else |
