mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-19 00:20:25 +02:00
Improved right-cursor movement over utf8 codepoints
This commit is contained in:
parent
04f1802303
commit
f96de4722e
3 changed files with 41 additions and 4 deletions
|
@ -2226,15 +2226,18 @@ namespace Beefy.widgets
|
||||||
else if (lineIdx < GetLineCount() - 1)
|
else if (lineIdx < GetLineCount() - 1)
|
||||||
MoveCursorTo(lineIdx + 1, 0, false, 0, .SelectRight);
|
MoveCursorTo(lineIdx + 1, 0, false, 0, .SelectRight);
|
||||||
|
|
||||||
if (!mWidgetWindow.IsKeyDown(KeyCode.Control))
|
|
||||||
break;
|
|
||||||
|
|
||||||
GetLineCharAtIdx(CursorTextPos, out lineIdx, out lineChar);
|
GetLineCharAtIdx(CursorTextPos, out lineIdx, out lineChar);
|
||||||
anIndex = GetTextIdx(lineIdx, lineChar);
|
anIndex = GetTextIdx(lineIdx, lineChar);
|
||||||
if (anIndex == mData.mTextLength)
|
if (anIndex == mData.mTextLength)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
char8 c = (char8)mData.mText[anIndex].mChar;
|
char8 c = (char8)mData.mText[anIndex].mChar;
|
||||||
|
if ((uint8)c & 0xC0 == 0x80)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!mWidgetWindow.IsKeyDown(KeyCode.Control))
|
||||||
|
break;
|
||||||
|
|
||||||
CharType char8Type = GetCharType(c);
|
CharType char8Type = GetCharType(c);
|
||||||
if (char8Type == .Opening)
|
if (char8Type == .Opening)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -359,6 +359,23 @@ namespace System
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int NumCodePoints
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
char8* ptr = Ptr;
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (int i < mLength)
|
||||||
|
{
|
||||||
|
char8 c = ptr[i];
|
||||||
|
if (((uint8)c & 0xC0) != 0x80)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int AllocSize
|
public int AllocSize
|
||||||
{
|
{
|
||||||
[Inline]
|
[Inline]
|
||||||
|
@ -3594,6 +3611,23 @@ namespace System
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int NumCodePoints
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
char8* ptr = Ptr;
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (int i < mLength)
|
||||||
|
{
|
||||||
|
char8 c = ptr[i];
|
||||||
|
if (((uint8)c & 0xC0) != 0x80)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int GetRangeStart(IndexRange range)
|
private int GetRangeStart(IndexRange range)
|
||||||
{
|
{
|
||||||
switch (range.Start)
|
switch (range.Start)
|
||||||
|
|
|
@ -5366,7 +5366,7 @@ namespace IDE.ui
|
||||||
|
|
||||||
String curLineStr = scope String();
|
String curLineStr = scope String();
|
||||||
GetLineText(line, curLineStr);
|
GetLineText(line, curLineStr);
|
||||||
int32 lineEnd = (int32)curLineStr.Length;
|
int32 lineEnd = (int32)curLineStr.NumCodePoints;
|
||||||
|
|
||||||
mVirtualCursorPos.ValueRef.mColumn = (.)Math.Min(mVirtualCursorPos.Value.mColumn, Math.Max(virtualEnd, lineEnd));
|
mVirtualCursorPos.ValueRef.mColumn = (.)Math.Min(mVirtualCursorPos.Value.mColumn, Math.Max(virtualEnd, lineEnd));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue