Expose scissor mode, use it in UI

This commit is contained in:
2026-06-02 00:59:29 +02:00
parent b29ab443fe
commit 8ba21166be
5 changed files with 26 additions and 0 deletions

View File

@@ -139,6 +139,13 @@ namespace Voile.Rendering
Raylib.EndBlendMode();
}
public override void BeginScissored(Vector2 position, Rect rect)
{
Raylib.BeginScissorMode((int)position.X, (int)position.Y, (int)rect.Width, (int)rect.Height);
}
public override void EndScissored() => Raylib.EndScissorMode();
public override void BeginCamera2d(Vector2 offset, Vector2 target, float rotation, float zoom)
{
var camera = new Camera2D(offset, target, rotation, zoom);

View File

@@ -125,6 +125,9 @@ namespace Voile.Rendering
public abstract void BeginBlended(BlendMode blendMode);
public abstract void EndBlended();
public abstract void BeginScissored(Vector2 position, Rect rect);
public abstract void EndScissored();
/// <summary>
/// Begins drawing using a 2D camera.
/// </summary>

View File

@@ -404,6 +404,16 @@ namespace Voile.Rendering
throw new NotImplementedException();
}
public override void BeginScissored(Vector2 position, Rect rect)
{
throw new NotImplementedException();
}
public override void EndScissored()
{
throw new NotImplementedException();
}
private Vector2 _windowSize = Vector2.Zero;
private IWindow? _window;

View File

@@ -161,6 +161,8 @@ public abstract class Container : UIElement, IParentableElement
protected override void OnRender(RenderSystem renderer, Style style)
{
renderer.BeginScissored(GlobalPosition, LayoutSize);
foreach (var child in Children)
{
if (child is not IRenderableElement renderable) continue;
@@ -172,6 +174,8 @@ public abstract class Container : UIElement, IParentableElement
renderable.Render(renderer, childStyle);
}
renderer.EndScissored();
}
private List<UIElement> _children = new();

View File

@@ -109,7 +109,9 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
public void Render(RenderSystem renderer, Style style)
{
RenderStyleBox(renderer, style);
renderer.BeginScissored(GlobalPosition, LayoutSize);
OnRender(renderer, style);
renderer.EndScissored();
}
public void DrawSize(RenderSystem renderer)