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(); 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) public override void BeginCamera2d(Vector2 offset, Vector2 target, float rotation, float zoom)
{ {
var camera = new Camera2D(offset, target, rotation, 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 BeginBlended(BlendMode blendMode);
public abstract void EndBlended(); public abstract void EndBlended();
public abstract void BeginScissored(Vector2 position, Rect rect);
public abstract void EndScissored();
/// <summary> /// <summary>
/// Begins drawing using a 2D camera. /// Begins drawing using a 2D camera.
/// </summary> /// </summary>

View File

@@ -404,6 +404,16 @@ namespace Voile.Rendering
throw new NotImplementedException(); 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 Vector2 _windowSize = Vector2.Zero;
private IWindow? _window; private IWindow? _window;

View File

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