Comments (3)
Oh actually the reason is that you used draw_list->PushClipRect()
, this has no effect on GUI logic only draw list rendering.
It's a bit ill-defined what it would do in this case, I am not entirely sure would more correct to inherent ImDrawList's ClipRect in the child window.
If you instead use ImGui::PushClipRect()
it does what you expect:
ImGui::PushStyleColor(ImGuiCol_WindowBg, IM_COL32(255, 0, 0, 255));
ImGui::Begin("Main Window");
ImDrawList* draw_list = ImGui::GetWindowDrawList();
ImVec2 min = { 5 + ImGui::GetWindowPos().x, 5 + ImGui::GetWindowPos().y };
ImVec2 max = { min.x + 100, min.y + 100 };
ImGui::PushClipRect(min, max, true);
ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(0, 255, 0, 200));
if (ImGui::BeginChild("Child Window 1", { 300,200 }, true) == true)
{
ImVec2 p = ImGui::GetCursorScreenPos();
ImGui::Text("abcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\n");
ImGui::SetCursorScreenPos(p);
ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(0, 0, 255, 200));
ImGui::BeginChild("Child Window 2", ImVec2(300, 200), ImGuiChildFlags_Border);
ImGui::Text("abcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\n");
ImGui::PopStyleColor();
ImGui::EndChild();
}
ImGui::PopStyleColor();
ImGui::EndChild();
ImGui::PopClipRect();
ImGui::End();
ImGui::PopStyleColor();
from imgui.
The screenshot shows that the first child window was cropped correctly, but the second child window is not cropped the same way as the first. Is that how it should be?
Actually, only the background of the first child window is cropped correctly, because as an optimized it is drawn in the drawlist of the parent window. In the following modified repro you can see the text in first child goes out.
ImGui::PushStyleColor(ImGuiCol_WindowBg, IM_COL32(255, 0, 0, 255));
ImGui::Begin("Main Window");
ImDrawList* draw_list = ImGui::GetWindowDrawList();
ImVec2 min = { 5 + ImGui::GetWindowPos().x, 5 + ImGui::GetWindowPos().y };
ImVec2 max = { min.x + 100, min.y + 100 };
draw_list->PushClipRect(min, max);
ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(0, 255, 0, 200));
if (ImGui::BeginChild("Child Window 1", { 300,200 }, true) == true)
{
ImVec2 p = ImGui::GetCursorScreenPos();
ImGui::Text("abcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\n");
ImGui::SetCursorScreenPos(p);
ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(0, 0, 255, 200));
ImGui::BeginChild("Child Window 2", ImVec2(300, 200), ImGuiChildFlags_Border);
ImGui::Text("abcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\n");
ImGui::PopStyleColor();
ImGui::EndChild();
}
ImGui::PopStyleColor();
draw_list->PopClipRect();
ImGui::EndChild();
ImGui::End();
ImGui::PopStyleColor();
from imgui.
Thank you very much, it worked.
from imgui.
Related Issues (20)
- How can I set the default window dock position and size if they are not present inside imgui.ini ? HOT 5
- Combo widgets' contents don't render after being rotated and translated by a shader HOT 3
- Win32 DirectX11 app resize resizes ImGui window HOT 1
- GLFW backend: PrevWndProc != NULL assertion fails on Windows HOT 2
- Unexpected output from DrawList->PathArcTo HOT 2
- SetKeyboardFocusHere(-1) not working as expected with InputTextMultiline
- TabBar - Common Style
- WebGPU backend causes crash after window resize HOT 1
- Table drawing Horizontal Scrollbar too far below HOT 3
- Vertical Misalignment when using different size fonts with AlignTextToFramePadding HOT 3
- How can I set FULL window transparency HOT 1
- Detecting a mouse click HOT 5
- How to get resizable child in window? HOT 8
- CMake Support HOT 1
- I want know where is ImGuiLayout HOT 3
- Question: How to load state of docked windows HOT 11
- Locked on 62 / 63 fps in dx11 without Vsync HOT 1
- Change cursor when hand whenTextLink is hovered - Common Style HOT 1
- Touchpad tap to click not captured when io.ConfigInputTrickleEventQueue is false HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from imgui.