diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index b13d6494..da53d450 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -4854,81 +4854,29 @@ - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - + @@ -5514,31 +5445,12 @@ HorizontalAlignment="Center" FontSize="12" /> - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 8f2fe6b2..6617fb2d 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -462,12 +462,12 @@ namespace Ink_Canvas BoardPen.Background = new SolidColorBrush(Color.FromRgb(42, 42, 42)); BoardSelect.Background = new SolidColorBrush(Color.FromRgb(42, 42, 42)); BoardEraser.Background = new SolidColorBrush(Color.FromRgb(42, 42, 42)); - BoardSelectGeometry.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); - BoardPenGeometry.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); - BoardEraserGeometry.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); - BoardPenLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)); - BoardSelectLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)); - BoardEraserLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + BoardSelect.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + BoardEraser.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + BoardPen.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + BoardSelect.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + BoardEraser.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)); BoardSelect.BorderBrush = new SolidColorBrush(Color.FromRgb(85, 85, 85)); BoardEraser.BorderBrush = new SolidColorBrush(Color.FromRgb(85, 85, 85)); BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(85, 85, 85)); @@ -477,12 +477,12 @@ namespace Ink_Canvas BoardPen.Background = new SolidColorBrush(Color.FromRgb(244, 244, 245)); BoardSelect.Background = new SolidColorBrush(Color.FromRgb(244, 244, 245)); BoardEraser.Background = new SolidColorBrush(Color.FromRgb(244, 244, 245)); - BoardSelectGeometry.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27)); - BoardPenGeometry.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27)); - BoardEraserGeometry.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27)); - BoardPenLabel.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27)); - BoardSelectLabel.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27)); - BoardEraserLabel.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27)); + BoardSelect.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27)); + BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27)); + BoardEraser.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27)); + BoardPen.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27)); + BoardSelect.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27)); + BoardEraser.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27)); BoardSelect.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170)); BoardEraser.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170)); BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170)); @@ -514,8 +514,8 @@ namespace Ink_Canvas Pen_Icon.Icon.Geometry = Geometry.Parse(GetCorrectIcon("pen", true)); BoardPen.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235)); BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(37, 99, 235)); - BoardPenGeometry.Brush = new SolidColorBrush(Colors.GhostWhite); - BoardPenLabel.Foreground = new SolidColorBrush(Colors.GhostWhite); + BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Colors.GhostWhite); + BoardPen.Foreground = new SolidColorBrush(Colors.GhostWhite); SetFloatingBarHighlightPosition("pen"); break; @@ -527,8 +527,8 @@ namespace Ink_Canvas Geometry.Parse(GetCorrectIcon("eraserCircle", true)); BoardEraser.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235)); BoardEraser.BorderBrush = new SolidColorBrush(Color.FromRgb(37, 99, 235)); - BoardEraserGeometry.Brush = new SolidColorBrush(Colors.GhostWhite); - BoardEraserLabel.Foreground = new SolidColorBrush(Colors.GhostWhite); + BoardEraser.IconGeometryDrawing.Brush = new SolidColorBrush(Colors.GhostWhite); + BoardEraser.Foreground = new SolidColorBrush(Colors.GhostWhite); SetFloatingBarHighlightPosition("eraser"); break; @@ -540,8 +540,8 @@ namespace Ink_Canvas Geometry.Parse(GetCorrectIcon("eraserStroke", true)); BoardEraser.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235)); BoardEraser.BorderBrush = new SolidColorBrush(Color.FromRgb(37, 99, 235)); - BoardEraserGeometry.Brush = new SolidColorBrush(Colors.GhostWhite); - BoardEraserLabel.Foreground = new SolidColorBrush(Colors.GhostWhite); + BoardEraser.IconGeometryDrawing.Brush = new SolidColorBrush(Colors.GhostWhite); + BoardEraser.Foreground = new SolidColorBrush(Colors.GhostWhite); SetFloatingBarHighlightPosition("eraserByStrokes"); break; @@ -553,8 +553,8 @@ namespace Ink_Canvas Geometry.Parse(GetCorrectIcon("lassoSelect", true)); BoardSelect.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235)); BoardSelect.BorderBrush = new SolidColorBrush(Color.FromRgb(37, 99, 235)); - BoardSelectGeometry.Brush = new SolidColorBrush(Colors.GhostWhite); - BoardSelectLabel.Foreground = new SolidColorBrush(Colors.GhostWhite); + BoardSelect.IconGeometryDrawing.Brush = new SolidColorBrush(Colors.GhostWhite); + BoardSelect.Foreground = new SolidColorBrush(Colors.GhostWhite); SetFloatingBarHighlightPosition("select"); break; @@ -570,15 +570,15 @@ namespace Ink_Canvas { BoardPen.Background = new SolidColorBrush(Color.FromRgb(42, 42, 42)); BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(85, 85, 85)); - BoardPenGeometry.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); - BoardPenLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + BoardPen.Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)); } else { BoardPen.Background = new SolidColorBrush(Color.FromRgb(244, 244, 245)); BoardPen.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170)); - BoardPenGeometry.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27)); - BoardPenLabel.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27)); + BoardPen.IconGeometryDrawing.Brush = new SolidColorBrush(Color.FromRgb(24, 24, 27)); + BoardPen.Foreground = new SolidColorBrush(Color.FromRgb(24, 24, 27)); } SetFloatingBarHighlightPosition("cursor"); diff --git a/InkCanvas.Controls/BoardToolbarButton.xaml b/InkCanvas.Controls/BoardToolbarButton.xaml new file mode 100644 index 00000000..e120b1d1 --- /dev/null +++ b/InkCanvas.Controls/BoardToolbarButton.xaml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + diff --git a/InkCanvas.Controls/BoardToolbarButton.xaml.cs b/InkCanvas.Controls/BoardToolbarButton.xaml.cs new file mode 100644 index 00000000..3e0b4e9b --- /dev/null +++ b/InkCanvas.Controls/BoardToolbarButton.xaml.cs @@ -0,0 +1,156 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Media; + +namespace Ink_Canvas.Controls +{ + public enum ButtonPosition + { + First, + Middle, + Last, + Single + } + + public partial class BoardToolbarButton : UserControl + { + public static readonly DependencyProperty LabelProperty = DependencyProperty.Register( + nameof(Label), typeof(string), typeof(BoardToolbarButton), + new PropertyMetadata(string.Empty, OnLabelChanged)); + + private static void OnLabelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var button = (BoardToolbarButton)d; + button.LabelTextBlock.Text = (string)e.NewValue; + } + + public string Label + { + get => (string)GetValue(LabelProperty); + set => SetValue(LabelProperty, value); + } + + public static readonly DependencyProperty IconGeometryProperty = DependencyProperty.Register( + nameof(IconGeometry), typeof(string), typeof(BoardToolbarButton), + new PropertyMetadata(string.Empty, OnIconGeometryChanged)); + + private static void OnIconGeometryChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var button = (BoardToolbarButton)d; + if (e.NewValue is string geometry && !string.IsNullOrEmpty(geometry)) + { + button.IconGeometryInternal.Geometry = Geometry.Parse(geometry); + } + } + + public string IconGeometry + { + get => (string)GetValue(IconGeometryProperty); + set => SetValue(IconGeometryProperty, value); + } + + public static readonly DependencyProperty PositionProperty = DependencyProperty.Register( + nameof(Position), typeof(ButtonPosition), typeof(BoardToolbarButton), + new PropertyMetadata(ButtonPosition.Middle, OnPositionChanged)); + + private static void OnPositionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var button = (BoardToolbarButton)d; + button.UpdateCornerRadius((ButtonPosition)e.NewValue); + } + + public ButtonPosition Position + { + get => (ButtonPosition)GetValue(PositionProperty); + set => SetValue(PositionProperty, value); + } + + public static readonly DependencyProperty IconBrushProperty = DependencyProperty.Register( + nameof(IconBrush), typeof(Brush), typeof(BoardToolbarButton), + new PropertyMetadata(null, OnIconBrushChanged)); + + private static void OnIconBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var button = (BoardToolbarButton)d; + if (e.NewValue is Brush brush) + { + button.IconGeometryInternal.Brush = brush; + } + } + + public Brush IconBrush + { + get => (Brush)GetValue(IconBrushProperty); + set => SetValue(IconBrushProperty, value); + } + + public event MouseButtonEventHandler ButtonMouseDown; + public event MouseButtonEventHandler ButtonMouseUp; + + public GeometryDrawing IconGeometryDrawing => IconGeometryInternal; + + public Border ButtonBorderControl => ButtonBorder; + + public TextBlock LabelTextBlockControl => LabelTextBlock; + + public new Brush Background + { + get => ButtonBorder.Background; + set => ButtonBorder.Background = value; + } + + public new Brush BorderBrush + { + get => ButtonBorder.BorderBrush; + set => ButtonBorder.BorderBrush = value; + } + + public new Brush Foreground + { + get => LabelTextBlock.Foreground; + set => LabelTextBlock.Foreground = value; + } + + public BoardToolbarButton() + { + InitializeComponent(); + UpdateCornerRadius(Position); + } + + private void UpdateCornerRadius(ButtonPosition position) + { + if (ButtonBorder == null) return; + + switch (position) + { + case ButtonPosition.First: + ButtonBorder.CornerRadius = new CornerRadius(5, 0, 0, 5); + ButtonBorder.BorderThickness = new Thickness(1, 1, 0, 1); + break; + case ButtonPosition.Middle: + ButtonBorder.CornerRadius = new CornerRadius(0); + ButtonBorder.BorderThickness = new Thickness(0, 1, 0, 1); + break; + case ButtonPosition.Last: + ButtonBorder.CornerRadius = new CornerRadius(0, 5, 5, 0); + ButtonBorder.BorderThickness = new Thickness(0, 1, 1, 1); + break; + case ButtonPosition.Single: + ButtonBorder.CornerRadius = new CornerRadius(5); + ButtonBorder.BorderThickness = new Thickness(1); + break; + } + } + + private void ButtonBorder_MouseDown(object sender, MouseButtonEventArgs e) + { + ButtonMouseDown?.Invoke(this, e); + } + + private void ButtonBorder_MouseUp(object sender, MouseButtonEventArgs e) + { + ButtonMouseUp?.Invoke(this, e); + } + } +}