mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-06-28 04:36:23 +02:00
Overlays: Move the structure to Ryujinx/UI/Overlay (also no longer need to cross-pass locales)
This commit is contained in:
parent
076dd9a56a
commit
d6232008d5
15 changed files with 138 additions and 66 deletions
|
@ -1,160 +0,0 @@
|
|||
using SkiaSharp;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Ryujinx.Graphics.Gpu.Image;
|
||||
|
||||
namespace Ryujinx.Graphics.Gpu.Overlay
|
||||
{
|
||||
/// <summary>
|
||||
/// Manages multiple overlays and handles rendering
|
||||
/// </summary>
|
||||
public class OverlayManager : IDisposable
|
||||
{
|
||||
private readonly List<Overlay> _overlays = new();
|
||||
private readonly object _lock = new();
|
||||
|
||||
/// <summary>
|
||||
/// Add an overlay to the manager
|
||||
/// </summary>
|
||||
public void AddOverlay(Overlay overlay)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_overlays.Add(overlay);
|
||||
SortOverlays();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove an overlay from the manager
|
||||
/// </summary>
|
||||
public void RemoveOverlay(Overlay overlay)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
_overlays.Remove(overlay);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove overlay by name
|
||||
/// </summary>
|
||||
public void RemoveOverlay(string name)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
var overlay = _overlays.FirstOrDefault(o => o.Name == name);
|
||||
if (overlay != null)
|
||||
{
|
||||
_overlays.Remove(overlay);
|
||||
overlay.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Find overlay by name
|
||||
/// </summary>
|
||||
public Overlay FindOverlay(string name)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _overlays.FirstOrDefault(o => o.Name == name);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get all overlays
|
||||
/// </summary>
|
||||
public IReadOnlyList<Overlay> GetOverlays()
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return _overlays.AsReadOnly();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear all overlays
|
||||
/// </summary>
|
||||
public void Clear()
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
foreach (var overlay in _overlays)
|
||||
{
|
||||
overlay.Dispose();
|
||||
}
|
||||
_overlays.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update all overlays (for animations)
|
||||
/// </summary>
|
||||
public void Update(float deltaTime, SKSize screenSize = default)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
foreach (var overlay in _overlays.Where(o => o.IsVisible))
|
||||
{
|
||||
overlay.Update(deltaTime, screenSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Render all visible overlays
|
||||
/// </summary>
|
||||
public void Render(SKCanvas canvas)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
foreach (var overlay in _overlays.Where(o => o.IsVisible && o.Opacity > 0.0f))
|
||||
{
|
||||
overlay.Render(canvas);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sort overlays by Z-index
|
||||
/// </summary>
|
||||
private void SortOverlays()
|
||||
{
|
||||
_overlays.Sort((a, b) => a.ZIndex.CompareTo(b.ZIndex));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show overlay
|
||||
/// </summary>
|
||||
public void ShowOverlay(string name)
|
||||
{
|
||||
var overlay = FindOverlay(name);
|
||||
if (overlay != null)
|
||||
{
|
||||
overlay.IsVisible = true;
|
||||
overlay.Opacity = 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Hide overlay
|
||||
/// </summary>
|
||||
public void HideOverlay(string name)
|
||||
{
|
||||
var overlay = FindOverlay(name);
|
||||
if (overlay != null)
|
||||
{
|
||||
overlay.IsVisible = false;
|
||||
overlay.Opacity = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue