From 32379d713b3239e10883000a01f7ccef4ea2d9db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=EC=84=B1=ED=98=84/Common=20Platform=20Lab=28SR?= =?UTF-8?q?=29/Staff=20Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Fri, 19 Nov 2021 13:23:48 +0900 Subject: [PATCH] [Tizen] Add ImageButton handler (#261) * [Tizen] Add ImageButton handler * Add comment --- .../ImageButton/ImageButtonHandler.Tizen.cs | 52 ++++++++++++--- .../ImageButton/ImageButtonHandler.cs | 3 +- .../src/Platform/Tizen/MauiImageButton.cs | 65 +++++++++++++++++++ 3 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 src/Core/src/Platform/Tizen/MauiImageButton.cs diff --git a/src/Core/src/Handlers/ImageButton/ImageButtonHandler.Tizen.cs b/src/Core/src/Handlers/ImageButton/ImageButtonHandler.Tizen.cs index faf12900a4b3..3c18e9a73bdc 100644 --- a/src/Core/src/Handlers/ImageButton/ImageButtonHandler.Tizen.cs +++ b/src/Core/src/Handlers/ImageButton/ImageButtonHandler.Tizen.cs @@ -1,19 +1,53 @@ using System; -using System.Collections.Generic; -using System.Text; -using ElmSharp; using TImage = Tizen.UIExtensions.ElmSharp.Image; namespace Microsoft.Maui.Handlers { - //TODO: Need to impl - public partial class ImageButtonHandler : ViewHandler + public partial class ImageButtonHandler : ViewHandler { - protected override TImage CreateNativeView() => throw new NotImplementedException(); - - void OnSetImageSource(TImage? obj) + protected override MauiImageButton CreateNativeView() { - throw new NotImplementedException(); + _ = VirtualView ?? throw new InvalidOperationException($"{nameof(VirtualView)} must be set to create a ImageButton"); + _ = NativeParent ?? throw new InvalidOperationException($"{nameof(NativeParent)} cannot be null"); + + var view = new MauiImageButton(NativeParent); + return view; + } + + protected override void ConnectHandler(MauiImageButton nativeView) + { + nativeView.Clicked += OnClicked; + nativeView.Pressed += OnPressed; + nativeView.Released += OnReleased; + base.ConnectHandler(nativeView); + } + + protected override void DisconnectHandler(MauiImageButton nativeView) + { + nativeView.Clicked -= OnClicked; + nativeView.Pressed -= OnPressed; + nativeView.Released -= OnReleased; + base.DisconnectHandler(nativeView); + } + + private void OnReleased(object? sender, EventArgs e) + { + VirtualView?.Released(); + } + + private void OnPressed(object? sender, EventArgs e) + { + VirtualView?.Pressed(); + } + + private void OnClicked(object? sender, EventArgs e) + { + VirtualView?.Clicked(); + } + + void OnSetImageSource(TImage? img) + { + //Empty on purpose } } } diff --git a/src/Core/src/Handlers/ImageButton/ImageButtonHandler.cs b/src/Core/src/Handlers/ImageButton/ImageButtonHandler.cs index 5bc0e2a6da8b..ba59fe1cd822 100644 --- a/src/Core/src/Handlers/ImageButton/ImageButtonHandler.cs +++ b/src/Core/src/Handlers/ImageButton/ImageButtonHandler.cs @@ -50,9 +50,10 @@ public ImageButtonHandler(IPropertyMapper mapper) : base(mapper ?? Mapper) IImage IImageHandler.TypedVirtualView => VirtualView; NativeImageView IImageHandler.TypedNativeView => -#if __IOS__ +#if __IOS__ || TIZEN NativeView.ImageView; #elif WINDOWS + NativeView.GetContent() ?? throw new InvalidOperationException("ImageButton did not contain an Image element."); #else NativeView; diff --git a/src/Core/src/Platform/Tizen/MauiImageButton.cs b/src/Core/src/Platform/Tizen/MauiImageButton.cs new file mode 100644 index 000000000000..1d2e33752b96 --- /dev/null +++ b/src/Core/src/Platform/Tizen/MauiImageButton.cs @@ -0,0 +1,65 @@ +using System; +using ElmSharp; +using Tizen.UIExtensions.Common; +using Tizen.UIExtensions.ElmSharp; +using TButton = Tizen.UIExtensions.ElmSharp.Button; +using TImage = Tizen.UIExtensions.ElmSharp.Image; + +namespace Microsoft.Maui +{ + public class MauiImageButton : Canvas + { + TImage _image; + TButton _button; + + public MauiImageButton(EvasObject parent) : base(parent) + { + _image = new TImage(parent); + _button = new TButton(parent); + + _button.Clicked += OnClicked; + _button.Pressed += OnPressed; + _button.Released += OnReleased; + _button.SetTransparentStyle(); + + Children.Add(_image); + _image.RaiseTop(); + + Children.Add(_button); + _button.SetTransparentStyle(); + _button.RaiseTop(); + + LayoutUpdated += OnLayout; + } + + public TImage ImageView + { + get => _image; + } + + public event EventHandler? Clicked; + public event EventHandler? Pressed; + public event EventHandler? Released; + + void OnReleased(object? sender, EventArgs e) + { + Released?.Invoke(this, EventArgs.Empty); + } + + void OnPressed(object? sender, EventArgs e) + { + Pressed?.Invoke(this, EventArgs.Empty); + } + + void OnClicked(object? sender, EventArgs e) + { + Clicked?.Invoke(this, EventArgs.Empty); + } + + void OnLayout(object? sender, LayoutEventArgs e) + { + _button.Geometry = Geometry; + _image.Geometry = Geometry; + } + } +} \ No newline at end of file