export SkDraw::ComputeRectType() and share that with SkGpuDevice



git-svn-id: http://skia.googlecode.com/svn/trunk@1055 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 0256f3b..4cc068d 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -685,7 +685,7 @@
         paint.getStrokeMiter() < SK_ScalarSqrt2) {
         return false;
     }
-
+    
     SkASSERT(matrix.rectStaysRect());
     SkPoint pt = { paint.getStrokeWidth(), paint.getStrokeWidth() };
     matrix.mapVectors(strokeSize, &pt, 1);
@@ -694,12 +694,33 @@
     return true;
 }
 
-enum RectType {
-    kHair_RectType,
-    kFill_RectType,
-    kStroke_RectType,
-    kPath_RectType
-};
+SkDraw::RectType SkDraw::ComputeRectType(const SkPaint& paint,
+                                         const SkMatrix& matrix,
+                                         SkPoint* strokeSize) {
+    RectType rtype;
+    const SkScalar width = paint.getStrokeWidth();
+    const bool zeroWidth = (0 == width);
+    SkPaint::Style style = paint.getStyle();
+    
+    if ((SkPaint::kStrokeAndFill_Style == style) && zeroWidth) {
+        style = SkPaint::kFill_Style;
+    }
+    
+    if (paint.getPathEffect() || paint.getMaskFilter() ||
+        paint.getRasterizer() || !matrix.rectStaysRect() ||
+        SkPaint::kStrokeAndFill_Style == style) {
+        rtype = kPath_RectType;
+    } else if (SkPaint::kFill_Style == style) {
+        rtype = kFill_RectType;
+    } else if (zeroWidth) {
+        rtype = kHair_RectType;
+    } else if (easy_rect_join(paint, matrix, strokeSize)) {
+        rtype = kStroke_RectType;
+    } else {
+        rtype = kPath_RectType;
+    }
+    return rtype;
+}
 
 void SkDraw::drawRect(const SkRect& rect, const SkPaint& paint) const {
     SkDEBUGCODE(this->validate();)
@@ -710,35 +731,15 @@
         return;
     }
 
-    RectType rtype;
-    const SkScalar width = paint.getStrokeWidth();
-    bool zeroWidth = (0 == width);
-    SkPaint::Style style = paint.getStyle();
     SkPoint strokeSize;
+    RectType rtype = ComputeRectType(paint, *fMatrix, &strokeSize);
 
-    if ((SkPaint::kStrokeAndFill_Style == style) && zeroWidth) {
-        style = SkPaint::kFill_Style;
-    }
-
-    if (paint.getPathEffect() || paint.getMaskFilter() ||
-        paint.getRasterizer() || !fMatrix->rectStaysRect() ||
-        SkPaint::kStrokeAndFill_Style == style) {
-            rtype = kPath_RectType;
-    } else if (SkPaint::kFill_Style == paint.getStyle()) {
-        rtype = kFill_RectType;
-    } else if (zeroWidth) {
-        rtype = kHair_RectType;
-    } else if (easy_rect_join(paint, *fMatrix, &strokeSize)) {
 #ifdef SK_DISABLE_FAST_AA_STROKE_RECT
-        if (paint.isAntiAlias()) {
-            rtype = kPath_RectType;
-        } else
-#endif
-        rtype = kStroke_RectType;
-    } else {
+    if (kStroke_RectType == rtype && paint.isAntiAlias()) {
         rtype = kPath_RectType;
     }
-
+#endif
+        
     if (kPath_RectType == rtype) {
         SkPath  tmp;
         tmp.addRect(rect);
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index d102f3f..ce48be6 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -647,33 +647,27 @@
                           const SkPaint& paint) {
     CHECK_SHOULD_DRAW(draw);
 
-    bool doStroke = paint.getStyle() == SkPaint::kStroke_Style;
-    SkScalar width = paint.getStrokeWidth();
+    const SkMatrix& matrix = *draw.fMatrix;
+    SkPoint strokeSize;
+    SkDraw::RectType type = SkDraw::ComputeRectType(paint, matrix, &strokeSize);    
 
-    /*
-        We have special code for hairline strokes, miter-strokes, and fills.
-        Anything else we just call our path code.
-     */
-    bool usePath = doStroke && width > 0 &&
-                    paint.getStrokeJoin() != SkPaint::kMiter_Join;
-    // another reason we might need to call drawPath...
-    if (paint.getMaskFilter()) {
-        usePath = true;
-    }
-
-    if (usePath) {
+    if (SkDraw::kPath_RectType == type) {
         SkPath path;
         path.addRect(rect);
         this->drawPath(draw, path, paint, NULL, true);
-        return;
-    }
+    } else {
+        GrPaint grPaint;
+        SkAutoCachedTexture act;
+        if (!this->skPaint2GrPaintShader(paint, &act, matrix, &grPaint)) {
+            return;
+        }
 
-    GrPaint grPaint;
-    SkAutoCachedTexture act;
-    if (!this->skPaint2GrPaintShader(paint, &act, *draw.fMatrix,  &grPaint)) {
-        return;
+        SkScalar width = paint.getStrokeWidth();
+        if (SkDraw::kFill_RectType == type) {
+            width = -1;
+        }
+        fContext->drawRect(grPaint, Sk2Gr(rect), width);
     }
-    fContext->drawRect(grPaint, Sk2Gr(rect), doStroke ? width : -1);
 }
 
 #include "SkMaskFilter.h"