Преглед изворни кода

Merge branch 'feature/ImageScaleMode' of https://github.com/Gillibald/Avalonia into feature/ImageScaleMode

Benedikt Schroeder пре 7 година
родитељ
комит
f071c58f6f

+ 1 - 1
src/Avalonia.Controls/TextBox.cs

@@ -557,7 +557,7 @@ namespace Avalonia.Controls
             var index = CaretIndex = _presenter.GetCaretIndex(point);
             var text = Text;
 
-            if (text != null)
+            if (text != null && e.MouseButton == MouseButton.Left)
             {
                 switch (e.ClickCount)
                 {

+ 2 - 9
src/Avalonia.Styling/Styling/Setter.cs

@@ -158,18 +158,11 @@ namespace Avalonia.Styling
                             var activated = new ActivatedObservable(activator, sourceInstance.Observable, description);
                             return InstancedBinding.OneWay(activated, BindingPriority.StyleTrigger);
                         }
-                    case BindingMode.OneWayToSource:
-                        {
-                            var activated = new ActivatedSubject(activator, sourceInstance.Subject, description);
-                            return InstancedBinding.OneWayToSource(activated, BindingPriority.StyleTrigger);
-                        }
-                    case BindingMode.TwoWay:
+                    default:
                         {
                             var activated = new ActivatedSubject(activator, sourceInstance.Subject, description);
-                            return InstancedBinding.TwoWay(activated, BindingPriority.StyleTrigger);
+                            return new InstancedBinding(activated, sourceInstance.Mode, BindingPriority.StyleTrigger);
                         }
-                    default:
-                        throw new NotSupportedException("Unsupported BindingMode.");
                 }
 
             }

+ 4 - 0
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@@ -513,6 +513,10 @@ namespace Avalonia.Skia
             {
                 ConfigureTileBrush(ref paintWrapper, targetSize, tileBrush, tileBrushImage);
             }
+            else
+            {
+                paint.Color = new SKColor(255, 255, 255, 0);
+            }
 
             return paintWrapper;
         }

+ 1 - 1
src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs

@@ -423,7 +423,7 @@ namespace Avalonia.Direct2D1.Media
             {
                 return new RadialGradientBrushImpl(radialGradientBrush, _renderTarget, destinationSize);
             }
-            else if (imageBrush != null)
+            else if (imageBrush?.Source != null)
             {
                 return new ImageBrushImpl(
                     imageBrush,

+ 12 - 6
src/Windows/Avalonia.Win32/SystemDialogImpl.cs

@@ -13,6 +13,9 @@ namespace Avalonia.Win32
 
     class SystemDialogImpl : ISystemDialogImpl
     {
+        private const UnmanagedMethods.FOS DefaultDialogOptions = UnmanagedMethods.FOS.FOS_FORCEFILESYSTEM | UnmanagedMethods.FOS.FOS_NOVALIDATE |
+            UnmanagedMethods.FOS.FOS_NOTESTFILECREATE | UnmanagedMethods.FOS.FOS_DONTADDTORECENT;
+
         public unsafe Task<string[]> ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent)
         {
             var hWnd = parent?.Handle?.Handle ?? IntPtr.Zero;
@@ -29,7 +32,7 @@ namespace Avalonia.Win32
 
                 uint options;
                 frm.GetOptions(out options);
-                options |= (uint)(UnmanagedMethods.FOS.FOS_NOVALIDATE | UnmanagedMethods.FOS.FOS_NOTESTFILECREATE | UnmanagedMethods.FOS.FOS_DONTADDTORECENT);
+                options |= (uint)(DefaultDialogOptions);
                 if (openDialog?.AllowMultiple == true)
                     options |= (uint)UnmanagedMethods.FOS.FOS_ALLOWMULTISELECT;
                 frm.SetOptions(options);
@@ -37,13 +40,16 @@ namespace Avalonia.Win32
                 var defaultExtension = (dialog as SaveFileDialog)?.DefaultExtension ?? "";
                 frm.SetDefaultExtension(defaultExtension);
                 frm.SetFileName(dialog.InitialFileName ?? "");
-                frm.SetTitle(dialog.Title);
+                frm.SetTitle(dialog.Title ?? "");
 
                 var filters = new List<UnmanagedMethods.COMDLG_FILTERSPEC>();
-                foreach (var filter in dialog.Filters)
+                if (dialog.Filters != null)
                 {
-                    var extMask = string.Join(";", filter.Extensions.Select(e => "*." + e));
-                    filters.Add(new UnmanagedMethods.COMDLG_FILTERSPEC { pszName = filter.Name, pszSpec = extMask });
+                    foreach (var filter in dialog.Filters)
+                    {
+                        var extMask = string.Join(";", filter.Extensions.Select(e => "*." + e));
+                        filters.Add(new UnmanagedMethods.COMDLG_FILTERSPEC { pszName = filter.Name, pszSpec = extMask });
+                    }
                 }
                 if (filters.Count == 0)
                     filters.Add(new UnmanagedMethods.COMDLG_FILTERSPEC { pszName = "All files", pszSpec = "*.*" });
@@ -106,7 +112,7 @@ namespace Avalonia.Win32
                 var frm = (UnmanagedMethods.IFileDialog)unk;
                 uint options;
                 frm.GetOptions(out options);
-                options |= (uint)(UnmanagedMethods.FOS.FOS_PICKFOLDERS | UnmanagedMethods.FOS.FOS_FORCEFILESYSTEM | UnmanagedMethods.FOS.FOS_NOVALIDATE | UnmanagedMethods.FOS.FOS_NOTESTFILECREATE | UnmanagedMethods.FOS.FOS_DONTADDTORECENT);
+                options |= (uint)(UnmanagedMethods.FOS.FOS_PICKFOLDERS | DefaultDialogOptions);
                 frm.SetOptions(options);
 
                 if (dialog.InitialDirectory != null)

+ 18 - 0
tests/Avalonia.RenderTests/Media/ImageBrushTests.cs

@@ -32,6 +32,24 @@ namespace Avalonia.Direct2D1.RenderTests.Media
             get { return System.IO.Path.Combine(OutputPath, "github_icon_small.png"); }
         }
 
+        [Fact]
+        public async Task ImageBrush_NullSource()
+        {
+            Decorator target = new Decorator
+            {
+                Width = 200,
+                Height = 200,
+                Child = new Rectangle
+                {
+                    Margin = new Thickness(8),
+                    Fill = new ImageBrush()
+                }
+            };
+
+            await RenderToFile(target);
+            CompareImages();
+        }
+
         [Fact]
         public async Task ImageBrush_Tile_Fill()
         {

BIN
tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_NullSource.expected.png


BIN
tests/TestFiles/Skia/Media/ImageBrush/ImageBrush_NullSource.expected.png