Created explicit pointers to offscreen and onscreen rendering contexts.
Stop passing NS_COPYBITS_TO_BACK_BUFFER flag.
This commit is contained in:
kmcclusk%netscape.com 1999-08-20 22:48:56 +00:00
Родитель f59b360041
Коммит 0d24534039
2 изменённых файлов: 40 добавлений и 15 удалений

Просмотреть файл

@ -674,7 +674,7 @@ NS_IMETHODIMP nsView :: Paint(nsIRenderingContext& rc, const nsRect& rect,
NS_RELEASE(blender);
NS_RELEASE(dx);
rc.CopyOffScreenBits(surf, 0, 0, brect, NS_COPYBITS_XFORM_DEST_VALUES | NS_COPYBITS_TO_BACK_BUFFER);
rc.CopyOffScreenBits(surf, 0, 0, brect, NS_COPYBITS_XFORM_DEST_VALUES);
}
rc.DestroyDrawingSurface(surf);

Просмотреть файл

@ -391,6 +391,10 @@ NS_IMETHODIMP nsViewManager :: ResetScrolling(void)
void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, nsIRegion *region, PRUint32 aUpdateFlags)
{
nsRect wrect;
nsIRenderingContext *onscreencx = nsnull; // on screen
nsIRenderingContext *offscreencx = nsnull; // secondary buffer
// the localcx points to the (offscreencx) if double buffering,
// otherwise it points to (onscreencx)
nsIRenderingContext *localcx = nsnull;
nsDrawingSurface ds = nsnull;
@ -414,13 +418,16 @@ void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, nsI
if (nsnull == aContext)
{
localcx = CreateRenderingContext(*aView);
onscreencx = localcx;
//couldn't get rendering context. this is ok at init time atleast
if (nsnull == localcx)
return;
}
else
else {
localcx = aContext;
onscreencx = aContext;
}
if (aUpdateFlags & NS_VMREFRESH_DOUBLE_BUFFER)
{
@ -433,6 +440,8 @@ void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, nsI
NS_RELEASE(widget);
localcx = CreateRenderingContext(*aView);
offscreencx = localcx;
ds = GetDrawingSurface(*localcx, wrect);
}
@ -450,13 +459,15 @@ void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, nsI
if ((aUpdateFlags & NS_VMREFRESH_DOUBLE_BUFFER) && ds)
#ifdef NEW_COMPOSITOR
localcx->CopyOffScreenBits(ds, wrect.x, wrect.y, wrect, 0);
onscreencx->CopyOffScreenBits(ds, wrect.x, wrect.y, wrect, 0);
#else
localcx->CopyOffScreenBits(ds, wrect.x, wrect.y, wrect, NS_COPYBITS_USE_SOURCE_CLIP_REGION);
onscreencx->CopyOffScreenBits(ds, wrect.x, wrect.y, wrect, NS_COPYBITS_USE_SOURCE_CLIP_REGION);
#endif
if (localcx != aContext)
NS_RELEASE(localcx);
if (onscreencx != aContext)
NS_RELEASE(onscreencx);
NS_IF_RELEASE(offscreencx);
// Subtract the area we just painted from the dirty region
if ((nsnull != region) && !region->IsEmpty())
@ -478,6 +489,10 @@ void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, nsI
void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, const nsRect *rect, PRUint32 aUpdateFlags)
{
nsRect wrect, brect;
nsIRenderingContext *onscreencx = nsnull; // on screen
nsIRenderingContext *offscreencx = nsnull; // secondary buffer
// the localcx points to the (offscreencx) if double buffering,
// otherwise it points to (onscreencx)
nsIRenderingContext *localcx = nsnull;
nsDrawingSurface ds = nsnull;
@ -500,16 +515,20 @@ void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, con
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
#endif
if (nsnull == aContext)
{
localcx = CreateRenderingContext(*aView);
onscreencx = localcx;
//couldn't get rendering context. this is ok if at startup
if (nsnull == localcx)
return;
}
else
else {
localcx = aContext;
onscreencx = aContext;
}
if (aUpdateFlags & NS_VMREFRESH_DOUBLE_BUFFER)
{
@ -523,6 +542,9 @@ void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, con
NS_RELEASE(widget);
//Create a new rendering context for the background buffer.
localcx = CreateRenderingContext(*aView);
offscreencx = localcx;
ds = GetDrawingSurface(*localcx, wrect);
}
@ -538,21 +560,24 @@ void nsViewManager :: Refresh(nsIView *aView, nsIRenderingContext *aContext, con
#ifdef NEW_COMPOSITOR
{
#ifdef XP_MAC
localcx->CopyOffScreenBits(ds, wrect.x, wrect.y, wrect, 0);
onscreencx->CopyOffScreenBits(ds, wrect.x, wrect.y, wrect, 0);
#else
#ifdef XP_UNIX
localcx->SetClipRect(trect, nsClipCombine_kReplace, result);
onscreencx->SetClipRect(trect, nsClipCombine_kReplace, result);
#endif //unix
localcx->CopyOffScreenBits(ds, brect.x, brect.y, brect, 0);
onscreencx->CopyOffScreenBits(ds, brect.x, brect.y, brect, 0);
#endif //mac
}
#else
localcx->CopyOffScreenBits(ds, wrect.x, wrect.y, wrect, NS_COPYBITS_USE_SOURCE_CLIP_REGION);
onscreencx->CopyOffScreenBits(ds, wrect.x, wrect.y, wrect, NS_COPYBITS_USE_SOURCE_CLIP_REGION);
#endif
if (localcx != aContext)
NS_RELEASE(localcx);
if (onscreencx != aContext)
NS_RELEASE(onscreencx);
NS_IF_RELEASE(offscreencx);
// Subtract the area we just painted from the dirty region
nsIRegion *dirtyRegion;
@ -1082,7 +1107,7 @@ void nsViewManager :: RenderViews(nsIView *aRootView, nsIRenderingContext& aRC,
mBlueCX->Translate(localrect.x, localrect.y);
//buffer swap.
aRC.CopyOffScreenBits(gOffScreen, 0, 0, localrect, NS_COPYBITS_XFORM_DEST_VALUES | NS_COPYBITS_TO_BACK_BUFFER);
aRC.CopyOffScreenBits(gOffScreen, 0, 0, localrect, NS_COPYBITS_XFORM_DEST_VALUES);
}
else
{