From 148e4c894a3e3df7e4c94ac867bb284710774b27 Mon Sep 17 00:00:00 2001 From: lincube Date: Mon, 30 Mar 2026 15:28:51 +0800 Subject: [PATCH] 0.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 圆角设计更新 --- AGENTS.md | 2 + .../AppearanceCornerRadiusTokenFactory.cs | 11 +-- .../PluginCornerRadiusPreset.cs | 3 +- .../PluginCornerRadiusTokens.cs | 11 +-- .../AppearanceCornerRadiusTokens.cs | 3 +- .../CornerRadiusScaleTests.cs | 8 +-- ...entRuntimeRegistrationCornerRadiusTests.cs | 8 +-- ...InfoRecommendationHostCornerRadiusTests.cs | 4 +- .../Services/AppearanceThemeService.cs | 1 + .../ComponentEditorThemeResources.axaml | 4 +- LanMountainDesktop/Styles/GlassModule.axaml | 1 + .../Views/ComponentEditorWindow.axaml | 70 ++++++++++--------- .../Views/ComponentLibraryWindow.axaml | 4 +- .../Components/BaiduHotSearchWidget.axaml | 4 +- .../Components/BilibiliHotSearchWidget.axaml | 4 +- .../Views/Components/BrowserWidget.axaml | 10 +-- .../Components/ClassScheduleWidget.axaml | 8 ++- .../Views/Components/ClockWidget.axaml | 2 +- .../Views/Components/CnrDailyNewsWidget.axaml | 4 +- .../ComponentChromeCornerRadiusHelper.cs | 6 +- .../Views/Components/DailyArtworkWidget.axaml | 2 +- .../Views/Components/DailyPoetryWidget.axaml | 2 +- .../Views/Components/DailyWord2x2Widget.axaml | 6 +- .../Views/Components/DailyWordWidget.axaml | 6 +- .../Views/Components/DateWidget.axaml | 9 +-- .../ExchangeRateCalculatorWidget.axaml | 9 +-- .../Components/ExtendedWeatherWidget.axaml | 6 +- .../Components/HolidayCalendarWidget.axaml | 9 +-- .../Components/HourlyWeatherWidget.axaml | 6 +- .../Views/Components/IfengNewsWidget.axaml | 4 +- .../Views/Components/JuyaNewsWidget.axaml | 6 +- .../Components/LunarCalendarWidget.axaml | 9 +-- .../Components/MonthCalendarWidget.axaml | 5 +- .../Components/MultiDayWeatherWidget.axaml | 6 +- .../Views/Components/MusicControlWidget.axaml | 6 +- .../OfficeRecentDocumentsWidget.axaml | 10 +-- .../Views/Components/RecordingWidget.axaml | 2 +- .../Components/RemovableStorageWidget.axaml | 6 +- .../Views/Components/Stcn24ForumWidget.axaml | 4 +- .../StudyDeductionReasonsWidget.axaml | 9 +-- .../Components/StudyEnvironmentWidget.axaml | 2 +- .../StudyInterruptDensityWidget.axaml | 9 +-- .../Components/StudyNoiseCurveWidget.axaml | 9 +-- .../StudyNoiseDistributionWidget.axaml | 9 +-- .../Components/StudyScoreOverviewWidget.axaml | 9 +-- .../StudySessionControlWidget.axaml | 6 +- .../StudySessionHistoryWidget.axaml | 9 +-- .../Views/Components/TimerWidget.axaml | 9 +-- .../Views/Components/WeatherClockWidget.axaml | 8 +-- .../Views/Components/WeatherWidget.axaml | 8 +-- .../Views/Components/WhiteboardWidget.axaml | 8 ++- .../Views/Components/WorldClockWidget.axaml | 9 ++- .../Views/Components/ZhiJiaoHubWidget.axaml | 2 +- LanMountainDesktop/plugins/PluginLoader.cs | 2 +- .../plugins/PluginMarketEmbeddedView.cs | 34 +++++++-- docs/CORNER_RADIUS_SPEC.md | 1 + 56 files changed, 241 insertions(+), 183 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3590dbb..c08c9d1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -62,6 +62,7 @@ dotnet test LanMountainDesktop.slnx -c Debug ### UI - 主题、资源和视觉语义优先遵守 `docs/VISUAL_SPEC.md` 与 `docs/CORNER_RADIUS_SPEC.md` +- **组件圆角**:所有内置与插件组件的根边框必须使用 `{DynamicResource DesignCornerRadiusComponent}` 资源。 - 设置页相关改动通常同时落在 `Views/`、`ViewModels/`、`Services/` 和 `.trae/specs/` - UI 启动与窗口生命周期主线在 `Program.cs` 和 `App.axaml.cs` @@ -76,6 +77,7 @@ dotnet test LanMountainDesktop.slnx -c Debug - 设置持久化和 scope 变化优先检查 `LanMountainDesktop.Settings.Core/` - 外观、圆角、主题资源优先检查 `LanMountainDesktop.Appearance/` 与专题规范 +- **圆角统一**:桌面组件(Widget)必须统一使用动态资源 `DesignCornerRadiusComponent`。严禁在组件根容器使用硬编码数值或非组件级令牌(如 `Xs`, `Md` 等),以确保全局圆角缩放设置能正确应用到所有组件。 ## 6. 权威来源 diff --git a/LanMountainDesktop.Appearance/AppearanceCornerRadiusTokenFactory.cs b/LanMountainDesktop.Appearance/AppearanceCornerRadiusTokenFactory.cs index a0a758b..da6bc51 100644 --- a/LanMountainDesktop.Appearance/AppearanceCornerRadiusTokenFactory.cs +++ b/LanMountainDesktop.Appearance/AppearanceCornerRadiusTokenFactory.cs @@ -11,12 +11,13 @@ public static class AppearanceCornerRadiusTokenFactory var normalizedScale = GlobalAppearanceSettings.NormalizeCornerRadiusScale(scale); return new AppearanceCornerRadiusTokens( Radius(6, normalizedScale), - Radius(10, normalizedScale), + Radius(12, normalizedScale), Radius(14, normalizedScale), - Radius(18, normalizedScale), - Radius(24, normalizedScale), - Radius(30, normalizedScale), - Radius(36, normalizedScale)); + Radius(20, normalizedScale), + Radius(28, normalizedScale), + Radius(32, normalizedScale), + Radius(36, normalizedScale), + Radius(18, normalizedScale)); } private static CornerRadius Radius(double value, double scale) diff --git a/LanMountainDesktop.PluginSdk/PluginCornerRadiusPreset.cs b/LanMountainDesktop.PluginSdk/PluginCornerRadiusPreset.cs index d206714..601510e 100644 --- a/LanMountainDesktop.PluginSdk/PluginCornerRadiusPreset.cs +++ b/LanMountainDesktop.PluginSdk/PluginCornerRadiusPreset.cs @@ -9,5 +9,6 @@ public enum PluginCornerRadiusPreset Md = 4, Lg = 5, Xl = 6, - Island = 7 + Island = 7, + Component = 8 } diff --git a/LanMountainDesktop.PluginSdk/PluginCornerRadiusTokens.cs b/LanMountainDesktop.PluginSdk/PluginCornerRadiusTokens.cs index 8bdfa89..8e71cf1 100644 --- a/LanMountainDesktop.PluginSdk/PluginCornerRadiusTokens.cs +++ b/LanMountainDesktop.PluginSdk/PluginCornerRadiusTokens.cs @@ -10,13 +10,14 @@ public sealed record PluginCornerRadiusTokens( double Md, double Lg, double Xl, - double Island) + double Island, + double Component) { public double Get(PluginCornerRadiusPreset preset) { return preset switch { - PluginCornerRadiusPreset.Default => Md, + PluginCornerRadiusPreset.Default => Component, PluginCornerRadiusPreset.Micro => Micro, PluginCornerRadiusPreset.Xs => Xs, PluginCornerRadiusPreset.Sm => Sm, @@ -24,7 +25,8 @@ public sealed record PluginCornerRadiusTokens( PluginCornerRadiusPreset.Lg => Lg, PluginCornerRadiusPreset.Xl => Xl, PluginCornerRadiusPreset.Island => Island, - _ => Md + PluginCornerRadiusPreset.Component => Component, + _ => Component }; } @@ -44,6 +46,7 @@ public sealed record PluginCornerRadiusTokens( tokens.Md.TopLeft, tokens.Lg.TopLeft, tokens.Xl.TopLeft, - tokens.Island.TopLeft); + tokens.Island.TopLeft, + tokens.Component.TopLeft); } } diff --git a/LanMountainDesktop.Shared.Contracts/AppearanceCornerRadiusTokens.cs b/LanMountainDesktop.Shared.Contracts/AppearanceCornerRadiusTokens.cs index 6f33088..67027d5 100644 --- a/LanMountainDesktop.Shared.Contracts/AppearanceCornerRadiusTokens.cs +++ b/LanMountainDesktop.Shared.Contracts/AppearanceCornerRadiusTokens.cs @@ -9,4 +9,5 @@ public sealed record AppearanceCornerRadiusTokens( CornerRadius Md, CornerRadius Lg, CornerRadius Xl, - CornerRadius Island); + CornerRadius Island, + CornerRadius Component); diff --git a/LanMountainDesktop.Tests/CornerRadiusScaleTests.cs b/LanMountainDesktop.Tests/CornerRadiusScaleTests.cs index 63a0b2e..70f733e 100644 --- a/LanMountainDesktop.Tests/CornerRadiusScaleTests.cs +++ b/LanMountainDesktop.Tests/CornerRadiusScaleTests.cs @@ -40,11 +40,11 @@ public sealed class CornerRadiusScaleTests GlobalCornerRadiusScale: 0d, CornerRadiusTokens: PluginCornerRadiusTokens.FromShared(new AppearanceCornerRadiusTokens( new CornerRadius(6), - new CornerRadius(10), + new CornerRadius(12), new CornerRadius(14), - new CornerRadius(18), - new CornerRadius(24), - new CornerRadius(30), + new CornerRadius(20), + new CornerRadius(28), + new CornerRadius(32), new CornerRadius(36))), ThemeVariant: "Unknown")); diff --git a/LanMountainDesktop.Tests/DesktopComponentRuntimeRegistrationCornerRadiusTests.cs b/LanMountainDesktop.Tests/DesktopComponentRuntimeRegistrationCornerRadiusTests.cs index 83ed058..fdea3ed 100644 --- a/LanMountainDesktop.Tests/DesktopComponentRuntimeRegistrationCornerRadiusTests.cs +++ b/LanMountainDesktop.Tests/DesktopComponentRuntimeRegistrationCornerRadiusTests.cs @@ -48,11 +48,11 @@ public sealed class DesktopComponentRuntimeRegistrationCornerRadiusTests GlobalCornerRadiusScale: globalScale, CornerRadiusTokens: new AppearanceCornerRadiusTokens( new CornerRadius(6), - new CornerRadius(10), + new CornerRadius(12), new CornerRadius(14), - new CornerRadius(18), - new CornerRadius(24), - new CornerRadius(30), + new CornerRadius(20), + new CornerRadius(28), + new CornerRadius(32), new CornerRadius(36))); } } diff --git a/LanMountainDesktop.Tests/InfoRecommendationHostCornerRadiusTests.cs b/LanMountainDesktop.Tests/InfoRecommendationHostCornerRadiusTests.cs index a07e4d3..aad7b3c 100644 --- a/LanMountainDesktop.Tests/InfoRecommendationHostCornerRadiusTests.cs +++ b/LanMountainDesktop.Tests/InfoRecommendationHostCornerRadiusTests.cs @@ -53,8 +53,8 @@ public sealed class InfoRecommendationHostCornerRadiusTests var max = descriptor.ResolveCornerRadius(CreateChromeContext(componentId, cellSize, 2.5d)); Assert.Equal(0d, zero, 3); - Assert.Equal(24d, unit, 3); - Assert.Equal(60d, max, 3); + Assert.Equal(28d, unit, 3); + Assert.Equal(70d, max, 3); Assert.True(zero <= unit && unit <= max); } diff --git a/LanMountainDesktop/Services/AppearanceThemeService.cs b/LanMountainDesktop/Services/AppearanceThemeService.cs index 295b849..b3635bf 100644 --- a/LanMountainDesktop/Services/AppearanceThemeService.cs +++ b/LanMountainDesktop/Services/AppearanceThemeService.cs @@ -476,6 +476,7 @@ internal sealed class AppearanceThemeService : IAppearanceThemeService, IDisposa resources["DesignCornerRadiusLg"] = snapshot.CornerRadiusTokens.Lg; resources["DesignCornerRadiusXl"] = snapshot.CornerRadiusTokens.Xl; resources["DesignCornerRadiusIsland"] = snapshot.CornerRadiusTokens.Island; + resources["DesignCornerRadiusComponent"] = snapshot.CornerRadiusTokens.Component; } public AppearanceMaterialSurface GetMaterialSurface(MaterialSurfaceRole role) diff --git a/LanMountainDesktop/Styles/ComponentEditorThemeResources.axaml b/LanMountainDesktop/Styles/ComponentEditorThemeResources.axaml index 692f90f..2b345ee 100644 --- a/LanMountainDesktop/Styles/ComponentEditorThemeResources.axaml +++ b/LanMountainDesktop/Styles/ComponentEditorThemeResources.axaml @@ -18,7 +18,7 @@ - + @@ -40,7 +40,7 @@ - + diff --git a/LanMountainDesktop/Styles/GlassModule.axaml b/LanMountainDesktop/Styles/GlassModule.axaml index e284830..7474126 100644 --- a/LanMountainDesktop/Styles/GlassModule.axaml +++ b/LanMountainDesktop/Styles/GlassModule.axaml @@ -11,6 +11,7 @@ 14 12 36 + 18 - - - - + + + + diff --git a/LanMountainDesktop/Views/ComponentLibraryWindow.axaml b/LanMountainDesktop/Views/ComponentLibraryWindow.axaml index 5f8dbc6..4d45fbb 100644 --- a/LanMountainDesktop/Views/ComponentLibraryWindow.axaml +++ b/LanMountainDesktop/Views/ComponentLibraryWindow.axaml @@ -87,14 +87,14 @@ - diff --git a/LanMountainDesktop/Views/Components/BilibiliHotSearchWidget.axaml b/LanMountainDesktop/Views/Components/BilibiliHotSearchWidget.axaml index d7c17ef..bbe6b22 100644 --- a/LanMountainDesktop/Views/Components/BilibiliHotSearchWidget.axaml +++ b/LanMountainDesktop/Views/Components/BilibiliHotSearchWidget.axaml @@ -9,7 +9,7 @@ x:Class="LanMountainDesktop.Views.Components.BilibiliHotSearchWidget"> diff --git a/LanMountainDesktop/Views/Components/BrowserWidget.axaml b/LanMountainDesktop/Views/Components/BrowserWidget.axaml index a1d4579..0e2724a 100644 --- a/LanMountainDesktop/Views/Components/BrowserWidget.axaml +++ b/LanMountainDesktop/Views/Components/BrowserWidget.axaml @@ -9,10 +9,12 @@ x:Class="LanMountainDesktop.Views.Components.BrowserWidget"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="0" + ClipToBounds="True"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> + CornerRadius="{DynamicResource DesignCornerRadiusComponent}"> diff --git a/LanMountainDesktop/Views/Components/CnrDailyNewsWidget.axaml b/LanMountainDesktop/Views/Components/CnrDailyNewsWidget.axaml index e3c565f..1d4740c 100644 --- a/LanMountainDesktop/Views/Components/CnrDailyNewsWidget.axaml +++ b/LanMountainDesktop/Views/Components/CnrDailyNewsWidget.axaml @@ -9,7 +9,7 @@ x:Class="LanMountainDesktop.Views.Components.CnrDailyNewsWidget"> diff --git a/LanMountainDesktop/Views/Components/ComponentChromeCornerRadiusHelper.cs b/LanMountainDesktop/Views/Components/ComponentChromeCornerRadiusHelper.cs index 4351090..2b7bb9c 100644 --- a/LanMountainDesktop/Views/Components/ComponentChromeCornerRadiusHelper.cs +++ b/LanMountainDesktop/Views/Components/ComponentChromeCornerRadiusHelper.cs @@ -9,15 +9,15 @@ namespace LanMountainDesktop.Views.Components; internal static class ComponentChromeCornerRadiusHelper { - public static double ResolveMainRectangleRadiusValue(ComponentChromeContext? chromeContext = null, double fallback = 24d) + public static double ResolveMainRectangleRadiusValue(ComponentChromeContext? chromeContext = null, double fallback = 18d) { if (chromeContext is not null) { - return Math.Max(0d, chromeContext.CornerRadiusTokens.Lg.TopLeft); + return Math.Max(0d, chromeContext.CornerRadiusTokens.Component.TopLeft); } var snapshot = HostAppearanceThemeProvider.GetOrCreate().GetCurrent(); - var resolved = snapshot.CornerRadiusTokens.Lg.TopLeft; + var resolved = snapshot.CornerRadiusTokens.Component.TopLeft; return double.IsFinite(resolved) ? Math.Max(0d, resolved) : Math.Max(0d, fallback * ResolveScale(chromeContext)); diff --git a/LanMountainDesktop/Views/Components/DailyArtworkWidget.axaml b/LanMountainDesktop/Views/Components/DailyArtworkWidget.axaml index 217d45d..d451977 100644 --- a/LanMountainDesktop/Views/Components/DailyArtworkWidget.axaml +++ b/LanMountainDesktop/Views/Components/DailyArtworkWidget.axaml @@ -9,7 +9,7 @@ x:Class="LanMountainDesktop.Views.Components.DailyArtworkWidget"> diff --git a/LanMountainDesktop/Views/Components/DailyPoetryWidget.axaml b/LanMountainDesktop/Views/Components/DailyPoetryWidget.axaml index a8b036b..49bf3b6 100644 --- a/LanMountainDesktop/Views/Components/DailyPoetryWidget.axaml +++ b/LanMountainDesktop/Views/Components/DailyPoetryWidget.axaml @@ -9,7 +9,7 @@ x:Class="LanMountainDesktop.Views.Components.DailyPoetryWidget"> diff --git a/LanMountainDesktop/Views/Components/DateWidget.axaml b/LanMountainDesktop/Views/Components/DateWidget.axaml index bf185c2..778588f 100644 --- a/LanMountainDesktop/Views/Components/DateWidget.axaml +++ b/LanMountainDesktop/Views/Components/DateWidget.axaml @@ -8,10 +8,11 @@ x:Class="LanMountainDesktop.Views.Components.DateWidget"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/HolidayCalendarWidget.axaml b/LanMountainDesktop/Views/Components/HolidayCalendarWidget.axaml index 776f8de..9f8f2f8 100644 --- a/LanMountainDesktop/Views/Components/HolidayCalendarWidget.axaml +++ b/LanMountainDesktop/Views/Components/HolidayCalendarWidget.axaml @@ -8,10 +8,11 @@ x:Class="LanMountainDesktop.Views.Components.HolidayCalendarWidget"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/HourlyWeatherWidget.axaml b/LanMountainDesktop/Views/Components/HourlyWeatherWidget.axaml index 8e1921b..f03b621 100644 --- a/LanMountainDesktop/Views/Components/HourlyWeatherWidget.axaml +++ b/LanMountainDesktop/Views/Components/HourlyWeatherWidget.axaml @@ -9,14 +9,14 @@ x:Class="LanMountainDesktop.Views.Components.HourlyWeatherWidget"> - + diff --git a/LanMountainDesktop/Views/Components/IfengNewsWidget.axaml b/LanMountainDesktop/Views/Components/IfengNewsWidget.axaml index 8d66945..36a9163 100644 --- a/LanMountainDesktop/Views/Components/IfengNewsWidget.axaml +++ b/LanMountainDesktop/Views/Components/IfengNewsWidget.axaml @@ -9,7 +9,7 @@ x:Class="LanMountainDesktop.Views.Components.IfengNewsWidget"> diff --git a/LanMountainDesktop/Views/Components/JuyaNewsWidget.axaml b/LanMountainDesktop/Views/Components/JuyaNewsWidget.axaml index fdd8017..b0b823d 100644 --- a/LanMountainDesktop/Views/Components/JuyaNewsWidget.axaml +++ b/LanMountainDesktop/Views/Components/JuyaNewsWidget.axaml @@ -9,15 +9,15 @@ x:Class="LanMountainDesktop.Views.Components.JuyaNewsWidget"> diff --git a/LanMountainDesktop/Views/Components/LunarCalendarWidget.axaml b/LanMountainDesktop/Views/Components/LunarCalendarWidget.axaml index db7b6f7..7fed64b 100644 --- a/LanMountainDesktop/Views/Components/LunarCalendarWidget.axaml +++ b/LanMountainDesktop/Views/Components/LunarCalendarWidget.axaml @@ -8,10 +8,11 @@ x:Class="LanMountainDesktop.Views.Components.LunarCalendarWidget"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> - + diff --git a/LanMountainDesktop/Views/Components/MusicControlWidget.axaml b/LanMountainDesktop/Views/Components/MusicControlWidget.axaml index 25f4846..0936d2d 100644 --- a/LanMountainDesktop/Views/Components/MusicControlWidget.axaml +++ b/LanMountainDesktop/Views/Components/MusicControlWidget.axaml @@ -66,7 +66,7 @@ + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/StudyDeductionReasonsWidget.axaml b/LanMountainDesktop/Views/Components/StudyDeductionReasonsWidget.axaml index 5a4d353..f9f3db7 100644 --- a/LanMountainDesktop/Views/Components/StudyDeductionReasonsWidget.axaml +++ b/LanMountainDesktop/Views/Components/StudyDeductionReasonsWidget.axaml @@ -7,10 +7,11 @@ d:DesignHeight="220" x:Class="LanMountainDesktop.Views.Components.StudyDeductionReasonsWidget"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/StudyEnvironmentWidget.axaml b/LanMountainDesktop/Views/Components/StudyEnvironmentWidget.axaml index cb189a1..fbd961e 100644 --- a/LanMountainDesktop/Views/Components/StudyEnvironmentWidget.axaml +++ b/LanMountainDesktop/Views/Components/StudyEnvironmentWidget.axaml @@ -10,7 +10,7 @@ Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" BorderThickness="1" - CornerRadius="18" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" Padding="14,10"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/StudyNoiseCurveWidget.axaml b/LanMountainDesktop/Views/Components/StudyNoiseCurveWidget.axaml index 2e0e975..d532c96 100644 --- a/LanMountainDesktop/Views/Components/StudyNoiseCurveWidget.axaml +++ b/LanMountainDesktop/Views/Components/StudyNoiseCurveWidget.axaml @@ -8,10 +8,11 @@ d:DesignHeight="320" x:Class="LanMountainDesktop.Views.Components.StudyNoiseCurveWidget"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/StudyScoreOverviewWidget.axaml b/LanMountainDesktop/Views/Components/StudyScoreOverviewWidget.axaml index 23d3a79..6820fa4 100644 --- a/LanMountainDesktop/Views/Components/StudyScoreOverviewWidget.axaml +++ b/LanMountainDesktop/Views/Components/StudyScoreOverviewWidget.axaml @@ -7,10 +7,11 @@ d:DesignHeight="360" x:Class="LanMountainDesktop.Views.Components.StudyScoreOverviewWidget"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/StudySessionControlWidget.axaml b/LanMountainDesktop/Views/Components/StudySessionControlWidget.axaml index 52df7ec..3fb14a4 100644 --- a/LanMountainDesktop/Views/Components/StudySessionControlWidget.axaml +++ b/LanMountainDesktop/Views/Components/StudySessionControlWidget.axaml @@ -8,8 +8,10 @@ d:DesignHeight="150" x:Class="LanMountainDesktop.Views.Components.StudySessionControlWidget"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> + Background="{DynamicResource AdaptiveSurfaceRaisedBrush}" + BorderBrush="{DynamicResource AdaptiveButtonBorderBrush}" + BorderThickness="1" + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/WeatherWidget.axaml b/LanMountainDesktop/Views/Components/WeatherWidget.axaml index b18d82d..065cc87 100644 --- a/LanMountainDesktop/Views/Components/WeatherWidget.axaml +++ b/LanMountainDesktop/Views/Components/WeatherWidget.axaml @@ -9,16 +9,16 @@ x:Class="LanMountainDesktop.Views.Components.WeatherWidget"> + Background="#6B7B8F"> diff --git a/LanMountainDesktop/Views/Components/WhiteboardWidget.axaml b/LanMountainDesktop/Views/Components/WhiteboardWidget.axaml index ed4bb86..2f596b7 100644 --- a/LanMountainDesktop/Views/Components/WhiteboardWidget.axaml +++ b/LanMountainDesktop/Views/Components/WhiteboardWidget.axaml @@ -11,10 +11,12 @@ + Padding="12"> + CornerRadius="{DynamicResource DesignCornerRadiusComponent}" + Padding="14,12"> diff --git a/LanMountainDesktop/Views/Components/ZhiJiaoHubWidget.axaml b/LanMountainDesktop/Views/Components/ZhiJiaoHubWidget.axaml index 9426646..422afa8 100644 --- a/LanMountainDesktop/Views/Components/ZhiJiaoHubWidget.axaml +++ b/LanMountainDesktop/Views/Components/ZhiJiaoHubWidget.axaml @@ -8,7 +8,7 @@ x:Class="LanMountainDesktop.Views.Components.ZhiJiaoHubWidget"> diff --git a/LanMountainDesktop/plugins/PluginLoader.cs b/LanMountainDesktop/plugins/PluginLoader.cs index d01462e..d421884 100644 --- a/LanMountainDesktop/plugins/PluginLoader.cs +++ b/LanMountainDesktop/plugins/PluginLoader.cs @@ -340,7 +340,7 @@ public sealed class PluginLoader { var defaultSnapshot = new PluginAppearanceSnapshot( GlobalCornerRadiusScale: 1d, - CornerRadiusTokens: new PluginCornerRadiusTokens(6, 10, 14, 18, 24, 30, 36), + CornerRadiusTokens: new PluginCornerRadiusTokens(6, 12, 14, 20, 28, 32, 36, 18), ThemeVariant: "Unknown"); if (hostServices?.GetService(typeof(IAppearanceThemeService)) is not IAppearanceThemeService appearanceThemeService) diff --git a/LanMountainDesktop/plugins/PluginMarketEmbeddedView.cs b/LanMountainDesktop/plugins/PluginMarketEmbeddedView.cs index 2e5843d..e49b7c6 100644 --- a/LanMountainDesktop/plugins/PluginMarketEmbeddedView.cs +++ b/LanMountainDesktop/plugins/PluginMarketEmbeddedView.cs @@ -515,12 +515,34 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable Background = isSelected ? SelectedSurfaceBrush : SurfaceBrush, BorderBrush = isSelected ? SelectedBorderBrush : CardBorderBrush, BorderThickness = new Thickness(1), - CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusMd", 18), + CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 18), Padding = new Thickness(14), Child = layoutGrid }; } + private Control CreateDetailInfoRow(Control icon, Control infoStack) + { + return new Border + { + Background = SurfaceBrush, + BorderBrush = CardBorderBrush, + BorderThickness = new Thickness(1), + CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 16), + Padding = new Thickness(14, 12), + Child = new Grid + { + ColumnDefinitions = new ColumnDefinitions("Auto,*"), + ColumnSpacing = 12, + Children = + { + icon, + infoStack + } + } + }; + } + private void BuildDetailPanel() { if (_selectedPlugin is null) @@ -617,7 +639,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable Background = SurfaceBrush, BorderBrush = CardBorderBrush, BorderThickness = new Thickness(1), - CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusMd", 16), + CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 16), Padding = new Thickness(16), Child = new TextBlock { @@ -1011,7 +1033,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable return new Border { Background = SurfaceBrush, - CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusMd", 18), + CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 18), Padding = new Thickness(padding) }; } @@ -1021,7 +1043,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable return new Border { Background = SurfaceBrush, - CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusMd", 16), + CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 16), BorderBrush = CardBorderBrush, BorderThickness = new Thickness(1), Padding = new Thickness(18), @@ -1124,7 +1146,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable Background = SurfaceBrush, BorderBrush = CardBorderBrush, BorderThickness = new Thickness(1), - CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusSm", 14), + CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 14), Padding = new Thickness(14), Child = new StackPanel { @@ -1154,7 +1176,7 @@ internal sealed class PluginMarketEmbeddedView : UserControl, IDisposable Background = SurfaceBrush, BorderBrush = CardBorderBrush, BorderThickness = new Thickness(1), - CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusSm", 14), + CornerRadius = ResolveCornerRadiusResource("DesignCornerRadiusComponent", 14), Padding = new Thickness(14), Child = new StackPanel { diff --git a/docs/CORNER_RADIUS_SPEC.md b/docs/CORNER_RADIUS_SPEC.md index e0daa89..338824d 100644 --- a/docs/CORNER_RADIUS_SPEC.md +++ b/docs/CORNER_RADIUS_SPEC.md @@ -10,6 +10,7 @@ - Level 2:16px,小型色块和紧凑控件 - Level 3:20px,普通按钮 - Level 4:24px,输入面板和小型容器 +- Component:18px,桌面组件的标准圆角(默认值) - Level 5:28px,普通玻璃面板 - Level 6:32px,强化容器 - Level 7:36px,大容器、窗口、任务栏