Add SkTileGridPicture SampleApp playback support.

SampleApp already supports switching to a bbox hierarchy playback mode
('b' shortcut). This CL adds an SkTileGridPicture bbox mode.

R=reed@google.com, robertphillips@google.com, fmalita@google.com

Author: fmalita@chromium.org

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

git-svn-id: http://skia.googlecode.com/svn/trunk@12613 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 9712b6b..09e34f6 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -671,7 +671,7 @@
     SkScalar    w, h;
 };
 
-static struct TilingInfo gTilingInfo[] = {
+static const struct TilingInfo gTilingInfo[] = {
     { "No tiling", SK_Scalar1        , SK_Scalar1         }, // kNo_Tiling
     { "128x128"  , SkIntToScalar(128), SkIntToScalar(128) }, // kAbs_128x128_Tiling
     { "256x256"  , SkIntToScalar(256), SkIntToScalar(256) }, // kAbs_256x256_Tiling
@@ -682,6 +682,12 @@
 SK_COMPILE_ASSERT((SK_ARRAY_COUNT(gTilingInfo) == kLast_TilingMode_Enum),
                   Incomplete_tiling_labels);
 
+SkSize SampleWindow::tileSize() const {
+    SkASSERT((TilingMode)fTilingMode < kLast_TilingMode_Enum);
+    const struct TilingInfo* info = gTilingInfo + fTilingMode;
+    return SkSize::Make(info->w > SK_Scalar1 ? info->w : this->width() * info->w,
+                        info->h > SK_Scalar1 ? info->h : this->height() * info->h);
+}
 //////////////////////////////////////////////////////////////////////////////
 
 static SkView* curr_view(SkWindow* wind) {
@@ -1222,11 +1228,7 @@
         if (bitmap_diff(canvas, orig, &diff)) {
         }
     } else {
-        SkSize tile;
-        SkASSERT((TilingMode)fTilingMode < kLast_TilingMode_Enum);
-        struct TilingInfo* info = gTilingInfo + fTilingMode;
-        tile.set(info->w > SK_Scalar1 ? info->w : width() * info->w,
-                 info->h > SK_Scalar1 ? info->h : height() * info->h);
+        SkSize tile = this->tileSize();
 
         for (SkScalar y = 0; y < height(); y += tile.height()) {
             for (SkScalar x = 0; x < width(); x += tile.width()) {
@@ -1760,8 +1762,15 @@
         SkOSMenu::FindSwitchState(evt, "Zoomer", &fShowZoomer) ||
         SkOSMenu::FindSwitchState(evt, "Magnify", &fMagnify) ||
         SkOSMenu::FindListIndex(evt, "Transition-Next", &fTransitionNext) ||
-        SkOSMenu::FindListIndex(evt, "Transition-Prev", &fTransitionPrev) ||
-        SkOSMenu::FindListIndex(evt, "Tiling", &fTilingMode)) {
+        SkOSMenu::FindListIndex(evt, "Transition-Prev", &fTransitionPrev)) {
+        this->inval(NULL);
+        this->updateTitle();
+        return true;
+    }
+    if (SkOSMenu::FindListIndex(evt, "Tiling", &fTilingMode)) {
+        if (SampleView::IsSampleView(curr_view(this))) {
+            ((SampleView*)curr_view(this))->onTileSizeChanged(this->tileSize());
+        }
         this->inval(NULL);
         this->updateTitle();
         return true;
@@ -2121,8 +2130,11 @@
     fSlideMenu->reset();
 
     (void)SampleView::SetUsePipe(view, fPipeState);
-    if (SampleView::IsSampleView(view))
-        ((SampleView*)view)->requestMenu(fSlideMenu);
+    if (SampleView::IsSampleView(view)) {
+        SampleView* sampleView = (SampleView*)view;
+        sampleView->requestMenu(fSlideMenu);
+        sampleView->onTileSizeChanged(this->tileSize());
+    }
     this->onUpdateMenu(fSlideMenu);
     this->updateTitle();
 }
@@ -2275,6 +2287,10 @@
 #endif
     this->updateTitle();    // to refresh our config
     fDevManager->windowSizeChanged(this);
+
+    if (fTilingMode != kNo_Tiling && SampleView::IsSampleView(view)) {
+        ((SampleView*)view)->onTileSizeChanged(this->tileSize());
+    }
 }
 
 ///////////////////////////////////////////////////////////////////////////////