1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
using System.Threading;
using System.Threading.Tasks;
namespace Xamarin.Forms.Platform.Tizen
{
public class ImageRenderer : ViewRenderer<Image, Native.Image>
{
public ImageRenderer()
{
RegisterPropertyHandler(Image.SourceProperty, UpdateSource);
RegisterPropertyHandler(Image.AspectProperty, UpdateAspect);
RegisterPropertyHandler(Image.IsOpaqueProperty, UpdateIsOpaque);
}
protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
{
if (Control == null)
{
var image = new Native.Image(Forms.Context.MainWindow);
SetNativeControl(image);
}
base.OnElementChanged(e);
}
async void UpdateSource()
{
ImageSource source = Element.Source;
((IImageController)Element).SetIsLoading(true);
if (Control != null)
{
bool success = await Control.LoadFromImageSourceAsync(source);
if (!IsDisposed && success)
((IVisualElementController)Element).NativeSizeChanged();
}
if (!IsDisposed)
((IImageController)Element).SetIsLoading(false);
}
void UpdateAspect()
{
Control.Aspect = Element.Aspect;
}
void UpdateIsOpaque()
{
Control.IsOpaque = Element.IsOpaque;
}
}
public interface IImageSourceHandler : IRegisterable
{
Task<bool> LoadImageAsync(Native.Image image, ImageSource imageSource, CancellationToken cancelationToken = default(CancellationToken));
}
public sealed class FileImageSourceHandler : IImageSourceHandler
{
public Task<bool> LoadImageAsync(Native.Image image, ImageSource imageSource, CancellationToken cancelationToken = default(CancellationToken))
{
var filesource = imageSource as FileImageSource;
if (filesource != null)
{
string file = filesource.File;
if (!string.IsNullOrEmpty(file))
return image.LoadAsync(ResourcePath.GetPath(file), cancelationToken);
}
return Task.FromResult<bool>(false);
}
}
public sealed class StreamImageSourceHandler : IImageSourceHandler
{
public async Task<bool> LoadImageAsync(Native.Image image, ImageSource imageSource, CancellationToken cancelationToken = default(CancellationToken))
{
var streamsource = imageSource as StreamImageSource;
if (streamsource != null && streamsource.Stream != null)
{
using (var streamImage = await ((IStreamImageSource)streamsource).GetStreamAsync(cancelationToken))
{
if (streamImage != null)
return await image.LoadAsync(streamImage, cancelationToken);
}
}
return false;
}
}
public sealed class UriImageSourceHandler : IImageSourceHandler
{
public Task<bool> LoadImageAsync(Native.Image image, ImageSource imageSource, CancellationToken cancelationToken = default(CancellationToken))
{
var urisource = imageSource as UriImageSource;
if (urisource != null && urisource.Uri != null)
{
return image.LoadAsync(urisource.Uri, cancelationToken);
}
return Task.FromResult<bool>(false);
}
}
}
|