Xvnc with RENDER - almost working

Peter Åstrand astrand at cendio.se
Thu Mar 31 07:26:16 PST 2005


On Thu, 31 Mar 2005, Tim Waugh wrote:

>> I've been able to reproduce this problem now. For me, it only happens in
>> the GNOME environment, not in KDE. Xvnc gives error messages like:

>>   if ((xDst < 0) || (yDst < 0))
>>       return;
>
> Well, that removes the 'striping' effect, but instead just large
> regions don't get repainted now. :-/

I discovered that myself a few minutes ago :) It seems to help to call the 
original function, even though xDst is negative. Like this:


void vncHooksComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
 		       PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask,
 		       INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)
{
   ScreenPtr pScreen = pDst->pDrawable->pScreen;
   vncHooksScreenPtr vncHooksScreen = 
((vncHooksScreenPtr)pScreen->devPrivates[vncHooksScreenIndex].ptr);
   BoxRec box;
   PictureScreenPtr ps = GetPictureScreen(pScreen);

   if ((xDst >= 0) && (yDst >= 0)) {
       box.x1 = pDst->pDrawable->x + xDst;
       box.y1 = pDst->pDrawable->y + yDst;
       box.x2 = box.x1 + width;
       box.y2 = box.y1 + height;

       RegionHelper changed(pScreen, &box, 0);
       vncHooksScreen->desktop->add_changed(changed.reg);
   }

   ps->Composite = vncHooksScreen->Composite;
   (*ps->Composite)(op, pSrc, pMask, pDst, xSrc, ySrc,
 		   xMask, yMask, xDst, yDst, width, height);
   ps->Composite = vncHooksComposite;
}

-- 
Peter Åstrand		Chief Developer
Cendio			www.thinlinc.com
Teknikringen 3		www.cendio.se
583 30 Linköping        Phone: +46-13-21 46 00


More information about the xorg mailing list