166 ImGuiContext* ctx = ImGui::GetCurrentContext();
170 ImGuiWindow* window = ImGui::GetCurrentWindow();
171 if (window ==
nullptr || window->SkipItems)
175 id = window->GetID(rect);
178 const ImVec2 mouse = ImGui::GetMousePos();
184 static thread_local ImGuiID s_active_id = 0;
185 static thread_local ImVec2 s_last_mouse = ImVec2(0, 0);
187 bool committed =
false;
190 if (ImGui::IsMouseDown(ImGuiMouseButton_Left)) {
191 const ImVec2 delta(mouse.x - s_last_mouse.x, mouse.y - s_last_mouse.y);
194 s_last_mouse = mouse;
195 ImGui::SetMouseCursor(CursorForZone(s_active_zone));
203 ImGui::IsMouseClicked(ImGuiMouseButton_Left)) {
205 s_active_zone = hovered_zone;
206 s_last_mouse = mouse;
207 ImGui::SetMouseCursor(CursorForZone(hovered_zone));
209 ImGui::SetMouseCursor(CursorForZone(hovered_zone));
213 ImVec4 color = style.
color;
214 if (color.w == 0.0f) {
217 const ImU32 color_u32 = ImGui::ColorConvertFloat4ToU32(color);
219 ImDrawList* draw_list = window->DrawList;
228 for (std::size_t i = 0; i < 8; ++i) {
229 if (!
Has(mask, kZoneMask[i]))
231 const ImRect r = HandleRect(kAllZones[i], *rect, style.
handle_size);
232 draw_list->AddRectFilled(r.Min, r.Max, color_u32);