aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/ScintillaGTKAccessible.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/ScintillaGTKAccessible.cxx')
-rw-r--r--gtk/ScintillaGTKAccessible.cxx175
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