Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ UpdateCandidateList()

void ReLogic.Localization.IME.WinImm32Ime.UpdateCandidateList ( )
inlineprivate

Definition at line 100 of file WinImm32Ime.cs.

101 {
103 try
104 {
106 if (size == 0)
107 {
108 _candList = Array.Empty<string>();
109 _candPageSize = 0u;
110 _candSelection = 0u;
111 return;
112 }
113 Span<byte> buf = stackalloc byte[size];
115 ref CandidateList candList = ref MemoryMarshal.AsRef<CandidateList>(buf);
116 ReadOnlySpan<uint> offsets = MemoryMarshal.CreateReadOnlySpan(ref candList.dwOffset, (int)candList.dwCount);
117 string[] candStrList = new string[candList.dwCount];
118 int next = buf.Length;
119 for (int i = (int)(candList.dwCount - 1); i >= 0; i--)
120 {
121 int start = (int)offsets[i];
122 int num = i;
123 Encoding unicode = Encoding.Unicode;
124 Span<byte> span = buf;
125 int num2 = start;
126 candStrList[num] = unicode.GetString(span.Slice(num2, next - 2 - num2));
127 next = start;
128 }
129 _candList = candStrList;
130 _candPageSize = candList.dwPageSize;
131 _candSelection = candList.dwSelection;
132 }
133 finally
134 {
136 }
137 }
static int ImmGetCandidateList(IntPtr hImc, uint dwIndex, ref byte lpCandList, int dwBufLen)
static bool ImmReleaseContext(IntPtr hWnd, IntPtr hImc)
static Encoding Unicode
Definition Encoding.cs:519
unsafe string GetString(byte *bytes, int byteCount)
Definition Encoding.cs:973
Span< T > Slice(int start)
Definition Span.cs:271
static Span< T > Empty
Definition Span.cs:87
int Length
Definition Span.cs:70

References ReLogic.Localization.IME.WinImm32Ime._candList, ReLogic.Localization.IME.WinImm32Ime._candPageSize, ReLogic.Localization.IME.WinImm32Ime._candSelection, ReLogic.Localization.IME.WinImm32Ime._hWnd, System.Span< T >.Empty, System.Text.Encoding.GetString(), ReLogic.Localization.IME.WinImm32.NativeMethods.ImmGetCandidateList(), ReLogic.Localization.IME.WinImm32.NativeMethods.ImmGetContext(), ReLogic.Localization.IME.WinImm32.NativeMethods.ImmReleaseContext(), System.Span< T >.Length, System.Span< T >.Slice(), System.start, and System.Text.Encoding.Unicode.

Referenced by ReLogic.Localization.IME.WinImm32Ime.PreFilterMessage().