Add texture filtering override to debugger

https://codereview.chromium.org/27716003/



git-svn-id: http://skia.googlecode.com/svn/trunk/src@11846 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/utils/debugger/SkDebugCanvas.cpp b/utils/debugger/SkDebugCanvas.cpp
index bf81983..5553e14 100644
--- a/utils/debugger/SkDebugCanvas.cpp
+++ b/utils/debugger/SkDebugCanvas.cpp
@@ -24,6 +24,8 @@
         : INHERITED(make_noconfig_bm(width, height))
         , fOverdrawViz(false)
         , fOverdrawFilter(NULL)
+        , fOverrideTexFiltering(false)
+        , fTexOverrideFilter(NULL)
         , fOutstandingSaveCount(0) {
     // TODO(chudy): Free up memory from all draw commands in destructor.
     fWidth = width;
@@ -109,13 +111,13 @@
 
 // The OverdrawFilter modifies every paint to use an SkProcXfermode which
 // in turn invokes OverdrawXferModeProc
-class OverdrawFilter : public SkDrawFilter {
+class SkOverdrawFilter : public SkDrawFilter {
 public:
-    OverdrawFilter() {
+    SkOverdrawFilter() {
         fXferMode = new SkProcXfermode(OverdrawXferModeProc);
     }
 
-    virtual ~OverdrawFilter() {
+    virtual ~SkOverdrawFilter() {
         delete fXferMode;
     }
 
@@ -131,6 +133,29 @@
     typedef SkDrawFilter INHERITED;
 };
 
+// SkTexOverrideFilter modifies every paint to use the specified 
+// texture filtering mode
+class SkTexOverrideFilter : public SkDrawFilter {
+public:
+    SkTexOverrideFilter() : fFilterLevel(SkPaint::kNone_FilterLevel) {
+    }
+
+    void setFilterLevel(SkPaint::FilterLevel filterLevel) {
+        fFilterLevel = filterLevel;
+    }
+
+    virtual bool filter(SkPaint* p, Type) SK_OVERRIDE {
+        p->setFilterLevel(fFilterLevel);
+        return true;
+    }
+
+protected:
+    SkPaint::FilterLevel fFilterLevel;
+
+private:
+    typedef SkDrawFilter INHERITED;
+};
+
 void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) {
     SkASSERT(!fCommandVector.isEmpty());
     SkASSERT(index < fCommandVector.count());
@@ -161,12 +186,20 @@
     // call setDrawFilter on anything but the root layer odd things happen.
     if (fOverdrawViz) {
         if (NULL == fOverdrawFilter) {
-            fOverdrawFilter = new OverdrawFilter;
+            fOverdrawFilter = new SkOverdrawFilter;
         }
 
         if (fOverdrawFilter != canvas->getDrawFilter()) {
             canvas->setDrawFilter(fOverdrawFilter);
         }
+    } else if (fOverrideTexFiltering) {
+        if (NULL == fTexOverrideFilter) {
+            fTexOverrideFilter = new SkTexOverrideFilter;
+        }
+
+        if (fTexOverrideFilter != canvas->getDrawFilter()) {
+            canvas->setDrawFilter(fTexOverrideFilter);
+        }
     } else {
         canvas->setDrawFilter(NULL);
     }
@@ -246,6 +279,15 @@
     fFilter = toggle;
 }
 
+void SkDebugCanvas::overrideTexFiltering(bool overrideTexFiltering, SkPaint::FilterLevel level) { 
+    if (NULL == fTexOverrideFilter) {
+        fTexOverrideFilter = new SkTexOverrideFilter;
+    }
+
+    fOverrideTexFiltering = overrideTexFiltering; 
+    fTexOverrideFilter->setFilterLevel(level);
+}
+
 void SkDebugCanvas::clear(SkColor color) {
     addDrawCommand(new SkClearCommand(color));
 }
diff --git a/utils/debugger/SkDebugCanvas.h b/utils/debugger/SkDebugCanvas.h
index 705f49a..aad768b 100644
--- a/utils/debugger/SkDebugCanvas.h
+++ b/utils/debugger/SkDebugCanvas.h
@@ -16,6 +16,8 @@
 #include "SkTArray.h"
 #include "SkString.h"
 
+class SkTexOverrideFilter;
+
 class SK_API SkDebugCanvas : public SkCanvas {
 public:
     SkDebugCanvas(int width, int height);
@@ -29,6 +31,11 @@
     void setOverdrawViz(bool overdrawViz) { fOverdrawViz = overdrawViz; }
 
     /**
+     * Enable or disable texure filtering override
+     */
+    void overrideTexFiltering(bool overrideTexFiltering, SkPaint::FilterLevel level); 
+
+    /**
         Executes all draw calls to the canvas.
         @param canvas  The canvas being drawn to
      */
@@ -245,9 +252,13 @@
     SkMatrix fUserMatrix;
     SkMatrix fMatrix;
     SkIRect fClip;
+
     bool fOverdrawViz;
     SkDrawFilter* fOverdrawFilter;
 
+    bool fOverrideTexFiltering;
+    SkTexOverrideFilter* fTexOverrideFilter;
+
     /**
         Number of unmatched save() calls at any point during a draw.
         If there are any saveLayer() calls outstanding, we need to resolve