Index: src/gpu/SkGpuDevice.cpp |
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp |
index 52dc5a7351af856c08d7c88446a74ebc6351f9c3..ca86b84a20ff33985dfe0fddbd5da11b4d9bce99 100644 |
--- a/src/gpu/SkGpuDevice.cpp |
+++ b/src/gpu/SkGpuDevice.cpp |
@@ -12,8 +12,7 @@ |
#include "GrContext.h" |
#include "GrBitmapTextContext.h" |
-#include "GrGpu.h" |
-#include "GrDrawTargetCaps.h" |
+ |
#include "SkGrTexturePixelRef.h" |
#include "SkColorFilter.h" |
@@ -851,6 +850,14 @@ void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, |
return; |
} |
+ // can we cheat, and treat a thin stroke as a hairline w/ coverage |
+ // if we can, we draw lots faster (raster device does this same test) |
+ SkScalar hairlineCoverage; |
+ bool doHairLine = SkDrawTreatAsHairline(paint, fContext->getMatrix(), &hairlineCoverage); |
+ if (doHairLine) { |
+ grPaint.setCoverage(SkScalarRoundToInt(hairlineCoverage * grPaint.getCoverage())); |
+ } |
+ |
// If we have a prematrix, apply it to the path, optimizing for the case |
// where the original path can in fact be modified in place (even though |
// its parameter type is const). |
@@ -880,6 +887,10 @@ void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, |
pathPtr = &effectPath; |
} |
+ if (!pathEffect && doHairLine) { |
+ stroke.setHairlineStyle(); |
+ } |
+ |
if (paint.getMaskFilter()) { |
if (!stroke.isHairlineStyle()) { |
if (stroke.applyToPath(&tmpPath, *pathPtr)) { |