mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
namespace LanMountainDesktop.PluginSdk;
|
|
|
|
public sealed class PluginAppearanceContext : IPluginAppearanceContext
|
|
{
|
|
public PluginAppearanceContext(PluginAppearanceSnapshot snapshot)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(snapshot);
|
|
ArgumentNullException.ThrowIfNull(snapshot.CornerRadiusTokens);
|
|
|
|
Snapshot = snapshot with
|
|
{
|
|
GlobalCornerRadiusScale = Math.Max(0d, snapshot.GlobalCornerRadiusScale),
|
|
ThemeVariant = string.IsNullOrWhiteSpace(snapshot.ThemeVariant)
|
|
? "Unknown"
|
|
: snapshot.ThemeVariant.Trim()
|
|
};
|
|
}
|
|
|
|
public PluginAppearanceSnapshot Snapshot { get; }
|
|
|
|
public double ResolveScaledCornerRadius(double baseRadius, double? minimum = null, double? maximum = null)
|
|
{
|
|
var scale = Snapshot.GlobalCornerRadiusScale;
|
|
var scaled = Math.Max(0d, baseRadius) * scale;
|
|
var scaledMin = minimum.HasValue ? minimum.Value * scale : scaled;
|
|
var scaledMax = maximum.HasValue ? maximum.Value * scale : scaled;
|
|
return minimum.HasValue || maximum.HasValue
|
|
? Math.Clamp(scaled, scaledMin, scaledMax)
|
|
: scaled;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|