Browse Source

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

pull/1762/head
Benedikt Schroeder 8 years ago
parent
commit
f071c58f6f
  1. 2
      src/Avalonia.Controls/TextBox.cs
  2. 11
      src/Avalonia.Styling/Styling/Setter.cs
  3. 4
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  4. 2
      src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
  5. 18
      src/Windows/Avalonia.Win32/SystemDialogImpl.cs
  6. 18
      tests/Avalonia.RenderTests/Media/ImageBrushTests.cs
  7. BIN
      tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_NullSource.expected.png
  8. BIN
      tests/TestFiles/Skia/Media/ImageBrush/ImageBrush_NullSource.expected.png

2
src/Avalonia.Controls/TextBox.cs

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

11
src/Avalonia.Styling/Styling/Setter.cs

@ -158,18 +158,11 @@ namespace Avalonia.Styling
var activated = new ActivatedObservable(activator, sourceInstance.Observable, description); var activated = new ActivatedObservable(activator, sourceInstance.Observable, description);
return InstancedBinding.OneWay(activated, BindingPriority.StyleTrigger); return InstancedBinding.OneWay(activated, BindingPriority.StyleTrigger);
} }
case BindingMode.OneWayToSource: default:
{
var activated = new ActivatedSubject(activator, sourceInstance.Subject, description);
return InstancedBinding.OneWayToSource(activated, BindingPriority.StyleTrigger);
}
case BindingMode.TwoWay:
{ {
var activated = new ActivatedSubject(activator, sourceInstance.Subject, description); 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
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

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

2
src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs

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

18
src/Windows/Avalonia.Win32/SystemDialogImpl.cs

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

18
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"); } 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] [Fact]
public async Task ImageBrush_Tile_Fill() public async Task ImageBrush_Tile_Fill()
{ {

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Loading…
Cancel
Save