WEBC_BOOL DisplayManager::RectVisible (WebRect *pRect) { if (mViewRect.Overlaps(pRect)) { DisplayManager *parentManager = GetManager(); if (parentManager) { PresetWebRect rect(pRect); rect.And(&mViewRect); WebRect padding; GetPaddingWidth(&padding); DISPLAY_INT x = mRect.left, y = mRect.top; if (mpParent) { mpParent->GetDisplayPosition(this, &x, &y); } rect.Shift(x + padding.left - mViewRect.left, y + padding.top - mViewRect.top); return (parentManager->RectVisible(&rect)); } else { return (WEBC_TRUE); } } return (WEBC_FALSE); }
RECT CDUIIconTextItem::GetTextRect() { RECT rtBK = GetBKRect(); RECT rtIcon = GetIconRect(); RECT rtText = rtBK; rtText.left = rtIcon.right + GetPaddingWidth(); return rtText; }
void DisplayManager::UpdateViewport (void) { WebRect view; WebRect padding; WebRect vscrollRect; WebRect hscrollRect; GetPaddingWidth(&padding); view.Set (mRect.left + padding.left, mRect.top + padding.top, mRect.right - padding.right, mRect.bottom - padding.bottom); if (mpVScroll) { vscrollRect.Set (mRect.Width() - padding.right - webc_GetDefaultDisplayInt(WEBC_DEFAULT_SLIDER_WIDTH), padding.top, mRect.Width() - 1 - padding.right, mRect.Height() - 1 - padding.bottom); view.right -= webc_GetDefaultDisplayInt(WEBC_DEFAULT_SLIDER_WIDTH); if (mpHScroll) { hscrollRect.Set (padding.left, mRect.Height() - padding.bottom - webc_GetDefaultDisplayInt(WEBC_DEFAULT_SLIDER_WIDTH), mRect.Width() - padding.right - webc_GetDefaultDisplayInt(WEBC_DEFAULT_SLIDER_WIDTH), mRect.Height() - 1 - padding.bottom); vscrollRect.bottom -= webc_GetDefaultDisplayInt(WEBC_DEFAULT_SLIDER_WIDTH) - 1; view.bottom -= webc_GetDefaultDisplayInt(WEBC_DEFAULT_SLIDER_WIDTH); mpHScroll->Move(&hscrollRect); } mpVScroll->Move(&vscrollRect); } else { if (mpHScroll) { hscrollRect.Set (padding.left, mRect.Height() - padding.bottom - webc_GetDefaultDisplayInt(WEBC_DEFAULT_SLIDER_WIDTH), mRect.Width() - 1 - padding.right, mRect.Height() - 1 - padding.bottom); view.bottom -= webc_GetDefaultDisplayInt(WEBC_DEFAULT_SLIDER_WIDTH); mpHScroll->Move(&hscrollRect); } } view.MoveTo(mViewRect.left, mViewRect.top); SetViewport(&view); }
HTMLEventStatus DisplayManager::Event (HTMLEvent *pEvent) { WEBC_DEBUG_ReceiveEvent(this, pEvent); switch (pEvent->type) { case HTML_EVENT_FOCUS: return (HTML_EVENT_STATUS_CONTINUE); case HTML_EVENT_UNFOCUS: if (mpFocus) { return (RemoveFocus(mpFocus)); } return (HTML_EVENT_STATUS_CONTINUE); case HTML_EVENT_MOUSEDOWN: case HTML_EVENT_MOUSEOVER: case HTML_EVENT_MOUSEMOVE: case HTML_EVENT_MOUSEOUT: case HTML_EVENT_MOUSEUP: case HTML_EVENT_CLICK: case HTML_EVENT_DBLCLICK: { // Adjust mouse coordinates from our parent DisplayManager to our viewport WebRect padding; GetPaddingWidth(&padding); DISPLAY_INT x = mRect.left, y = mRect.top; if (mpParent) { mpParent->GetDisplayPosition(this, &x, &y); } pEvent->data.position.x -= x + padding.left; pEvent->data.position.y -= y + padding.top; break; } default: break; }; // Now hand off to the event dispatcher return (DispatchEvent(pEvent)); }
void DisplayManager::InvalidateViewportRegion (WebRect* pDirty) { if (mViewRect.Overlaps(pDirty)) { WebRect padding; GetPaddingWidth(&padding); WebRect dirty(*pDirty); dirty.And(&mViewRect); DisplayManager* myManager = this->GetManager(); WEBC_BOOL addRect = (!mpParent && !myManager); #ifdef WEBC_BUFFER_SCROLLING if (mManagerFlags & MANAGER_FLAG_BUFFER_SCROLL) { addRect = WEBC_TRUE; } #endif if (addRect) { SetManagerFlag(MANAGER_FLAG_DIRTY); AddDirtyRect(&dirty); } if (mpParent) { dirty.Shift((mRect.left + padding.left) - mViewRect.left, (mRect.top + padding.top) - mViewRect.top); mpParent->InvalidateChild(this, &dirty); } else if (myManager) { dirty.Shift((mRect.left + padding.left) - mViewRect.left, (mRect.top + padding.top) - mViewRect.top); myManager->InvalidateViewportRegion(&dirty); } } }
void DisplayManager::DrawThisOnly (DISPLAY_INT x, DISPLAY_INT y, WebGraphics *gc) { DISPLAY_INT scrollLeft = (mpHScroll)? mpHScroll->GetPosition() : mViewRect.left; DISPLAY_INT scrollTop = (mpVScroll)? mpVScroll->GetPosition() : mViewRect.top; mViewRect.MoveTo(scrollLeft, scrollTop); WebRect padding; GetPaddingWidth(&padding); // find our viewport rect in screen coordinates WebRect screenRect(mRect); screenRect.MoveTo(x,y); WebRect screenView(screenRect); screenView.Shift(padding.left, padding.top); screenView.SizeTo(mViewRect.Width(), mViewRect.Height()); WebRect saveClip; gc->GetClip(&saveClip); WebRect screenDirty(screenView); if (saveClip.Overlaps(&screenDirty)) { screenDirty.And(&saveClip); #ifdef WEBC_BUFFER_SCROLLING if ((GetManagerFlags() & MANAGER_FLAG_BUFFER_SCROLL) && mScrollBuffer) { if (GetManagerFlags() & MANAGER_FLAG_BUFFER_DIRTY) { UpdateScrollBuffer(); } // instead of invoking the Draw method of mRoot, just copy the contents of the // buffer at this location. gc->CopyBufferRegion ( &screenDirty, mScrollBuffer, screenDirty.left - screenView.left + (mViewRect.left % mViewRect.Width()), screenDirty.top - screenView.top + (mViewRect.top % mViewRect.Height())); } else { #endif gc->SetClip(&screenDirty); if (mRoot.Get()) { mRoot.Get()->Draw(screenView.left + mRoot.Get()->mRect.left - scrollLeft, screenView.top + mRoot.Get()->mRect.top - scrollTop, &screenView, gc); } #ifdef WEBC_BUFFER_SCROLLING } #endif gc->SetClip(&saveClip); } // draw the little gray rectangle if (mpVScroll && mpHScroll && webc_GetDefaultBoolean(WEBC_DEFAULT_DRAW_SCROLL_CORNER)) { WebRect box; WebColor c = gc->RGBToColor(webc_GetDefaultColor(WEBC_DEFAULT_SCROLL_CORNER_COLOR)); box.SetSizeAndPosition(screenView.right + 1, screenView.bottom + 1, mpVScroll->Width(), mpHScroll->Height()); gc->Rectangle(&box, c, c, 1); } }