Bug 489718 - image-rendering and text-rendering hints should operate when clipping. r=longsonr

This commit is contained in:
Ryo Onodera 2009-04-24 14:11:03 +01:00
Родитель 00d26a8070
Коммит dbaa4b4a99
2 изменённых файлов: 26 добавлений и 20 удалений

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

@ -326,6 +326,15 @@ nsSVGGlyphFrame::PaintSVG(nsSVGRenderState *aContext,
gfxContext *gfx = aContext->GetGfxContext();
PRUint16 renderMode = aContext->GetRenderMode();
switch (GetStyleSVG()->mTextRendering) {
case NS_STYLE_TEXT_RENDERING_OPTIMIZESPEED:
gfx->SetAntialiasMode(gfxContext::MODE_ALIASED);
break;
default:
gfx->SetAntialiasMode(gfxContext::MODE_COVERAGE);
break;
}
if (renderMode != nsSVGRenderState::NORMAL) {
gfxMatrix matrix = gfx->CurrentMatrix();
@ -340,7 +349,6 @@ nsSVGGlyphFrame::PaintSVG(nsSVGRenderState *aContext,
gfx->SetFillRule(gfxContext::FILL_RULE_WINDING);
if (renderMode == nsSVGRenderState::CLIP_MASK) {
gfx->SetAntialiasMode(gfxContext::MODE_ALIASED);
gfx->SetColor(gfxRGBA(1.0f, 1.0f, 1.0f, 1.0f));
FillCharacters(&iter, gfx);
} else {

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

@ -435,29 +435,11 @@ nsSVGPathGeometryFrame::Render(nsSVGRenderState *aContext)
PRUint16 renderMode = aContext->GetRenderMode();
/* save/pop the state so we don't screw up the xform */
/* save/restore the state so we don't screw up the xform */
gfx->Save();
GeneratePath(gfx);
if (renderMode != nsSVGRenderState::NORMAL) {
gfx->Restore();
if (GetClipRule() == NS_STYLE_FILL_RULE_EVENODD)
gfx->SetFillRule(gfxContext::FILL_RULE_EVEN_ODD);
else
gfx->SetFillRule(gfxContext::FILL_RULE_WINDING);
if (renderMode == nsSVGRenderState::CLIP_MASK) {
gfx->SetAntialiasMode(gfxContext::MODE_ALIASED);
gfx->SetColor(gfxRGBA(1.0f, 1.0f, 1.0f, 1.0f));
gfx->Fill();
gfx->NewPath();
}
return;
}
switch (GetStyleSVG()->mShapeRendering) {
case NS_STYLE_SHAPE_RENDERING_OPTIMIZESPEED:
case NS_STYLE_SHAPE_RENDERING_CRISPEDGES:
@ -468,6 +450,22 @@ nsSVGPathGeometryFrame::Render(nsSVGRenderState *aContext)
break;
}
if (renderMode != nsSVGRenderState::NORMAL) {
if (GetClipRule() == NS_STYLE_FILL_RULE_EVENODD)
gfx->SetFillRule(gfxContext::FILL_RULE_EVEN_ODD);
else
gfx->SetFillRule(gfxContext::FILL_RULE_WINDING);
if (renderMode == nsSVGRenderState::CLIP_MASK) {
gfx->SetColor(gfxRGBA(1.0f, 1.0f, 1.0f, 1.0f));
gfx->Fill();
gfx->NewPath();
}
gfx->Restore();
return;
}
if (SetupCairoFill(gfx)) {
gfx->Fill();
}