diff --git a/src/AtomUI.Controls/Buttons/Button.cs b/src/AtomUI.Controls/Buttons/Button.cs
index 65717f20e..ef637470f 100644
--- a/src/AtomUI.Controls/Buttons/Button.cs
+++ b/src/AtomUI.Controls/Buttons/Button.cs
@@ -263,52 +263,55 @@ public class Button : AvaloniaButton,
return new Size(targetWidth, targetHeight);
}
- private void SetupShadows()
+ private void SetupShadows(bool force = false)
{
- if (ButtonType == ButtonType.Default)
+ if (force || Effect == null)
{
- if (IsDanger)
+ if (ButtonType == ButtonType.Default)
{
- Effect = new DropShadowEffect
+ if (IsDanger)
{
- OffsetX = DangerShadow.OffsetX,
- OffsetY = DangerShadow.OffsetY,
- Color = DangerShadow.Color,
- BlurRadius = DangerShadow.Blur
- };
+ Effect = new DropShadowEffect
+ {
+ OffsetX = DangerShadow.OffsetX,
+ OffsetY = DangerShadow.OffsetY,
+ Color = DangerShadow.Color,
+ BlurRadius = DangerShadow.Blur
+ };
+ }
+ else
+ {
+ Effect = new DropShadowEffect
+ {
+ OffsetX = DefaultShadow.OffsetX,
+ OffsetY = DefaultShadow.OffsetY,
+ Color = DefaultShadow.Color,
+ BlurRadius = DefaultShadow.Blur
+ };
+ }
}
- else
+ else if (ButtonType == ButtonType.Primary)
{
- Effect = new DropShadowEffect
+ if (IsDanger)
{
- OffsetX = DefaultShadow.OffsetX,
- OffsetY = DefaultShadow.OffsetY,
- Color = DefaultShadow.Color,
- BlurRadius = DefaultShadow.Blur
- };
- }
- }
- else if (ButtonType == ButtonType.Primary)
- {
- if (IsDanger)
- {
- Effect = new DropShadowEffect
+ Effect = new DropShadowEffect
+ {
+ OffsetX = DangerShadow.OffsetX,
+ OffsetY = DangerShadow.OffsetY,
+ Color = DangerShadow.Color,
+ BlurRadius = DangerShadow.Blur
+ };
+ }
+ else
{
- OffsetX = DangerShadow.OffsetX,
- OffsetY = DangerShadow.OffsetY,
- Color = DangerShadow.Color,
- BlurRadius = DangerShadow.Blur
- };
- }
- else
- {
- Effect = new DropShadowEffect
- {
- OffsetX = PrimaryShadow.OffsetX,
- OffsetY = PrimaryShadow.OffsetY,
- Color = PrimaryShadow.Color,
- BlurRadius = PrimaryShadow.Blur
- };
+ Effect = new DropShadowEffect
+ {
+ OffsetX = PrimaryShadow.OffsetX,
+ OffsetY = PrimaryShadow.OffsetY,
+ Color = PrimaryShadow.Color,
+ BlurRadius = PrimaryShadow.Blur
+ };
+ }
}
}
}
@@ -372,7 +375,7 @@ public class Button : AvaloniaButton,
e.Property == IsGhostProperty ||
e.Property == ButtonTypeProperty)
{
- SetupShadows();
+ SetupShadows(true);
}
else if (e.Property == IsMotionEnabledProperty ||
e.Property == IsWaveSpiritEnabledProperty)
diff --git a/src/AtomUI.Controls/ColorPicker/ColorPickerToken.cs b/src/AtomUI.Controls/ColorPicker/ColorPickerToken.cs
index a43c0d9cd..153c4b1fc 100644
--- a/src/AtomUI.Controls/ColorPicker/ColorPickerToken.cs
+++ b/src/AtomUI.Controls/ColorPicker/ColorPickerToken.cs
@@ -55,10 +55,16 @@ public class ColorPickerToken : AbstractControlDesignToken
public Color ColorPickerHandlerDarkColor { get; set; }
///
- /// ColorPicker 滑块高度
+ /// ColorPicker 滑块高度或者宽度
/// Slider height of ColorPicker
///
- public double ColorPickerSliderHeight { get; set; }
+ public double ColorPickerSliderSize { get; set; }
+
+ ///
+ /// ColorPicker 轨道的大小高度或者宽度
+ /// Slider height of ColorPicker Track
+ ///
+ public double ColorPickerSliderTrackSize { get; set; }
///
/// ColorPicker 预览尺寸
@@ -99,6 +105,11 @@ public class ColorPickerToken : AbstractControlDesignToken
///
public Thickness TriggerTextMargin { get; set; }
+ ///
+ /// 颜色滑块外间距
+ ///
+ public Thickness SliderContainerMargin { get; set; }
+
public ColorPickerToken()
: base(ID)
{
@@ -114,8 +125,9 @@ public class ColorPickerToken : AbstractControlDesignToken
ColorPickerAlphaInputWidth = 44;
ColorPickerInputNumberHandleWidth = 16;
ColorPickerPresetColorSize = 24;
- ColorPickerSliderHeight = 8;
- ColorPickerPreviewSize = ColorPickerSliderHeight * 2 + SharedToken.UniformlyMarginSM;
+ ColorPickerSliderSize = ColorPickerHandlerSizeSM;
+ ColorPickerSliderTrackSize = 8;
+ ColorPickerPreviewSize = ColorPickerSliderSize * 2 + SharedToken.UniformlyMarginSM;
ColorPickerInsetShadow = new BoxShadows(new BoxShadow()
{
IsInset = true,
@@ -140,6 +152,7 @@ public class ColorPickerToken : AbstractControlDesignToken
ColorSpectrumHeight = SharedToken.ControlHeightLG * 4;
ColorPickerHandlerLightColor = SharedToken.ColorBgElevated;
- ColorPickerHandlerDarkColor = Color.Parse("#22075e");
+ ColorPickerHandlerDarkColor = Color.Parse("#22075e");
+ SliderContainerMargin = new Thickness(0, 0, SharedToken.UniformlyMarginSM, 0);
}
}
diff --git a/src/AtomUI.Controls/ColorPicker/ColorSlider.cs b/src/AtomUI.Controls/ColorPicker/ColorSlider.cs
new file mode 100644
index 000000000..59c0b5678
--- /dev/null
+++ b/src/AtomUI.Controls/ColorPicker/ColorSlider.cs
@@ -0,0 +1,31 @@
+using Avalonia;
+using Avalonia.Layout;
+
+namespace AtomUI.Controls;
+
+using AvaloniaColorSlider = Avalonia.Controls.Primitives.ColorSlider;
+
+public class ColorSlider : AvaloniaColorSlider
+{
+ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
+ {
+ base.OnPropertyChanged(change);
+ if (change.Property == HeightProperty ||
+ change.Property == WidthProperty)
+ {
+ ConfigureCornerRadius();
+ }
+ }
+
+ protected void ConfigureCornerRadius()
+ {
+ if (Orientation == Orientation.Vertical)
+ {
+ CornerRadius = new CornerRadius(Width / 2);
+ }
+ else
+ {
+ CornerRadius = new CornerRadius(Height / 2);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/AtomUI.Controls/ColorPicker/ColorSpectrum.cs b/src/AtomUI.Controls/ColorPicker/ColorSpectrum.cs
index ebdf3bdcb..cc509e53b 100644
--- a/src/AtomUI.Controls/ColorPicker/ColorSpectrum.cs
+++ b/src/AtomUI.Controls/ColorPicker/ColorSpectrum.cs
@@ -332,10 +332,10 @@ public class ColorSpectrum : TemplatedControl
if (_inputTarget != null)
{
_inputTarget.PointerEntered += InputTarget_PointerEntered;
- _inputTarget.PointerExited += InputTarget_PointerExited;
- _inputTarget.PointerPressed += InputTarget_PointerPressed;
- _inputTarget.PointerMoved += InputTarget_PointerMoved;
- _inputTarget.PointerReleased += InputTarget_PointerReleased;
+ _inputTarget.PointerExited += HandleInputTargetPointerExited;
+ _inputTarget.PointerPressed += HandleInputTargetPointerPressed;
+ _inputTarget.PointerMoved += HandleInputTargetPointerMoved;
+ _inputTarget.PointerReleased += HandleInputTargetPointerReleased;
}
if (_layoutRoot != null)
@@ -405,10 +405,10 @@ public class ColorSpectrum : TemplatedControl
if (_inputTarget != null)
{
_inputTarget.PointerEntered -= InputTarget_PointerEntered;
- _inputTarget.PointerExited -= InputTarget_PointerExited;
- _inputTarget.PointerPressed -= InputTarget_PointerPressed;
- _inputTarget.PointerMoved -= InputTarget_PointerMoved;
- _inputTarget.PointerReleased -= InputTarget_PointerReleased;
+ _inputTarget.PointerExited -= HandleInputTargetPointerExited;
+ _inputTarget.PointerPressed -= HandleInputTargetPointerPressed;
+ _inputTarget.PointerMoved -= HandleInputTargetPointerMoved;
+ _inputTarget.PointerReleased -= HandleInputTargetPointerReleased;
}
}
@@ -1082,14 +1082,14 @@ public class ColorSpectrum : TemplatedControl
}
///
- private void InputTarget_PointerExited(object? sender, PointerEventArgs args)
+ private void HandleInputTargetPointerExited(object? sender, PointerEventArgs args)
{
UpdatePseudoClasses();
args.Handled = true;
}
///
- private void InputTarget_PointerPressed(object? sender, PointerPressedEventArgs args)
+ private void HandleInputTargetPointerPressed(object? sender, PointerPressedEventArgs args)
{
var inputTarget = _inputTarget;
@@ -1110,7 +1110,7 @@ public class ColorSpectrum : TemplatedControl
}
///
- private void InputTarget_PointerMoved(object? sender, PointerEventArgs args)
+ private void HandleInputTargetPointerMoved(object? sender, PointerEventArgs args)
{
if (!_isPointerPressed)
{
@@ -1122,7 +1122,7 @@ public class ColorSpectrum : TemplatedControl
}
///
- private void InputTarget_PointerReleased(object? sender, PointerReleasedEventArgs args)
+ private void HandleInputTargetPointerReleased(object? sender, PointerReleasedEventArgs args)
{
_isPointerPressed = false;
_shouldShowLargeSelection = false;
diff --git a/src/AtomUI.Controls/ColorPicker/Themes/AbstractColorPickerViewTheme.axaml b/src/AtomUI.Controls/ColorPicker/Themes/AbstractColorPickerViewTheme.axaml
index a85d9f920..9db49b70d 100644
--- a/src/AtomUI.Controls/ColorPicker/Themes/AbstractColorPickerViewTheme.axaml
+++ b/src/AtomUI.Controls/ColorPicker/Themes/AbstractColorPickerViewTheme.axaml
@@ -16,8 +16,8 @@
MinHeight="{TemplateBinding MinHeight}">
-
-
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
\ No newline at end of file
diff --git a/src/AtomUI.Controls/ColorPicker/Themes/ColorPickerThemes.axaml b/src/AtomUI.Controls/ColorPicker/Themes/ColorPickerThemes.axaml
index 5a5d54b1c..f9132c2a6 100644
--- a/src/AtomUI.Controls/ColorPicker/Themes/ColorPickerThemes.axaml
+++ b/src/AtomUI.Controls/ColorPicker/Themes/ColorPickerThemes.axaml
@@ -8,5 +8,6 @@
+
\ No newline at end of file
diff --git a/src/AtomUI.Controls/ColorPicker/Themes/ColorSliderTheme.axaml b/src/AtomUI.Controls/ColorPicker/Themes/ColorSliderTheme.axaml
new file mode 100644
index 000000000..8ba8dd42c
--- /dev/null
+++ b/src/AtomUI.Controls/ColorPicker/Themes/ColorSliderTheme.axaml
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AtomUI.Controls/ColorPicker/Themes/ColorSpectrumTheme.axaml b/src/AtomUI.Controls/ColorPicker/Themes/ColorSpectrumTheme.axaml
index c62984e76..458337979 100644
--- a/src/AtomUI.Controls/ColorPicker/Themes/ColorSpectrumTheme.axaml
+++ b/src/AtomUI.Controls/ColorPicker/Themes/ColorSpectrumTheme.axaml
@@ -10,15 +10,15 @@
-
-
+
+
+ VerticalAlignment="Center">
-
-
+
+
-
+
+
-
+
-
+
\ No newline at end of file
diff --git a/src/AtomUI.Controls/GeneratedFiles/AtomUI.Generator/AtomUI.Generator.TokenResourceKeyGenerator/TokenResourceConst.g.cs b/src/AtomUI.Controls/GeneratedFiles/AtomUI.Generator/AtomUI.Generator.TokenResourceKeyGenerator/TokenResourceConst.g.cs
index a74beda3a..83515aa2d 100644
--- a/src/AtomUI.Controls/GeneratedFiles/AtomUI.Generator/AtomUI.Generator.TokenResourceKeyGenerator/TokenResourceConst.g.cs
+++ b/src/AtomUI.Controls/GeneratedFiles/AtomUI.Generator/AtomUI.Generator.TokenResourceKeyGenerator/TokenResourceConst.g.cs
@@ -247,9 +247,11 @@ namespace AtomUI.Theme.Styling
public static readonly TokenResourceKey ColorPickerInsetShadow = new TokenResourceKey("ColorPicker.ColorPickerInsetShadow");
public static readonly TokenResourceKey ColorPickerPresetColorSize = new TokenResourceKey("ColorPicker.ColorPickerPresetColorSize");
public static readonly TokenResourceKey ColorPickerPreviewSize = new TokenResourceKey("ColorPicker.ColorPickerPreviewSize");
- public static readonly TokenResourceKey ColorPickerSliderHeight = new TokenResourceKey("ColorPicker.ColorPickerSliderHeight");
+ public static readonly TokenResourceKey ColorPickerSliderSize = new TokenResourceKey("ColorPicker.ColorPickerSliderSize");
+ public static readonly TokenResourceKey ColorPickerSliderTrackSize = new TokenResourceKey("ColorPicker.ColorPickerSliderTrackSize");
public static readonly TokenResourceKey ColorPickerWidth = new TokenResourceKey("ColorPicker.ColorPickerWidth");
public static readonly TokenResourceKey ColorSpectrumHeight = new TokenResourceKey("ColorPicker.ColorSpectrumHeight");
+ public static readonly TokenResourceKey SliderContainerMargin = new TokenResourceKey("ColorPicker.SliderContainerMargin");
public static readonly TokenResourceKey TriggerPadding = new TokenResourceKey("ColorPicker.TriggerPadding");
public static readonly TokenResourceKey TriggerTextMargin = new TokenResourceKey("ColorPicker.TriggerTextMargin");
}
diff --git a/src/AtomUI.Controls/Slider/SliderTrack.cs b/src/AtomUI.Controls/Slider/SliderTrack.cs
index 54e73c58f..7508e35c5 100644
--- a/src/AtomUI.Controls/Slider/SliderTrack.cs
+++ b/src/AtomUI.Controls/Slider/SliderTrack.cs
@@ -1,11 +1,7 @@
using System.Globalization;
-using System.Reactive.Disposables;
using AtomUI.Animations;
using AtomUI.Controls.Utils;
using AtomUI.Media;
-using AtomUI.Theme;
-using AtomUI.Theme.Data;
-using AtomUI.Theme.Styling;
using AtomUI.Utils;
using Avalonia;
using Avalonia.Animation;
@@ -18,7 +14,6 @@ using Avalonia.Input;
using Avalonia.Input.Raw;
using Avalonia.Interactivity;
using Avalonia.Layout;
-using Avalonia.LogicalTree;
using Avalonia.Media;
using Avalonia.Utilities;
using Avalonia.VisualTree;
@@ -26,8 +21,7 @@ using Avalonia.VisualTree;
namespace AtomUI.Controls;
[PseudoClasses(StdPseudoClass.Vertical, StdPseudoClass.Horizontal)]
-public class SliderTrack : Control,
- IResourceBindingManager
+public class SliderTrack : TemplatedControl
{
#region 公共属性定义
@@ -210,9 +204,6 @@ public class SliderTrack : Control,
internal static readonly StyledProperty SliderMarkSizeProperty =
AvaloniaProperty.Register(nameof(SliderMarkSize));
- internal static readonly StyledProperty PaddingProperty =
- Decorator.PaddingProperty.AddOwner();
-
internal static readonly StyledProperty MarkBorderBrushProperty =
AvaloniaProperty.Register(nameof(MarkBorderBrush));
@@ -231,8 +222,8 @@ public class SliderTrack : Control,
internal static readonly RoutedEvent TrailReleasedEvent =
RoutedEvent.Register(nameof(TrailReleased), RoutingStrategies.Bubble);
- internal static readonly StyledProperty IsMotionEnabledProperty
- = MotionAwareControlProperty.IsMotionEnabledProperty.AddOwner();
+ internal static readonly StyledProperty IsMotionEnabledProperty =
+ MotionAwareControlProperty.IsMotionEnabledProperty.AddOwner();
internal double SliderTrackSize
{
@@ -252,12 +243,6 @@ public class SliderTrack : Control,
set => SetValue(SliderMarkSizeProperty, value);
}
- public Thickness Padding
- {
- get => GetValue(PaddingProperty);
- set => SetValue(PaddingProperty, value);
- }
-
internal IBrush? MarkBorderBrush
{
get => GetValue(MarkBorderBrushProperty);
@@ -287,12 +272,7 @@ public class SliderTrack : Control,
get => GetValue(IsMotionEnabledProperty);
set => SetValue(IsMotionEnabledProperty, value);
}
-
- CompositeDisposable? IResourceBindingManager.ResourceBindingsDisposable
- {
- get => _resourceBindingsDisposable;
- set => _resourceBindingsDisposable = value;
- }
+
#endregion
#region 事件定义
@@ -310,13 +290,11 @@ public class SliderTrack : Control,
}
#endregion
-
- private CompositeDisposable? _resourceBindingsDisposable;
+
private VectorEventArgs? _deferredThumbDrag;
private Vector _lastDrag;
private RenderContextData? _renderContextData;
-
-
+
///
/// Gets the value of the 's current position. This can differ from when
/// is true.
@@ -425,18 +403,6 @@ public class SliderTrack : Control,
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
- _resourceBindingsDisposable = new CompositeDisposable();
- this.AddResourceBindingDisposable(
- TokenResourceBinder.CreateTokenBinding(this, SliderTrackSizeProperty, SliderTokenKey.SliderTrackSize));
- this.AddResourceBindingDisposable(
- TokenResourceBinder.CreateTokenBinding(this, SliderMarkSizeProperty, SliderTokenKey.MarkSize));
- this.AddResourceBindingDisposable(
- TokenResourceBinder.CreateTokenBinding(this, SliderRailSizeProperty, SliderTokenKey.RailSize));
- this.AddResourceBindingDisposable(TokenResourceBinder.CreateTokenBinding(this, MarkBackgroundBrushProperty,
- SharedTokenKey.ColorBgElevated));
- this.AddResourceBindingDisposable(TokenResourceBinder.CreateTokenBinding(this, MarkBorderThicknessProperty,
- SliderTokenKey.ThumbCircleBorderThickness));
-
var inputManager = AvaloniaLocator.Current.GetService()!;
_focusProcessDisposable = inputManager.Process.Subscribe(args =>
{
@@ -456,7 +422,6 @@ public class SliderTrack : Control,
}
});
HandleRangeModeChanged();
- SetupMarkLabelBrush();
CalculateMaxMarkSize();
ConfigureTransitions();
}
@@ -465,21 +430,6 @@ public class SliderTrack : Control,
{
base.OnDetachedFromVisualTree(e);
_focusProcessDisposable?.Dispose();
- this.DisposeTokenBindings();
- }
-
- private void SetupMarkLabelBrush()
- {
- if (IsEnabled)
- {
- this.AddResourceBindingDisposable(
- TokenResourceBinder.CreateTokenBinding(this, MarkLabelBrushProperty, SharedTokenKey.ColorText));
- }
- else
- {
- this.AddResourceBindingDisposable(TokenResourceBinder.CreateTokenBinding(this, MarkLabelBrushProperty,
- SharedTokenKey.ColorTextDisabled));
- }
}
private void HandleGlobalMousePressed(Point point)
@@ -599,10 +549,7 @@ public class SliderTrack : Control,
var isVertical = Orientation == Orientation.Vertical;
ComputeDensity(arrangeSize, isVertical);
-
- // Layout the pieces of track
- var isDirectionReversed = IsDirectionReversed;
-
+
var thumbCenterPoints = CalculateThumbCenterOffset(arrangeSize);
StartThumbCenterOffset = thumbCenterPoints.Item1;
EndThumbCenterOffset = thumbCenterPoints.Item2;
@@ -735,7 +682,6 @@ public class SliderTrack : Control,
{
if (change.Property == IsEnabledProperty)
{
- SetupMarkLabelBrush();
CalculateMaxMarkSize(true);
}
else if (change.Property == MarksProperty)
diff --git a/src/AtomUI.Controls/Slider/Themes/SliderThemes.axaml b/src/AtomUI.Controls/Slider/Themes/SliderThemes.axaml
index 9e62bc65c..247aa6c04 100644
--- a/src/AtomUI.Controls/Slider/Themes/SliderThemes.axaml
+++ b/src/AtomUI.Controls/Slider/Themes/SliderThemes.axaml
@@ -4,5 +4,6 @@
+
\ No newline at end of file
diff --git a/src/AtomUI.Controls/Slider/Themes/SliderTrackTheme.axaml b/src/AtomUI.Controls/Slider/Themes/SliderTrackTheme.axaml
new file mode 100644
index 000000000..6d9d3d17b
--- /dev/null
+++ b/src/AtomUI.Controls/Slider/Themes/SliderTrackTheme.axaml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file