Proposed fix to new stroking/path render selection system
https://codereview.appspot.com/7075043/ git-svn-id: http://skia.googlecode.com/svn/trunk@7076 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
2b57dc6bb2
commit
eb928ea49a
@ -1063,24 +1063,15 @@ void GrContext::drawPath(const GrPaint& paint, const SkPath& path, const SkStrok
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const SkPath* pathPtr = &path;
|
|
||||||
SkPath tmpPath;
|
|
||||||
SkStrokeRec strokeRec(stroke);
|
|
||||||
if (!strokeRec.isHairlineStyle()) {
|
|
||||||
if (strokeRec.applyToPath(&tmpPath, *pathPtr)) {
|
|
||||||
pathPtr = &tmpPath;
|
|
||||||
strokeRec.setFillStyle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SkRect ovalRect;
|
SkRect ovalRect;
|
||||||
if (!pathPtr->isInverseFillType() && pathPtr->isOval(&ovalRect)) {
|
if ((stroke.isHairlineStyle() || stroke.isFillStyle()) && !path.isInverseFillType() &&
|
||||||
SkScalar width = strokeRec.isHairlineStyle() ? 0 : -SK_Scalar1;
|
path.isOval(&ovalRect)) {
|
||||||
|
SkScalar width = stroke.isHairlineStyle() ? 0 : -SK_Scalar1;
|
||||||
this->drawOval(paint, ovalRect, width);
|
this->drawOval(paint, ovalRect, width);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->internalDrawPath(paint, *pathPtr, strokeRec);
|
this->internalDrawPath(paint, path, stroke);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GrContext::internalDrawPath(const GrPaint& paint, const SkPath& path, const SkStrokeRec& stroke) {
|
void GrContext::internalDrawPath(const GrPaint& paint, const SkPath& path, const SkStrokeRec& stroke) {
|
||||||
@ -1109,7 +1100,25 @@ void GrContext::internalDrawPath(const GrPaint& paint, const SkPath& path, const
|
|||||||
GrPathRendererChain::DrawType type = prAA ? GrPathRendererChain::kColorAntiAlias_DrawType :
|
GrPathRendererChain::DrawType type = prAA ? GrPathRendererChain::kColorAntiAlias_DrawType :
|
||||||
GrPathRendererChain::kColor_DrawType;
|
GrPathRendererChain::kColor_DrawType;
|
||||||
|
|
||||||
GrPathRenderer* pr = this->getPathRenderer(path, stroke, target, true, type);
|
const SkPath* pathPtr = &path;
|
||||||
|
SkPath tmpPath;
|
||||||
|
SkStrokeRec strokeRec(stroke);
|
||||||
|
|
||||||
|
// Try a 1st time without stroking the path and without allowing the SW renderer
|
||||||
|
GrPathRenderer* pr = this->getPathRenderer(*pathPtr, strokeRec, target, false, type);
|
||||||
|
|
||||||
|
if (NULL == pr) {
|
||||||
|
if (!strokeRec.isHairlineStyle()) {
|
||||||
|
// It didn't work the 1st time, so try again with the stroked path
|
||||||
|
if (strokeRec.applyToPath(&tmpPath, *pathPtr)) {
|
||||||
|
pathPtr = &tmpPath;
|
||||||
|
strokeRec.setFillStyle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// This time, allow SW renderer
|
||||||
|
pr = this->getPathRenderer(*pathPtr, strokeRec, target, true, type);
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == pr) {
|
if (NULL == pr) {
|
||||||
#if GR_DEBUG
|
#if GR_DEBUG
|
||||||
GrPrintf("Unable to find path renderer compatible with path.\n");
|
GrPrintf("Unable to find path renderer compatible with path.\n");
|
||||||
@ -1117,7 +1126,7 @@ void GrContext::internalDrawPath(const GrPaint& paint, const SkPath& path, const
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr->drawPath(path, stroke, target, prAA);
|
pr->drawPath(*pathPtr, strokeRec, target, prAA);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user