Exemple #1
0
void CWsDirectScreenAccess::GetRegion(TInt aNumRects)
	{
#if defined(_DEBUG)
	if (iStatus!=EDirectStatusInitialising)
		iWsOwner->PPanic(EWservPanicDirectMisuse);
#endif
	STACK_REGION region;
	iWin->GenerateTopRegion(region);
	const TInt regionCount=region.Count();
	if (region.Count()==aNumRects)
		{
		iVisible.Copy(region);
		if (iVisible.CheckError())
			{
			iStatus=EDirectStatusNone;
			SetReply(KErrNotReady);
			}
		else
			{
			TPtrC8 rectList(REINTERPRET_CAST(const TUint8*,region.RectangleList()),region.Count()*sizeof(TRect));
			CWsClient::ReplyBuf(rectList);
			iStatus=EDirectStatusRunning;
			Initiate();
			iMsgQueue->Started();
			SetReply(KMaxTInt);
			}
		}
void CWsBackedUpWindow::Scroll(const TRect &aClipRect, const TPoint &aOffset,const TRect &aRect)
	{
	TRect winBorder=TRect(iWsWin->Size());
	TRect clipRect=aClipRect;
	TRect srcRect = aRect;		
	clipRect.Intersection(winBorder);	
	if (!clipRect.IsEmpty())
		{	// If we have to do something (a visible part will change)
		srcRect.Intersection(clipRect);

		STACK_REGION regionToClear;
		regionToClear.AddRect(aRect);
		regionToClear.SubRect(srcRect);
		regionToClear.Offset(aOffset);
		
		ActivateGc();
		iBitGc->SetClippingRect(clipRect);
		iBitGc->SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
		iBitGc->CopyRect(aOffset,srcRect);				
		for (TInt k=0;k<regionToClear.Count();k++)
			{
			iBitGc->Clear(regionToClear[k]);
			}
		iBitGc->SetClippingRect(winBorder);
		iBitGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
		TRegionFix<1> fixRegion(iWsWin->AbsRect());
		UpdateScreen(fixRegion);
		regionToClear.Close();
		}
	}
Exemple #3
0
void CWsDirectScreenAccess::Request(TInt handle)
	{
	if (iStatus!=EDirectStatusNone)
		{
		if (iStatus==EDirectStatusCompleted)
			{
			iMsgQueue->Cancel();
			}
		else
			{
			iWsOwner->PPanic(EWservPanicDirectMisuse);
			}
		}
	iWsOwner->HandleToClientWindow(handle,&iWin);
	iScreen=iWin->Screen();
	STACK_REGION region;
	iWin->GenerateTopRegion(region);
	const TInt regionCount=region.Count();
	region.Close();
	SetReply(regionCount);
	iStatus=EDirectStatusInitialising;
	}