b=418494; use SOURCE instead of OVER when source has no transparency; r=stuart

This commit is contained in:
vladimir%pobox.com 2008-02-24 00:59:49 +00:00
Родитель 9c47e4823f
Коммит 80c2f5b82a
1 изменённых файлов: 17 добавлений и 0 удалений

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

@ -436,10 +436,15 @@ nsThebesImage::Draw(nsIRenderingContext &aContext,
return NS_OK; return NS_OK;
// otherwise // otherwise
gfxContext::GraphicsOperator op = ctx->CurrentOperator();
if (op == gfxContext::OPERATOR_OVER && mSinglePixelColor.a == 1.0)
ctx->SetOperator(gfxContext::OPERATOR_SOURCE);
ctx->SetColor(mSinglePixelColor); ctx->SetColor(mSinglePixelColor);
ctx->NewPath(); ctx->NewPath();
ctx->Rectangle(aDestRect, PR_TRUE); ctx->Rectangle(aDestRect, PR_TRUE);
ctx->Fill(); ctx->Fill();
ctx->SetOperator(op);
return NS_OK; return NS_OK;
} }
@ -553,11 +558,18 @@ nsThebesImage::Draw(nsIRenderingContext &aContext,
#endif #endif
} }
gfxContext::GraphicsOperator op = ctx->CurrentOperator();
if (op == gfxContext::OPERATOR_OVER && mFormat == gfxASurface::ImageFormatRGB24)
ctx->SetOperator(gfxContext::OPERATOR_SOURCE);
ctx->NewPath(); ctx->NewPath();
ctx->SetPattern(pat); ctx->SetPattern(pat);
ctx->Rectangle(destRect); ctx->Rectangle(destRect);
ctx->Fill(); ctx->Fill();
ctx->SetOperator(op);
ctx->SetColor(gfxRGBA(0,0,0,0));
return NS_OK; return NS_OK;
} }
@ -650,10 +662,15 @@ nsThebesImage::ThebesDrawTile(gfxContext *thebesContext,
thebesContext->SetPattern(&pat); thebesContext->SetPattern(&pat);
} }
gfxContext::GraphicsOperator op = thebesContext->CurrentOperator();
if (op == gfxContext::OPERATOR_OVER && mFormat == gfxASurface::ImageFormatRGB24)
thebesContext->SetOperator(gfxContext::OPERATOR_SOURCE);
thebesContext->NewPath(); thebesContext->NewPath();
thebesContext->Rectangle(targetRect, doSnap); thebesContext->Rectangle(targetRect, doSnap);
thebesContext->Fill(); thebesContext->Fill();
thebesContext->SetOperator(op);
thebesContext->SetColor(gfxRGBA(0,0,0,0)); thebesContext->SetColor(gfxRGBA(0,0,0,0));
return NS_OK; return NS_OK;