Browse Source

Update implementation and added test case to control catalog. Fixes #807.

pull/851/head
Jeremy Koritzinsky 10 years ago
parent
commit
1a96efa8af
  1. 6
      samples/ControlCatalog/Pages/ImagePage.xaml
  2. 23
      samples/ControlCatalog/Pages/ImagePage.xaml.cs
  3. 6
      src/Android/Avalonia.Android/PlatformIconLoader.cs
  4. 2
      src/Avalonia.Controls/Platform/IWindowIconImpl.cs
  5. 2
      src/Avalonia.Controls/WindowIcon.cs
  6. 5
      src/Gtk/Avalonia.Gtk/IconImpl.cs
  7. 8
      src/Windows/Avalonia.Win32/IconImpl.cs
  8. 8
      src/iOS/Avalonia.iOS/PlatformIconLoader.cs

6
samples/ControlCatalog/Pages/ImagePage.xaml

@ -34,6 +34,10 @@
Width="100" Height="200" Width="100" Height="200"
Stretch="UniformToFill"/> Stretch="UniformToFill"/>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<StackPanel Orientation="Vertical">
<TextBlock>Window Icon as an Image</TextBlock>
<Image Name="Icon" Width="100" Height="200" Stretch="None" />
</StackPanel>
</StackPanel> </StackPanel>
</UserControl> </UserControl>

23
samples/ControlCatalog/Pages/ImagePage.xaml.cs

@ -1,10 +1,14 @@
using System.IO;
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Avalonia.Media.Imaging;
namespace ControlCatalog.Pages namespace ControlCatalog.Pages
{ {
public class ImagePage : UserControl public class ImagePage : UserControl
{ {
private Image iconImage;
public ImagePage() public ImagePage()
{ {
this.InitializeComponent(); this.InitializeComponent();
@ -13,6 +17,25 @@ namespace ControlCatalog.Pages
private void InitializeComponent() private void InitializeComponent()
{ {
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
iconImage = this.Get<Image>("Icon");
}
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
if (iconImage.Source == null)
{
var windowRoot = e.Root as Window;
if (windowRoot != null)
{
using (var stream = new MemoryStream())
{
windowRoot.Icon.Save(stream);
stream.Seek(0, SeekOrigin.Begin);
iconImage.Source = new Bitmap(stream);
}
}
}
} }
} }
} }

6
src/Android/Avalonia.Android/PlatformIconLoader.cs

@ -49,11 +49,9 @@ namespace Avalonia.Android
stream.CopyTo(this.stream); stream.CopyTo(this.stream);
} }
public Stream Save() public void Save(Stream outputStream)
{ {
var returnStream = new MemoryStream(); stream.CopyTo(outputStream);
stream.CopyTo(returnStream);
return returnStream;
} }
} }
} }

2
src/Avalonia.Controls/Platform/IWindowIconImpl.cs

@ -7,6 +7,6 @@ namespace Avalonia.Platform
{ {
public interface IWindowIconImpl public interface IWindowIconImpl
{ {
Stream Save(); void Save(Stream outputStream);
} }
} }

2
src/Avalonia.Controls/WindowIcon.cs

@ -31,6 +31,6 @@ namespace Avalonia.Controls
public IWindowIconImpl PlatformImpl { get; } public IWindowIconImpl PlatformImpl { get; }
public Stream Save() => PlatformImpl.Save(); public void Save(Stream stream) => PlatformImpl.Save(stream);
} }
} }

5
src/Gtk/Avalonia.Gtk/IconImpl.cs

@ -18,9 +18,10 @@ namespace Avalonia.Gtk
public Pixbuf Pixbuf { get; } public Pixbuf Pixbuf { get; }
public Stream Save() public void Save(Stream stream)
{ {
return new MemoryStream(Pixbuf.SaveToBuffer("png")); var buffer = Pixbuf.SaveToBuffer("png");
stream.Write(buffer, 0, buffer.Length);
} }
} }
} }

8
src/Windows/Avalonia.Win32/IconImpl.cs

@ -27,18 +27,16 @@ namespace Avalonia.Win32
public IntPtr HIcon => icon?.Handle ?? bitmap.GetHicon(); public IntPtr HIcon => icon?.Handle ?? bitmap.GetHicon();
public Stream Save() public void Save(Stream outputStream)
{ {
var stream = new MemoryStream();
if (icon != null) if (icon != null)
{ {
icon.Save(stream); icon.Save(outputStream);
} }
else else
{ {
bitmap.Save(stream, ImageFormat.Png); bitmap.Save(outputStream, ImageFormat.Png);
} }
return stream;
} }
} }
} }

8
src/iOS/Avalonia.iOS/PlatformIconLoader.cs

@ -31,18 +31,16 @@ namespace Avalonia.iOS
// Stores the icon created as a stream to support saving even though an icon is never shown // Stores the icon created as a stream to support saving even though an icon is never shown
public class FakeIcon : IWindowIconImpl public class FakeIcon : IWindowIconImpl
{ {
private Stream stream = new MemoryStream(); private readonly Stream stream = new MemoryStream();
public FakeIcon(Stream stream) public FakeIcon(Stream stream)
{ {
stream.CopyTo(this.stream); stream.CopyTo(this.stream);
} }
public Stream Save() public void Save(Stream outputStream)
{ {
var returnStream = new MemoryStream(); stream.CopyTo(outputStream);
stream.CopyTo(returnStream);
return returnStream;
} }
} }
} }
Loading…
Cancel
Save