2026-03-20 22:37:37 +08:00
|
|
|
namespace LanMountainDesktop.PluginSdk;
|
|
|
|
|
|
|
|
|
|
public sealed class PluginAppearanceContext : IPluginAppearanceContext
|
|
|
|
|
{
|
|
|
|
|
public PluginAppearanceContext(PluginAppearanceSnapshot snapshot)
|
|
|
|
|
{
|
|
|
|
|
ArgumentNullException.ThrowIfNull(snapshot);
|
|
|
|
|
ArgumentNullException.ThrowIfNull(snapshot.CornerRadiusTokens);
|
|
|
|
|
|
|
|
|
|
Snapshot = snapshot with
|
|
|
|
|
{
|
|
|
|
|
ThemeVariant = string.IsNullOrWhiteSpace(snapshot.ThemeVariant)
|
|
|
|
|
? "Unknown"
|
|
|
|
|
: snapshot.ThemeVariant.Trim()
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PluginAppearanceSnapshot Snapshot { get; }
|
|
|
|
|
|
|
|
|
|
public double ResolveScaledCornerRadius(double baseRadius, double? minimum = null, double? maximum = null)
|
|
|
|
|
{
|
2026-04-08 00:55:10 +08:00
|
|
|
var value = Math.Max(0d, baseRadius);
|
|
|
|
|
if (!minimum.HasValue && !maximum.HasValue)
|
|
|
|
|
{
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var clampedMin = minimum ?? value;
|
|
|
|
|
var clampedMax = maximum ?? value;
|
|
|
|
|
return Math.Clamp(value, clampedMin, clampedMax);
|
2026-03-20 22:37:37 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public double ResolveCornerRadius(PluginCornerRadiusPreset preset, double? minimum = null, double? maximum = null)
|
|
|
|
|
{
|
|
|
|
|
var resolved = Math.Max(0d, Snapshot.CornerRadiusTokens.Get(preset));
|
|
|
|
|
if (!minimum.HasValue && !maximum.HasValue)
|
|
|
|
|
{
|
|
|
|
|
return resolved;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var clampedMin = minimum ?? resolved;
|
|
|
|
|
var clampedMax = maximum ?? resolved;
|
|
|
|
|
if (clampedMin > clampedMax)
|
|
|
|
|
{
|
|
|
|
|
(clampedMin, clampedMax) = (clampedMax, clampedMin);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Math.Clamp(resolved, clampedMin, clampedMax);
|
|
|
|
|
}
|
|
|
|
|
}
|