void PaintBarArea(Draw& w, Ctrl *x, const Value& look, int bottom) { Ctrl *tc = x->GetTopCtrl(); Rect sr = tc->GetScreenRect(); sr.bottom = Nvl(bottom, tc->GetScreenView().top); sr.Offset(-x->GetScreenRect().TopLeft()); ChPaint(w, sr, look); }
Ctrl *Ctrl::FindBestOpaque(const Rect& clip) { GuiLock __; Ctrl *w = NULL; for(Ctrl *q = GetFirstChild(); q; q = q->GetNext()) { if(q->IsVisible() && GetScreenView().Contains(q->GetScreenRect())) { Rect sw = q->GetScreenView(); if((q->GetOpaqueRect() + sw.TopLeft()).Contains(clip)) { w = q; Ctrl *h = q->FindBestOpaque(clip); if(h) w = h; } else if(q->GetScreenView().Contains(clip)) w = q->FindBestOpaque(clip); else if(q->GetScreenRect().Intersects(clip)) w = NULL; } } return w; }
Rect Ctrl::GetClippedView() { GuiLock __; Rect sv = GetScreenView(); Rect view = sv; Ctrl *q = parent; Ctrl *w = this; while(q) { view &= w->InFrame() ? q->GetScreenRect() : q->GetScreenView(); w = q; q = q->parent; } return view - GetScreenRect().TopLeft(); }
void DrawDragRect(Ctrl& q, const Rect& rect1, const Rect& rect2, const Rect& clip, int n, Color color, int type, int animation) { Ctrl *top = q.GetTopCtrl(); if(top) { Point off = q.GetScreenView().TopLeft(); DrawDragRectInfo f; f.rect1 = rect1.Offseted(off); f.rect2 = rect2.Offseted(off); f.clip = (clip & q.GetSize()).Offseted(off); f.n = n; f.type = type; f.animation = animation; DrawDragRect(*top, f); Ctrl::SyncClient(); Ctrl::Output(); } }