From 5764e3264d38ed030b7ff28b0e80d1bcd83e433c Mon Sep 17 00:00:00 2001 From: "vladimir%pobox.com" Date: Wed, 8 Mar 2006 23:54:47 +0000 Subject: [PATCH] b=328337, black flash often when repainting window (gtk2 fix), r=roc git-svn-id: svn://10.0.0.236/trunk@192030 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/widget/src/gtk2/nsWindow.cpp | 46 ++++++++++++++++------------ 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/mozilla/widget/src/gtk2/nsWindow.cpp b/mozilla/widget/src/gtk2/nsWindow.cpp index bd48ab06892..d0cf7959612 100644 --- a/mozilla/widget/src/gtk2/nsWindow.cpp +++ b/mozilla/widget/src/gtk2/nsWindow.cpp @@ -1488,29 +1488,35 @@ nsWindow::OnExposeEvent(GtkWidget *aWidget, GdkEventExpose *aEvent) DispatchEvent(&event, status); #ifdef MOZ_CAIRO_GFX - ctx->SetOperator(gfxContext::OPERATOR_SOURCE); - if (!translucent) { - ctx->PopGroupToSource(); - ctx->Paint(); - } else { - nsRefPtr pattern = ctx->PopGroup(); - ctx->SetPattern(pattern); - ctx->Paint(); + if (status != nsEventStatus_eIgnore) { + ctx->SetOperator(gfxContext::OPERATOR_SOURCE); + if (!translucent) { + ctx->PopGroupToSource(); + ctx->Paint(); + } else { + nsRefPtr pattern = ctx->PopGroup(); + ctx->SetPattern(pattern); + ctx->Paint(); - nsRefPtr img = - new gfxImageSurface(gfxImageSurface::ImageFormatA8, - collapsedRect.width, collapsedRect.height); - img->SetDeviceOffset(-collapsedRect.x, -collapsedRect.y); + nsRefPtr img = + new gfxImageSurface(gfxImageSurface::ImageFormatA8, + collapsedRect.width, collapsedRect.height); + img->SetDeviceOffset(-collapsedRect.x, -collapsedRect.y); + + nsRefPtr imgCtx = new gfxContext(img); + imgCtx->SetPattern(pattern); + imgCtx->SetOperator(gfxContext::OPERATOR_SOURCE); + imgCtx->Paint(); - nsRefPtr imgCtx = new gfxContext(img); - imgCtx->SetPattern(pattern); - imgCtx->SetOperator(gfxContext::OPERATOR_SOURCE); - imgCtx->Paint(); - - UpdateTranslucentWindowAlphaInternal(nsRect(collapsedRect.x, collapsedRect.y, - collapsedRect.width, collapsedRect.height), - img->Data(), img->Stride()); + UpdateTranslucentWindowAlphaInternal(nsRect(collapsedRect.x, collapsedRect.y, + collapsedRect.width, collapsedRect.height), + img->Data(), img->Stride()); + } + } else { + // ignore + ctx->PopGroup(); } + ctx->Restore(); #endif