코워크·코드 경량 모드 애니메이션 비용 추가 완화
Some checks failed
Release Gate / gate (push) Has been cancelled

- 실행 중 경량 라이브 진행 모드에서 메시지 진입 애니메이션과 진행 마커 펄스를 줄여 UI 스레드 부담을 더 낮춤

- AX Agent 라이브 카드의 등장·퇴장 애니메이션과 아이콘 opacity 펄스도 경량 모드에서는 생략하도록 조정함

- README와 DEVELOPMENT 문서를 2026-04-08 12:40 (KST) 기준으로 갱신함

- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0, 오류 0)
This commit is contained in:
2026-04-08 23:49:38 +09:00
parent 117320af02
commit 8db1a1ffb0
5 changed files with 56 additions and 16 deletions

View File

@@ -7039,16 +7039,21 @@ public partial class ChatWindow : Window
Width = msgMaxWidth,
MaxWidth = msgMaxWidth,
Margin = new Thickness(0, 4, 0, 6),
Opacity = 0,
RenderTransform = new TranslateTransform(0, 8),
Opacity = IsLightweightLiveProgressMode(runTab) ? 1 : 0,
RenderTransform = IsLightweightLiveProgressMode(runTab)
? Transform.Identity
: new TranslateTransform(0, 8),
};
container.BeginAnimation(UIElement.OpacityProperty,
new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(260)));
((TranslateTransform)container.RenderTransform).BeginAnimation(
TranslateTransform.YProperty,
new DoubleAnimation(8, 0, TimeSpan.FromMilliseconds(280))
{ EasingFunction = new System.Windows.Media.Animation.QuadraticEase
{ EasingMode = System.Windows.Media.Animation.EasingMode.EaseOut } });
if (!IsLightweightLiveProgressMode(runTab))
{
container.BeginAnimation(UIElement.OpacityProperty,
new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(260)));
((TranslateTransform)container.RenderTransform).BeginAnimation(
TranslateTransform.YProperty,
new DoubleAnimation(8, 0, TimeSpan.FromMilliseconds(280))
{ EasingFunction = new System.Windows.Media.Animation.QuadraticEase
{ EasingMode = System.Windows.Media.Animation.EasingMode.EaseOut } });
}
// 헤더: 펄싱 아이콘 + 에이전트 이름 + 경과 시간
var headerGrid = new Grid { Margin = new Thickness(2, 0, 0, 3) };
@@ -7057,10 +7062,13 @@ public partial class ChatWindow : Window
headerGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
var liveIcon = CreateMiniLauncherIcon(pixelSize: 4.0);
liveIcon.BeginAnimation(UIElement.OpacityProperty,
new DoubleAnimation(1.0, 0.35, TimeSpan.FromMilliseconds(750))
{ AutoReverse = true, RepeatBehavior = System.Windows.Media.Animation.RepeatBehavior.Forever,
EasingFunction = new System.Windows.Media.Animation.SineEase() });
if (!IsLightweightLiveProgressMode(runTab))
{
liveIcon.BeginAnimation(UIElement.OpacityProperty,
new DoubleAnimation(1.0, 0.35, TimeSpan.FromMilliseconds(750))
{ AutoReverse = true, RepeatBehavior = System.Windows.Media.Animation.RepeatBehavior.Forever,
EasingFunction = new System.Windows.Media.Animation.SineEase() });
}
Grid.SetColumn(liveIcon, 0);
headerGrid.Children.Add(liveIcon);
@@ -7191,7 +7199,7 @@ public partial class ChatWindow : Window
_agentLiveSubItemTexts.Clear();
_agentLiveCurrentCategory = null;
if (animated && MessagePanel != null && MessagePanel.Children.Contains(toRemove))
if (animated && MessagePanel != null && MessagePanel.Children.Contains(toRemove) && !IsLightweightLiveProgressMode())
{
var anim = new DoubleAnimation(toRemove.Opacity, 0, TimeSpan.FromMilliseconds(160));
anim.Completed += (_, _) => MessagePanel?.Children.Remove(toRemove);