Пример #1
0
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);
}
Пример #2
0
RECT CDUIIconTextItem::GetTextRect()
{
	RECT rtBK = GetBKRect();
	RECT rtIcon = GetIconRect();

	RECT rtText = rtBK;
	rtText.left = rtIcon.right + GetPaddingWidth();
	return rtText;
}
Пример #3
0
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);
}
Пример #4
0
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));
}
Пример #5
0
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);
		}
	}
}
Пример #6
0
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);
	}
}