--picture foo now works if foo is an image (.png, .jpeg) or a picture (.skp)
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 3 Aug 2012 13:39:57 +0000 (13:39 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 3 Aug 2012 13:39:57 +0000 (13:39 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@4944 2bbb7eff-a529-9590-31e7-b0007b416f81

samplecode/SamplePictFile.cpp

index f81a02a..b24f908 100644 (file)
 class PictFileView : public SampleView {
     SkString    fFilename;
     SkPicture*  fPicture;
+    
+    static SkPicture* LoadPicture(const char path[]) {
+        SkPicture* pic = NULL;
+
+        SkBitmap bm;
+        if (SkImageDecoder::DecodeFile(path, &bm)) {
+            bm.setImmutable();
+            pic = SkNEW(SkPicture);
+            SkCanvas* can = pic->beginRecording(bm.width(), bm.height());
+            can->drawBitmap(bm, 0, 0, NULL);
+            pic->endRecording();
+        } else {
+            SkFILEStream stream(path);
+            if (stream.isValid()) {
+                pic = SkNEW_ARGS(SkPicture, (&stream));
+            }
+        }
+        return pic;
+    }
+
 public:
     PictFileView(const char name[] = NULL) : fFilename(name) {
         fPicture = NULL;
@@ -53,14 +73,15 @@ protected:
     }
     
     virtual void onDrawContent(SkCanvas* canvas) {
-        if (NULL == fPicture) {
-            SkFILEStream stream(fFilename.c_str());
-            fPicture = SkNEW_ARGS(SkPicture, (&stream));
+        if (!fPicture) {
+            fPicture = LoadPicture(fFilename.c_str());
+        }
+        if (fPicture) {
+            canvas->drawPicture(*fPicture);
         }
-        canvas->drawPicture(*fPicture);
     }
     
-private:    
+private:
     typedef SampleView INHERITED;
 };