static void DrawWindowRecursive(const UIWindow &wnd, DrawingContext &dc, bool topMostPass, bool insideTopMost) { insideTopMost |= wnd.GetTopMost(); if (!wnd.GetVisible() || (insideTopMost && !topMostPass)) return; // skip window and all its children dc.PushTransform(Vector2(wnd.GetX(), wnd.GetY())); if (insideTopMost == topMostPass) wnd.Draw(dc); // topmost windows escape parents' clip bool clipChildren = wnd.GetClipChildren() && (!topMostPass || insideTopMost); if (clipChildren) { math::RectInt clip; clip.left = 0; clip.top = 0; clip.right = (int)wnd.GetWidth(); clip.bottom = (int)wnd.GetHeight(); dc.PushClippingRect(clip); } for (UIWindow *w = wnd.GetFirstChild(); w; w = w->GetNextSibling()) DrawWindowRecursive(*w, dc, topMostPass, wnd.GetTopMost() || insideTopMost); if (clipChildren) dc.PopClippingRect(); dc.PopTransform(); }