diff options
Diffstat (limited to 'Ryujinx.Ava/UI/Renderer/RendererHost.axaml.cs')
-rw-r--r-- | Ryujinx.Ava/UI/Renderer/RendererHost.axaml.cs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Ryujinx.Ava/UI/Renderer/RendererHost.axaml.cs b/Ryujinx.Ava/UI/Renderer/RendererHost.axaml.cs new file mode 100644 index 00000000..16a46df4 --- /dev/null +++ b/Ryujinx.Ava/UI/Renderer/RendererHost.axaml.cs @@ -0,0 +1,69 @@ +using Avalonia; +using Avalonia.Controls; +using Ryujinx.Common.Configuration; +using Ryujinx.Ui.Common.Configuration; +using Silk.NET.Vulkan; +using System; + +namespace Ryujinx.Ava.UI.Renderer +{ + public partial class RendererHost : UserControl, IDisposable + { + public EmbeddedWindow EmbeddedWindow; + + public event EventHandler<EventArgs> WindowCreated; + public event Action<object, Size> SizeChanged; + + public RendererHost() + { + InitializeComponent(); + + Dispose(); + + if (ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.OpenGl) + { + EmbeddedWindow = new EmbeddedWindowOpenGL(); + } + else + { + EmbeddedWindow = new EmbeddedWindowVulkan(); + } + + Initialize(); + } + + private void Initialize() + { + EmbeddedWindow.WindowCreated += CurrentWindow_WindowCreated; + EmbeddedWindow.SizeChanged += CurrentWindow_SizeChanged; + + Content = EmbeddedWindow; + } + + public void Dispose() + { + if (EmbeddedWindow != null) + { + EmbeddedWindow.WindowCreated -= CurrentWindow_WindowCreated; + EmbeddedWindow.SizeChanged -= CurrentWindow_SizeChanged; + } + } + + protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) + { + base.OnDetachedFromVisualTree(e); + + Dispose(); + } + + private void CurrentWindow_SizeChanged(object sender, Size e) + { + SizeChanged?.Invoke(sender, e); + } + + private void CurrentWindow_WindowCreated(object sender, IntPtr e) + { + WindowCreated?.Invoke(this, EventArgs.Empty); + } + } +}
\ No newline at end of file |