Make sure SkDrawLooper objects can only be allocated on the heap.

Make constructors of SkLayerDrawLooper and SkBlurDrawLooper non-public.
Remove addLayer* methods from SkLayerDrawLooper. SkLayerDrawLooper::Builder is
used to create new objects.
Provide factory method for creating SkBlurDrawLooper.

BUG=2141
R=scroggo@google.com, reed@google.com, djsollen@google.com

Author: dominikg@chromium.org

Review URL: https://codereview.chromium.org/232913003

git-svn-id: http://skia.googlecode.com/svn/trunk@14200 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/megalooper.cpp b/gm/megalooper.cpp
index 12ccf2d..e825550 100644
--- a/gm/megalooper.cpp
+++ b/gm/megalooper.cpp
@@ -163,7 +163,7 @@
 
     // Create a 1-tier drawlooper
     SkLayerDrawLooper* create1Looper(SkScalar xOff, SkScalar yOff, SkColor color) {
-        SkLayerDrawLooper* looper = new SkLayerDrawLooper;
+        SkLayerDrawLooper::Builder looperBuilder;
         SkLayerDrawLooper::LayerInfo info;
 
         info.fPaintBits = SkLayerDrawLooper::kColorFilter_Bit |
@@ -172,14 +172,14 @@
         info.fOffset.set(xOff, yOff);
         info.fPostTranslate = false;
 
-        SkPaint* paint = looper->addLayer(info);
+        SkPaint* paint = looperBuilder.addLayer(info);
 
         paint->setMaskFilter(this->createBlur())->unref();
 
         SkColorFilter* cf = SkColorFilter::CreateModeFilter(color, SkXfermode::kSrcIn_Mode);
         paint->setColorFilter(cf)->unref();
 
-        return looper;
+        return looperBuilder.detachLooper();
     }
 
     void draw1x4(SkCanvas* canvas, SkScalar x, SkScalar y) {
@@ -207,7 +207,7 @@
 
     // Create a 4-tier draw looper
     SkLayerDrawLooper* create4Looper(SkScalar xOff, SkScalar yOff) {
-        SkLayerDrawLooper* looper = new SkLayerDrawLooper;
+        SkLayerDrawLooper::Builder looperBuilder;
         SkLayerDrawLooper::LayerInfo info;
 
         info.fPaintBits = SkLayerDrawLooper::kColorFilter_Bit |
@@ -219,7 +219,7 @@
 
         for (int i = 3; i >= 0; --i) {
             info.fOffset.set(xOff+gBlurOffsets[i].fX, yOff+gBlurOffsets[i].fY);
-            paint = looper->addLayer(info);
+            paint = looperBuilder.addLayer(info);
 
             paint->setMaskFilter(this->createBlur())->unref();
 
@@ -227,7 +227,7 @@
             paint->setColorFilter(cf)->unref();
         }
 
-        return looper;
+        return looperBuilder.detachLooper();
     }
 
     typedef GM INHERITED;