diff options
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 |