Add SkCanvasStack and update the Canvas utilities to use it.

BUG=
R=reed@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@11081 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/utils/SkCanvasStateUtils.cpp b/src/utils/SkCanvasStateUtils.cpp
index c4232c2..cd79a44 100644
--- a/src/utils/SkCanvasStateUtils.cpp
+++ b/src/utils/SkCanvasStateUtils.cpp
@@ -9,7 +9,7 @@
 
 #include "SkBitmapDevice.h"
 #include "SkCanvas.h"
-#include "SkNWayCanvas.h"
+#include "SkCanvasStack.h"
 #include "SkWriter32.h"
 
 #define CANVAS_STATE_VERSION 1
@@ -316,18 +316,19 @@
         return NULL;
     }
 
-    SkAutoTUnref<SkNWayCanvas> canvas(SkNEW_ARGS(SkNWayCanvas, (state->width, state->height)));
+    SkAutoTUnref<SkCanvasStack> canvas(SkNEW_ARGS(SkCanvasStack, (state->width, state->height)));
 
     // setup the matrix and clip on the n-way canvas
     setup_canvas_from_MC_state(state->mcState, canvas);
 
     // Iterate over the layers and add them to the n-way canvas
-    for (int i = 0; i < state->layerCount; ++i) {
+    for (int i = state->layerCount - 1; i >= 0; --i) {
         SkAutoTUnref<SkCanvas> canvasLayer(create_canvas_from_canvas_layer(state->layers[i]));
         if (!canvasLayer.get()) {
             return NULL;
         }
-        canvas->addCanvas(canvasLayer.get());
+        canvas->pushCanvas(canvasLayer.get(), SkIPoint::Make(state->layers[i].x,
+                                                             state->layers[i].y));
     }
 
     return canvas.detach();