Skip to content

Commit dccd434

Browse files
committed
fix: 包含中文时换行卡死问题、事件绑定没取消的问题
1 parent 15d16cd commit dccd434

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

llcomNext/LLCOM/Models/TerminalObject.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ public void AddText(char[] texts)//TODO)) 保持private
105105
//光标位置往后挪动
106106
_positionX += length;
107107
}
108+
if(space < 0)
109+
{
110+
//如果剩余空间不足,说明最后一格放不下这个宽字符
111+
//直接把X位置打到头,交够下一轮来处理
112+
_positionX = _windowWidth;
113+
}
108114
//添加文本
109115
var text = sb.ToString();
110116
var line = _currentState.MakeNew(text);

llcomNext/LLCOM/ViewModels/DataViews/TerminalViewModel.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,12 @@ public TerminalViewModel(Func<Type, ViewModelBase> getService)
3232
[RelayCommand]
3333
private void Test()
3434
{
35-
TerminalObject.ChangePosition(0, 0);
36-
TerminalObject.AddText($"A".ToCharArray());
37-
TerminalObject.ChangePosition(20, 0);
38-
TerminalObject.AddText($"B".ToCharArray());
39-
TerminalObject.ChangePosition(0, 20);
40-
TerminalObject.AddText($"C".ToCharArray());
4135
TerminalObject.ChangePosition(20, 20);
42-
TerminalObject.AddText($"D".ToCharArray());
36+
TerminalObject.AddText($">>>start:".ToCharArray());
37+
for(int i = 0; i < 100; i++)
38+
{
39+
TerminalObject.AddText($"Hello World {i} 测试字".ToCharArray());
40+
}
4341

4442
TerminalChangedEvent?.Invoke(this, TerminalObject.GetShowLines());
4543
}

llcomNext/LLCOM/Views/DataViews/TerminalView.axaml.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,14 @@ protected override void OnUnloaded(RoutedEventArgs e)
3232
{
3333
base.OnUnloaded(e);
3434
MainArea.PropertyChanged -= MainArea_PropertyChanged;
35+
Utils.Setting.TerminalChangedEvent -= TerminalChangedEvent;
3536
((TerminalViewModel)DataContext!).TerminalChangedEvent -= TerminalChangedEvent;
3637
Debug.WriteLine("TerminalView unloaded.");
3738
}
3839

3940
private void Control_OnLoaded(object? sender, RoutedEventArgs e)
4041
{
41-
Utils.Setting.TerminalChangedEvent += (sender, args) =>
42-
{
43-
//在UI线程中执行
44-
Dispatcher.UIThread.Post(RefreshWindowSize);
45-
};
42+
Utils.Setting.TerminalChangedEvent += TerminalChangedEvent;
4643
((TerminalViewModel)DataContext!).TerminalChangedEvent += TerminalChangedEvent;
4744
//加载完触发一次,顺便初始化窗口大小数据
4845
RefreshWindowSize();
@@ -61,7 +58,13 @@ private void RefreshWindowSize()
6158
var (w, h) = Utils.CalculateSize(
6259
MainArea.Bounds.Width - margin * 2, MainArea.Bounds.Height - margin * 2,
6360
Utils.Setting.TerminalFont, Utils.Setting.TerminalFontSize);
64-
((TerminalViewModel)DataContext!).ChangeWindowSize((w,h));
61+
(DataContext as TerminalViewModel)?.ChangeWindowSize((w,h));
62+
}
63+
64+
private void TerminalChangedEvent(object? sender, EventArgs e)
65+
{
66+
//在UI线程中执行
67+
Dispatcher.UIThread.Post(RefreshWindowSize);
6568
}
6669

6770
//滚轮事件

0 commit comments

Comments
 (0)