Implement clipping
This commit is contained in:
@@ -56,6 +56,8 @@ void Command::Reset() {
|
||||
VertexCount = 0;
|
||||
VertexCountMax = 0;
|
||||
IndexCountMax = 0;
|
||||
ClipRect = 0.f;
|
||||
ClipRectUsed = false;
|
||||
}
|
||||
|
||||
Command& Command::Add(const Vertex& vtx) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user