Added new method to control whether ViewManager and ViewManager2 double-buffer when rendering. bug 49743 a=roc+moz@cs.cmu.edu r=peterl@netscape.com

This commit is contained in:
kmcclusk%netscape.com 2000-09-26 05:04:53 +00:00
parent 094af23a1f
commit dd45327b43
5 changed files with 52 additions and 2 deletions

View File

@ -497,6 +497,17 @@ public:
*/
NS_IMETHOD CacheWidgetChanges(PRBool aCache)=0;
/**
* Control double buffering of the display. If double buffering
* is enabled the viewmanager is allowed to render to an offscreen
* drawing surface before copying to the display in order to prevent
* flicker. If it is disabled all rendering will appear directly on the
* the display. The display is double buffered by default.
* @param aDoubleBuffer PR_TRUE to enable double buffering
* PR_FALSE to disable double buffering
*/
NS_IMETHOD AllowDoubleBuffering(PRBool aDoubleBuffer)=0;
};
//when the refresh happens, should it be double buffered?

View File

@ -391,7 +391,7 @@ nsViewManager::nsViewManager()
mX = 0;
mY = 0;
mCachingWidgetChanges = 0;
mAllowDoubleBuffering = PR_TRUE;
}
nsViewManager::~nsViewManager()
@ -702,6 +702,11 @@ void nsViewManager::Refresh(nsIView *aView, nsIRenderingContext *aContext, nsIRe
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
#endif
if (PR_FALSE == mAllowDoubleBuffering) {
// Turn off double-buffering of the display
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
}
if (nsnull == aContext)
{
localcx = getter_AddRefs(CreateRenderingContext(*aView));
@ -823,6 +828,11 @@ void nsViewManager::Refresh(nsIView *aView, nsIRenderingContext *aContext, const
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
#endif
if (PR_FALSE == mAllowDoubleBuffering) {
// Turn off double-buffering of the display
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
}
if (nsnull == aContext)
{
localcx = getter_AddRefs(CreateRenderingContext(*aView));
@ -3619,6 +3629,13 @@ nsViewManager::CacheWidgetChanges(PRBool aCache)
return NS_OK;
}
NS_IMETHODIMP
nsViewManager::AllowDoubleBuffering(PRBool aDoubleBuffer)
{
mAllowDoubleBuffering = aDoubleBuffer;
return NS_OK;
}
nsresult
nsViewManager::ProcessWidgetChanges(nsIView* aView)
{

View File

@ -159,6 +159,7 @@ public:
NS_IMETHOD IsCachingWidgetChanges(PRBool* aCaching);
NS_IMETHOD CacheWidgetChanges(PRBool aCache);
NS_IMETHOD AllowDoubleBuffering(PRBool aDoubleBuffer);
protected:
virtual ~nsViewManager();
@ -371,6 +372,7 @@ public:
protected:
nscoord mX;
nscoord mY;
PRBool mAllowDoubleBuffering;
#ifdef NS_VM_PERF_METRICS
MOZ_TIMER_DECLARE(mWatch) // Measures compositing+paint time for current document

View File

@ -156,7 +156,7 @@ nsViewManager2::nsViewManager2()
mX = 0;
mY = 0;
mCachingWidgetChanges = 0;
mAllowDoubleBuffering = PR_TRUE;
}
nsViewManager2::~nsViewManager2()
@ -490,6 +490,11 @@ void nsViewManager2::Refresh(nsIView *aView, nsIRenderingContext *aContext, nsIR
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
#endif
if (PR_FALSE == mAllowDoubleBuffering) {
// Turn off double-buffering of the display
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
}
if (nsnull == aContext)
{
localcx = getter_AddRefs(CreateRenderingContext(*aView));
@ -611,6 +616,11 @@ void nsViewManager2::Refresh(nsIView *aView, nsIRenderingContext *aContext, cons
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
#endif
if (PR_FALSE == mAllowDoubleBuffering) {
// Turn off double-buffering of the display
aUpdateFlags &= ~NS_VMREFRESH_DOUBLE_BUFFER;
}
if (nsnull == aContext)
{
localcx = getter_AddRefs(CreateRenderingContext(*aView));
@ -2860,6 +2870,7 @@ nsViewManager2::IsCachingWidgetChanges(PRBool* aCaching)
return NS_OK;
}
NS_IMETHODIMP
nsViewManager2::CacheWidgetChanges(PRBool aCache)
{
@ -2880,6 +2891,13 @@ nsViewManager2::CacheWidgetChanges(PRBool aCache)
return NS_OK;
}
NS_IMETHODIMP
nsViewManager2::AllowDoubleBuffering(PRBool aDoubleBuffer)
{
mAllowDoubleBuffering = aDoubleBuffer;
return NS_OK;
}
nsresult
nsViewManager2::ProcessWidgetChanges(nsIView* aView)
{

View File

@ -157,6 +157,7 @@ public:
NS_IMETHOD IsCachingWidgetChanges(PRBool* aCaching);
NS_IMETHOD CacheWidgetChanges(PRBool aCache);
NS_IMETHOD AllowDoubleBuffering(PRBool aDoubleBuffer);
protected:
virtual ~nsViewManager2();
@ -369,6 +370,7 @@ public:
protected:
nscoord mX;
nscoord mY;
PRBool mAllowDoubleBuffering;
#ifdef NS_VM_PERF_METRICS
MOZ_TIMER_DECLARE(mWatch) // Measures compositing+paint time for current document