From 890f2d48213abac6cd559976ac90783ae278f62f Mon Sep 17 00:00:00 2001 From: Martin Zikmund Date: Mon, 14 Feb 2022 11:03:19 +0100 Subject: [PATCH] feat: Support for SelectionHihglightColor on Skia --- .../UI/Xaml/Controls/TextBoxViewExtension.cs | 9 ++++++++- .../Extensions/UI/Xaml/Controls/Extensions.cs | 2 +- .../Extensions/UI/Xaml/Controls/TextBoxViewExtension.cs | 2 +- .../UI/Xaml/Controls/TextBox/ITextBoxExtension.skia.cs | 5 ++++- src/Uno.UI/UI/Xaml/Controls/TextBox/TextBox.skia.cs | 2 ++ src/Uno.UI/UI/Xaml/Controls/TextBox/TextBoxView.skia.cs | 8 +++++++- 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/Uno.UI.Runtime.Skia.Gtk/UI/Xaml/Controls/TextBoxViewExtension.cs b/src/Uno.UI.Runtime.Skia.Gtk/UI/Xaml/Controls/TextBoxViewExtension.cs index dcbaffee23b4..b6c1f198912a 100644 --- a/src/Uno.UI.Runtime.Skia.Gtk/UI/Xaml/Controls/TextBoxViewExtension.cs +++ b/src/Uno.UI.Runtime.Skia.Gtk/UI/Xaml/Controls/TextBoxViewExtension.cs @@ -6,6 +6,7 @@ using Gtk; using Pango; using Uno.Disposables; +using Uno.Foundation.Logging; using Uno.UI.Runtime.Skia.GTK.UI.Text; using Uno.UI.Xaml.Controls.Extensions; using Windows.Foundation.Collections; @@ -425,7 +426,7 @@ public int GetSelectionLength() } } - public void SetForeground(Windows.UI.Xaml.Media.Brush brush) + public void UpdateForeground() { if (_currentInputWidget is not null && brush is SolidColorBrush scb) { @@ -452,5 +453,11 @@ private void RemoveForegroundProvider() _foregroundCssProvider = null; } } + + public void UpdateSelectionHighlightColor() + { + // Selection highlight color change is not supported on GTK currently + this.Log().LogWarning("SelectionHighlightColor changes are currently not supported on GTK"); + } } } diff --git a/src/Uno.UI.Runtime.Skia.Wpf/Extensions/UI/Xaml/Controls/Extensions.cs b/src/Uno.UI.Runtime.Skia.Wpf/Extensions/UI/Xaml/Controls/Extensions.cs index 670575f18882..a9ea72199d18 100644 --- a/src/Uno.UI.Runtime.Skia.Wpf/Extensions/UI/Xaml/Controls/Extensions.cs +++ b/src/Uno.UI.Runtime.Skia.Wpf/Extensions/UI/Xaml/Controls/Extensions.cs @@ -39,7 +39,7 @@ internal static class Extensions return null; } - private static System.Windows.Media.Color ToWpfColor(this Windows.UI.Color color) + public static System.Windows.Media.Color ToWpfColor(this Windows.UI.Color color) => System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B); private static System.Windows.Point ToWpfPoint(this Windows.Foundation.Point point) diff --git a/src/Uno.UI.Runtime.Skia.Wpf/Extensions/UI/Xaml/Controls/TextBoxViewExtension.cs b/src/Uno.UI.Runtime.Skia.Wpf/Extensions/UI/Xaml/Controls/TextBoxViewExtension.cs index f9ee11433c87..1d7974ac7857 100644 --- a/src/Uno.UI.Runtime.Skia.Wpf/Extensions/UI/Xaml/Controls/TextBoxViewExtension.cs +++ b/src/Uno.UI.Runtime.Skia.Wpf/Extensions/UI/Xaml/Controls/TextBoxViewExtension.cs @@ -305,7 +305,7 @@ public int GetSelectionLength() return 0; } - public void SetForeground(Windows.UI.Xaml.Media.Brush brush) + public void UpdateForeground() { var wpfBrush = brush.ToWpfBrush(); if (_currentTextBoxInputWidget != null) diff --git a/src/Uno.UI/UI/Xaml/Controls/TextBox/ITextBoxExtension.skia.cs b/src/Uno.UI/UI/Xaml/Controls/TextBox/ITextBoxExtension.skia.cs index 94a3e1a02f81..d9afe768724a 100644 --- a/src/Uno.UI/UI/Xaml/Controls/TextBox/ITextBoxExtension.skia.cs +++ b/src/Uno.UI/UI/Xaml/Controls/TextBox/ITextBoxExtension.skia.cs @@ -1,4 +1,5 @@ using Windows.Foundation; +using Windows.UI; using Windows.UI.Xaml.Media; namespace Uno.UI.Xaml.Controls.Extensions @@ -29,6 +30,8 @@ internal interface ITextBoxViewExtension int GetSelectionLength(); - void SetForeground(Brush brush); + void UpdateForeground(); + + void UpdateSelectionHighlightColor(); } } diff --git a/src/Uno.UI/UI/Xaml/Controls/TextBox/TextBox.skia.cs b/src/Uno.UI/UI/Xaml/Controls/TextBox/TextBox.skia.cs index 91bbd376a50d..96aba654daf3 100644 --- a/src/Uno.UI/UI/Xaml/Controls/TextBox/TextBox.skia.cs +++ b/src/Uno.UI/UI/Xaml/Controls/TextBox/TextBox.skia.cs @@ -12,6 +12,8 @@ public partial class TextBox partial void OnForegroundColorChangedPartial(Brush newValue) => TextBoxView?.OnForegroundChanged(newValue); + partial void OnSelectionHighlightColorChangedPartial(SolidColorBrush newValue) => TextBoxView?.OnSelectionHighlightColorChanged(newValue); + partial void OnMaxLengthChangedPartial(DependencyPropertyChangedEventArgs e) => TextBoxView?.UpdateMaxLength(); private void UpdateTextBoxView() diff --git a/src/Uno.UI/UI/Xaml/Controls/TextBox/TextBoxView.skia.cs b/src/Uno.UI/UI/Xaml/Controls/TextBox/TextBoxView.skia.cs index b6e693cfad0a..6ad5c3a195ae 100644 --- a/src/Uno.UI/UI/Xaml/Controls/TextBox/TextBoxView.skia.cs +++ b/src/Uno.UI/UI/Xaml/Controls/TextBox/TextBoxView.skia.cs @@ -78,7 +78,13 @@ internal void Select(int start, int length) internal void OnForegroundChanged(Brush brush) { DisplayBlock.Foreground = brush; - _textBoxExtension?.SetForeground(brush); + _textBoxExtension?.UpdateForeground(); + } + + internal void OnSelectionHighlightColorChanged(SolidColorBrush brush) + { + DisplayBlock.SelectionHighlightColor = brush; + _textBoxExtension?.UpdateSelectionHighlightColor(); } internal void OnFocusStateChanged(FocusState focusState)