Implement clipping

This commit is contained in:
2026-09-08 21:15:21 +02:00
parent aec9083ebb
commit 0dbf430c0c
16 changed files with 66 additions and 9 deletions
+2
View File
@@ -56,6 +56,8 @@ void Command::Reset() {
VertexCount = 0;
VertexCountMax = 0;
IndexCountMax = 0;
ClipRect = 0.f;
ClipRectUsed = false;
}
Command& Command::Add(const Vertex& vtx) {
+5
View File
@@ -43,6 +43,7 @@ PD_API void Drawlist::Clear() {
pPath.ResetFast();
pCommands.NoReset();
pCurrentLayer = 0;
pClipRects.clear();
}
/** Command Allocation */
@@ -51,6 +52,10 @@ PD_API Command& Drawlist::NewCommand() {
cmd->Reset();
cmd->Layer = pCurrentLayer;
cmd->Tex = pCurrentTexture.GetID();
if (HasClipRect()) {
cmd->ClipRectUsed = HasClipRect();
cmd->ClipRect = pClipRects.back();
}
return *cmd;
}
+2 -2
View File
@@ -44,13 +44,13 @@ PD_API void Container::HandleInternalInput() {
/** Internal function */
PD_API void Container::PreDraw() {
if (pCLipRectUsed) {
// list->PushClipRect(pClipRect);
list->PushClipRect(pClipRect);
}
}
/** Internal function */
PD_API void Container::PostDraw() {
if (pCLipRectUsed) {
// list->PopClipRect();
list->PopClipRect();
}
}
} // namespace UI7
+2 -2
View File
@@ -172,7 +172,7 @@ PD_API void Layout::Update() {
it->HandleInput();
it->UnlockInput();
if (Flags & UI7LayoutFlags_UseClipRect) {
it->SetClipRect(fvec4(Pos, Size));
it->SetClipRect(fvec4(Pos.x, Pos.y, Size.x, Size.y));
}
it->PreDraw();
it->Draw();
@@ -201,7 +201,7 @@ PD_API void Layout::Label(const std::string& label) {
// Layout API
auto r = IO.LabelPool.Allocate();
*r = UI7::Label(label, IO);
r->SetClipRect(fvec4(GetPosition(), GetPosition() + GetSize()));
// r->SetClipRect(fvec4(GetPosition(), GetSize()));
AddObject(r);
}