void CColumnResizer::MoveWnd(int WndIdx, int x, int Width) { static const LMARGIN = -2; static const RMARGIN = 4; ASSERT(WndIdx >= 0 && WndIdx <= m_Parent.WndIdx); if (WndIdx == m_Parent.WndIdx) x -= GetHScroll(); else { x += LMARGIN; Width = Width - (LMARGIN + RMARGIN); } int Rows = m_WndList == NULL ? GetRowCount() : 1; for (int i = 0; i < Rows; i++) { CRect r; CWnd *wp = m_WndList == NULL ? GetWndList(i)[WndIdx] : m_WndList[WndIdx]; wp->GetWindowRect(r); wp->GetParent()->ScreenToClient(r); int PrevWidth = r.Width(); r.left = x; r.right = x + Width; wp->MoveWindow(r); // if control width changed, must invalidate, otherwise certain control // types paint incorrectly, e.g. static control with horiz. centered text if (r.Width() != PrevWidth && WndIdx != m_Parent.WndIdx) wp->Invalidate(FALSE); } }
void DisplayElement::Draw (DISPLAY_INT iScreenX, DISPLAY_INT iScreenY, WebRect *pViewport, WebGraphics *pGC) { DisplayElement *pChild = mpFirstChild; WebRect clip, saveClip, screenClip; WEBC_BOOL clipRestore = WEBC_FALSE; pGC->GetClip(&saveClip); clip.Set(&saveClip); if (GetOverflow() != DISPLAY_OVERFLOW_VISIBLE) //if (GetOverflow() == DISPLAY_OVERFLOW_HIDDEN) { GetClipRect(&screenClip); screenClip.Shift(iScreenX - mRect.left, iScreenY - mRect.top); if (!clip.Overlaps(&screenClip)) { // we're not visible, so neither are our children return; } clip.And(&screenClip); pGC->SetClip(&clip); clipRestore = WEBC_TRUE; } WebRect screenRect(mRect); screenRect.MoveTo(iScreenX, iScreenY); mScreenRect = screenRect; // April2013 - save the screenrect of last known draw and subtract boundaries of the display manager screenrect DisplayManager*pManager= this->GetManager(); if (pManager && pManager->mBrowser) pManager=pManager->mBrowser->GetDisplayManager(); if (pManager) { WebRect r; // printf("Not working all the way \n"); r=pManager->mScreenRect; mScreenRect.top -= r.top; mScreenRect.bottom -= r.top; mScreenRect.left -= r.left; mScreenRect.right -= r.left; } // April2013 - end save the screenrect of last known draw and subtract boundaries of the display manager screenrect // Start drawing // pGC->StartBuffer(); // Draw negative-z children while (pChild && (pChild->GetZIndex() < 0)) { if (pChild->mFlags & DISPLAY_FLAG_FIXED_POS) { pChild->Draw(pViewport->left + pChild->mRect.left, pViewport->top + pChild->mRect.top, pViewport, pGC); } else { pChild->Draw(iScreenX + pChild->mRect.left, iScreenY + pChild->mRect.top, pViewport, pGC); } pChild = pChild->mpNext; } // if I am visible if (screenRect.Overlaps(&clip)) { // Draw myself DrawThisOnly(iScreenX, iScreenY, pGC); } #if (INCLUDE_EXPERIMENTAL_DIV_SCROLLBARS) int xContentOffset=0; int yContentOffset=0; if (clipRestore && vScrollWidth() || hScrollWidth()) { WebRect contentClip; contentClip.Set(&clip); contentClip.SetHeight(contentClip.Height()-hScrollWidth()); contentClip.SetWidth(contentClip.Width()-vScrollWidth()); pGC->SetClip(&contentClip); if (GetHScroll()) { WebHScroll *pScroll = (WebHScroll *)GetHScroll(); xContentOffset=pScroll->GetPosition(); } if (GetVScroll()) { WebVScroll *pScroll = (WebVScroll *)GetVScroll(); yContentOffset=pScroll->GetPosition(); if (yContentOffset) { // If we have a y offset step i nto the content holder element // so we don't exclude the whole thing becuase it is out of our // range. // if (GetInlineContentHolder()) // pChild = GetInlineContentHolder()->mpFirstChild; ; } } } #endif // Draw positive-z children while (pChild) { #if (INCLUDE_EXPERIMENTAL_DIV_SCROLLBARS) if (pChild->IncludeInFlow() && pChild->mRect.bottom >= yContentOffset && pChild->mRect.right >= xContentOffset) { if (pChild->mFlags & DISPLAY_FLAG_FIXED_POS) { pChild->Draw(pViewport->left+pChild->mRect.left-xContentOffset, pViewport->top+pChild->mRect.top-yContentOffset, pViewport, pGC); } else { pChild->Draw(iScreenX + pChild->mRect.left-xContentOffset, iScreenY+pChild->mRect.top-yContentOffset, pViewport, pGC); } } #else if (pChild->mFlags & DISPLAY_FLAG_FIXED_POS) { pChild->Draw(pViewport->left + pChild->mRect.left, pViewport->top + pChild->mRect.top, pViewport, pGC); } else { pChild->Draw(iScreenX + pChild->mRect.left, iScreenY + pChild->mRect.top, pViewport, pGC); } #endif pChild = pChild->mpNext; } if (clipRestore) { pGC->SetClip(&saveClip); } #if (INCLUDE_EXPERIMENTAL_DIV_SCROLLBARS) if (clipRestore && vScrollWidth() || hScrollWidth()) { DisplayElement *pScroll; if (GetHScroll()) { pScroll = (WebHScroll *)GetHScroll(); pScroll->Draw(iScreenX + pScroll->mRect.left, iScreenY + pScroll->mRect.top, pViewport, pGC); } if (GetVScroll()) { pScroll = (WebVScroll *)GetVScroll(); pScroll->Draw(iScreenX + pScroll->mRect.left, iScreenY + pScroll->mRect.top, pViewport, pGC); } pGC->SetClip(&saveClip); } #endif // pGC->EndBuffer(); }