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"
Stretch="UniformToFill"/>
</StackPanel>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Vertical">
<TextBlock>Window Icon as an Image</TextBlock>
<Image Name="Icon" Width="100" Height="200" Stretch="None" />
</StackPanel>
</StackPanel>
</UserControl>

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

@ -1,10 +1,14 @@
using System.IO;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Media.Imaging;
namespace ControlCatalog.Pages
{
public class ImagePage : UserControl
{
private Image iconImage;
public ImagePage()
{
this.InitializeComponent();
@ -13,6 +17,25 @@ namespace ControlCatalog.Pages
private void InitializeComponent()
{
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);
}
public Stream Save()
public void Save(Stream outputStream)
{
var returnStream = new MemoryStream();
stream.CopyTo(returnStream);
return returnStream;
stream.CopyTo(outputStream);
}
}
}

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

@ -7,6 +7,6 @@ namespace Avalonia.Platform
{
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 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 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 Stream Save()
public void Save(Stream outputStream)
{
var stream = new MemoryStream();
if (icon != null)
{
icon.Save(stream);
icon.Save(outputStream);
}
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
public class FakeIcon : IWindowIconImpl
{
private Stream stream = new MemoryStream();
private readonly Stream stream = new MemoryStream();
public FakeIcon(Stream stream)
{
stream.CopyTo(this.stream);
}
public Stream Save()
public void Save(Stream outputStream)
{
var returnStream = new MemoryStream();
stream.CopyTo(returnStream);
return returnStream;
stream.CopyTo(outputStream);
}
}
}
Loading…
Cancel
Save