Files
maui-linux/Rendering/LayeredRenderer.cs
Dave Friedel 1f096c38dc Update with recovered code from VM binaries (Jan 1)
Recovered from decompiled OpenMaui.Controls.Linux.dll:
- SkiaShell.cs: FlyoutHeader, FlyoutFooter, scroll support (918 -> 1325 lines)
- X11Window.cs: Cursor support (XCreateFontCursor, XDefineCursor)
- All handlers with dark mode support
- All services with latest implementations
- LinuxApplication with theme change handling
2026-01-01 06:22:48 -05:00

81 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using SkiaSharp;
namespace Microsoft.Maui.Platform.Linux.Rendering;
public class LayeredRenderer : IDisposable
{
private readonly Dictionary<int, RenderLayer> _layers = new Dictionary<int, RenderLayer>();
private readonly object _lock = new object();
private bool _disposed;
public RenderLayer GetLayer(int zIndex)
{
lock (_lock)
{
if (!_layers.TryGetValue(zIndex, out RenderLayer value))
{
value = new RenderLayer(zIndex);
_layers[zIndex] = value;
}
return value;
}
}
public void RemoveLayer(int zIndex)
{
lock (_lock)
{
if (_layers.TryGetValue(zIndex, out RenderLayer value))
{
value.Dispose();
_layers.Remove(zIndex);
}
}
}
public void Composite(SKCanvas canvas, SKRect bounds)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
lock (_lock)
{
foreach (RenderLayer item in _layers.Values.OrderBy((RenderLayer l) => l.ZIndex))
{
item.DrawTo(canvas, bounds);
}
}
}
public void InvalidateAll()
{
lock (_lock)
{
foreach (RenderLayer value in _layers.Values)
{
value.Invalidate();
}
}
}
public void Dispose()
{
if (_disposed)
{
return;
}
_disposed = true;
lock (_lock)
{
foreach (RenderLayer value in _layers.Values)
{
value.Dispose();
}
_layers.Clear();
}
}
}