Browse Source

Removed gtkMode from Next/PreviousWord.

As we always want this behaviour.
pull/767/head
Steven Kirk 10 years ago
parent
commit
af696acc69
  1. 8
      src/Avalonia.Controls/TextBox.cs
  2. 118
      src/Avalonia.Controls/Utils/StringUtils.cs

8
src/Avalonia.Controls/TextBox.cs

@ -495,10 +495,10 @@ namespace Avalonia.Controls
case 2: case 2:
if (!StringUtils.IsStartOfWord(text, index)) if (!StringUtils.IsStartOfWord(text, index))
{ {
SelectionStart = StringUtils.PreviousWord(text, index, true); SelectionStart = StringUtils.PreviousWord(text, index);
} }
SelectionEnd = StringUtils.NextWord(text, index, true); SelectionEnd = StringUtils.NextWord(text, index);
break; break;
case 3: case 3:
SelectionStart = 0; SelectionStart = 0;
@ -638,11 +638,11 @@ namespace Avalonia.Controls
{ {
if (direction > 0) if (direction > 0)
{ {
CaretIndex += StringUtils.NextWord(text, caretIndex, true) - caretIndex; CaretIndex += StringUtils.NextWord(text, caretIndex) - caretIndex;
} }
else else
{ {
CaretIndex += StringUtils.PreviousWord(text, caretIndex, true) - caretIndex; CaretIndex += StringUtils.PreviousWord(text, caretIndex) - caretIndex;
} }
} }
} }

118
src/Avalonia.Controls/Utils/StringUtils.cs

@ -57,7 +57,7 @@ namespace Avalonia.Controls.Utils
} }
} }
public static int PreviousWord(string text, int cursor, bool gtkMode) public static int PreviousWord(string text, int cursor)
{ {
int begin; int begin;
int i; int i;
@ -81,60 +81,21 @@ namespace Avalonia.Controls.Utils
return (cr > 0) ? cr : 0; return (cr > 0) ? cr : 0;
} }
if (gtkMode) CharClass cc = GetCharClass(text[cursor - 1]);
{ begin = lf + 1;
CharClass cc = GetCharClass(text[cursor - 1]); i = cursor;
begin = lf + 1;
i = cursor;
// skip over the word, punctuation, or run of whitespace
while (i > begin && GetCharClass(text[i - 1]) == cc)
{
i--;
}
// if the cursor was at whitespace, skip back a word too // skip over the word, punctuation, or run of whitespace
if (cc == CharClass.CharClassWhitespace && i > begin) while (i > begin && GetCharClass(text[i - 1]) == cc)
{
cc = GetCharClass(text[i - 1]);
while (i > begin && GetCharClass(text[i - 1]) == cc)
{
i--;
}
}
}
else
{ {
begin = lf + 1; i--;
i = cursor; }
if (cursor < text.Length)
{
// skip to the beginning of this word
while (i > begin && !char.IsWhiteSpace(text[i - 1]))
{
i--;
}
if (i < cursor && IsStartOfWord(text, i))
{
return i;
}
}
// skip to the start of the lwsp
while (i > begin && char.IsWhiteSpace(text[i - 1]))
{
i--;
}
if (i > begin)
{
i--;
}
// skip to the beginning of the word // if the cursor was at whitespace, skip back a word too
while (i > begin && !IsStartOfWord(text, i)) if (cc == CharClass.CharClassWhitespace && i > begin)
{
cc = GetCharClass(text[i - 1]);
while (i > begin && GetCharClass(text[i - 1]) == cc)
{ {
i--; i--;
} }
@ -143,7 +104,7 @@ namespace Avalonia.Controls.Utils
return i; return i;
} }
public static int NextWord(string text, int cursor, bool gtkMode) public static int NextWord(string text, int cursor)
{ {
int i, lf, cr; int i, lf, cr;
@ -169,50 +130,19 @@ namespace Avalonia.Controls.Utils
return cursor; return cursor;
} }
if (gtkMode) CharClass cc = GetCharClass(text[cursor]);
{ i = cursor;
CharClass cc = GetCharClass(text[cursor]);
i = cursor;
// skip over the word, punctuation, or run of whitespace
while (i < cr && GetCharClass(text[i]) == cc)
{
i++;
}
// skip any whitespace after the word/punct // skip over the word, punctuation, or run of whitespace
while (i < cr && char.IsWhiteSpace(text[i])) while (i < cr && GetCharClass(text[i]) == cc)
{
i++;
}
}
else
{ {
i = cursor; i++;
}
// skip any whitespace before the word
while (i < cr && char.IsWhiteSpace(text[i]))
{
i++;
}
// skip to the end of the current word
while (i < cr && !char.IsWhiteSpace(text[i]))
{
i++;
}
// skip any whitespace after the word
while (i < cr && char.IsWhiteSpace(text[i]))
{
i++;
}
// find the start of the next word // skip any whitespace after the word/punct
while (i < cr && !IsStartOfWord(text, i)) while (i < cr && char.IsWhiteSpace(text[i]))
{ {
i++; i++;
}
} }
return i; return i;

Loading…
Cancel
Save