- 실행 중 경량 라이브 진행 모드에서 메시지 진입 애니메이션과 진행 마커 펄스를 줄여 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:
@@ -568,8 +568,15 @@ public partial class ChatWindow
|
||||
};
|
||||
}
|
||||
|
||||
private static void ApplyLiveWaitingPulseToMarker(Border marker)
|
||||
private void ApplyLiveWaitingPulseToMarker(Border marker)
|
||||
{
|
||||
if (_isStreaming && IsLightweightLiveProgressMode())
|
||||
{
|
||||
marker.Opacity = 0.92;
|
||||
marker.RenderTransform = Transform.Identity;
|
||||
return;
|
||||
}
|
||||
|
||||
marker.RenderTransformOrigin = new Point(0.5, 0.5);
|
||||
marker.RenderTransform = new ScaleTransform(1, 1);
|
||||
|
||||
|
||||
@@ -272,8 +272,15 @@ public partial class ChatWindow
|
||||
};
|
||||
}
|
||||
|
||||
private static void ApplyMessageEntryAnimation(FrameworkElement element)
|
||||
private void ApplyMessageEntryAnimation(FrameworkElement element)
|
||||
{
|
||||
if (_isStreaming && IsLightweightLiveProgressMode())
|
||||
{
|
||||
element.Opacity = 1;
|
||||
element.RenderTransform = Transform.Identity;
|
||||
return;
|
||||
}
|
||||
|
||||
element.Opacity = 0;
|
||||
element.RenderTransform = new TranslateTransform(0, 16);
|
||||
element.BeginAnimation(UIElement.OpacityProperty,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user