style(claude-do): merge Material icons: window chrome + Mission Control

ClaudeDo-Task: d92ba41f-11ba-4760-b6ae-c9e1f5cf40dd
This commit is contained in:
mika kuns
2026-10-01 16:52:46 +02:00
6 changed files with 26 additions and 20 deletions
@@ -1,6 +1,7 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls">
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
xmlns:cconv="using:ClaudeDo.Ui.Converters">
<ControlTheme x:Key="{x:Type ctl:ModalShell}" TargetType="ctl:ModalShell">
<Setter Property="Template">
<ControlTemplate>
@@ -26,12 +27,15 @@
<Button Name="PART_MaxButton" Grid.Column="2" Classes="icon-btn"
IsVisible="{TemplateBinding ShowMaximizeButton}"
VerticalAlignment="Center">
<PathIcon Name="PART_MaxIcon" Data="{StaticResource Icon.WinMax}" Width="10" Height="10"/>
<PathIcon Name="PART_MaxIcon" Width="14" Height="14"
Data="{Binding Source='mdi:WindowMaximize', Converter={x:Static cconv:IconKeyConverter.Instance}}"/>
</Button>
<Button Grid.Column="3" Classes="icon-btn" Content="✕"
FontSize="{DynamicResource FontSizeBody}"
<Button Grid.Column="3" Classes="icon-btn"
Command="{TemplateBinding CloseCommand}"
VerticalAlignment="Center"/>
VerticalAlignment="Center">
<PathIcon Width="14" Height="14"
Data="{Binding Source='mdi:WindowClose', Converter={x:Static cconv:IconKeyConverter.Instance}}"/>
</Button>
</Grid>
</Border>
<Border Name="PART_Footer" DockPanel.Dock="Bottom"
@@ -1,3 +1,4 @@
using System.Globalization;
using System.Windows.Input;
using Avalonia;
using Avalonia.Controls;
@@ -5,6 +6,7 @@ using Avalonia.Controls.Primitives;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Media;
using ClaudeDo.Ui.Converters;
namespace ClaudeDo.Ui.Views.Controls;
@@ -84,9 +86,8 @@ public class ModalShell : ContentControl
{
if (_maxIcon is null || _window is null) return;
var maximized = _window.WindowState == WindowState.Maximized;
var key = maximized ? "Icon.WinRestore" : "Icon.WinMax";
if (this.TryFindResource(key, out var geometry) && geometry is Geometry g)
_maxIcon.Data = g;
_maxIcon.Data = (Geometry?)IconKeyConverter.Instance.Convert(
maximized ? "mdi:WindowRestore" : "mdi:WindowMaximize", typeof(Geometry), null, CultureInfo.InvariantCulture);
if (_maxButton is not null)
{
var tipKey = maximized ? "modals.diff.restore" : "modals.diff.maximize";
+4 -4
View File
@@ -115,16 +115,16 @@
<Button Classes="title-ctrl"
Command="{Binding OpenMissionControlCommand}"
ToolTip.Tip="{loc:Tr missionControl.windowTitle}">
<PathIcon Data="{StaticResource Icon.Grid}" Width="12" Height="12"/>
<PathIcon Width="14" Height="14" Data="{Binding Source='mdi:ViewGridOutline', Converter={StaticResource IconKey}}"/>
</Button>
<Button Classes="title-ctrl" Click="OnMinimize">
<PathIcon Data="{StaticResource Icon.WinMin}" Width="10" Height="10"/>
<PathIcon Width="14" Height="14" Data="{Binding Source='mdi:WindowMinimize', Converter={StaticResource IconKey}}"/>
</Button>
<Button Classes="title-ctrl" Click="OnToggleMax">
<PathIcon x:Name="MaxIcon" Data="{StaticResource Icon.WinMax}" Width="10" Height="10"/>
<PathIcon x:Name="MaxIcon" Width="14" Height="14" Data="{Binding Source='mdi:WindowMaximize', Converter={StaticResource IconKey}}"/>
</Button>
<Button Classes="title-ctrl close" Click="OnClose">
<PathIcon Data="{StaticResource Icon.WinClose}" Width="10" Height="10"/>
<PathIcon Width="14" Height="14" Data="{Binding Source='mdi:WindowClose', Converter={StaticResource IconKey}}"/>
</Button>
</StackPanel>
+4 -3
View File
@@ -1,3 +1,4 @@
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Avalonia;
@@ -5,6 +6,7 @@ using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Layout;
using Avalonia.Media;
using ClaudeDo.Ui.Converters;
using ClaudeDo.Ui.Localization;
using ClaudeDo.Ui.Services;
using ClaudeDo.Ui.ViewModels;
@@ -64,9 +66,8 @@ public partial class MainWindow : Window
private void UpdateMaxIcon()
{
var key = WindowState == WindowState.Maximized ? "Icon.WinRestore" : "Icon.WinMax";
if (this.TryFindResource(key, out var geometry) && geometry is Geometry g)
MaxIcon.Data = g;
MaxIcon.Data = (Geometry?)IconKeyConverter.Instance.Convert(
WindowState == WindowState.Maximized ? "mdi:WindowRestore" : "mdi:WindowMaximize", typeof(Geometry), null, CultureInfo.InvariantCulture);
}
private void OnDataContextChanged(object? sender, EventArgs e)
@@ -44,7 +44,7 @@
<Button Grid.Column="3" Classes="title-ctrl"
Command="{Binding CloseCommand}"
ToolTip.Tip="{loc:Tr missionControl.closeSession}">
<PathIcon Data="{StaticResource Icon.WinClose}" Width="12" Height="12"/>
<PathIcon Width="14" Height="14" Data="{Binding Source='mdi:WindowClose', Converter={StaticResource IconKey}}"/>
</Button>
</Grid>
</Border>
@@ -45,7 +45,7 @@
VerticalAlignment="Center"/>
<Button Classes="icon-btn"
ToolTip.Tip="{loc:Tr missionControl.newSession}">
<PathIcon Data="{StaticResource Icon.Plus}" Width="15" Height="15"/>
<PathIcon Width="16" Height="16" Data="{Binding Source='mdi:Plus', Converter={StaticResource IconKey}}"/>
<Button.Flyout>
<MenuFlyout ItemsSource="{Binding SessionTargets}" Opening="OnSessionFlyoutOpening">
<MenuFlyout.ItemContainerTheme>
@@ -60,7 +60,7 @@
</Button>
<Button x:Name="RecentSessionsButton" Classes="icon-btn"
ToolTip.Tip="{loc:Tr missionControl.recentSessions}">
<PathIcon Data="{StaticResource Icon.Clock}" Width="15" Height="15"/>
<PathIcon Width="16" Height="16" Data="{Binding Source='mdi:ClockOutline', Converter={StaticResource IconKey}}"/>
<Button.Flyout>
<Flyout Placement="BottomEdgeAlignedRight" ShowMode="Standard" Opening="OnRecentSessionsFlyoutOpening">
<StackPanel Width="380" Spacing="8" Margin="4">
@@ -136,12 +136,12 @@
<Button Classes="icon-btn"
Command="{Binding ToggleLayoutCommand}"
ToolTip.Tip="{Binding LayoutToggleLabel}">
<PathIcon Data="{StaticResource Icon.Grid}" Width="15" Height="15"/>
<PathIcon Width="16" Height="16" Data="{Binding Source='mdi:ViewGridOutline', Converter={StaticResource IconKey}}"/>
</Button>
<Button Classes="icon-btn"
Command="{Binding OpenSettingsCommand}"
ToolTip.Tip="{loc:Tr missionControl.settings}">
<PathIcon Data="{StaticResource Icon.Settings}" Width="15" Height="15"/>
<PathIcon Width="16" Height="16" Data="{Binding Source='mdi:Cog', Converter={StaticResource IconKey}}"/>
</Button>
</StackPanel>
</Grid>