Home | History | Annotate | Download | only in gm
      1 /*
      2  * Copyright 2011 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "gm.h"
      9 #include "SkCanvas.h"
     10 #include "SkPath.h"
     11 #include "SkSurface.h"
     12 #include "SkPicture.h"
     13 
     14 static void draw_content(SkCanvas* canvas) {
     15     SkImageInfo info = canvas->imageInfo();
     16     SkPaint paint;
     17     paint.setAntiAlias(true);
     18     canvas->drawCircle(SkScalarHalf(info.width()), SkScalarHalf(info.height()),
     19                        SkScalarHalf(info.width()), paint);
     20 }
     21 
     22 class PeekPixelsGM : public skiagm::GM {
     23 public:
     24     PeekPixelsGM() {}
     25 
     26 protected:
     27     virtual SkString onShortName() SK_OVERRIDE {
     28         return SkString("peekpixels");
     29     }
     30 
     31     virtual SkISize onISize() SK_OVERRIDE {
     32         return SkISize::Make(360, 120);
     33     }
     34 
     35     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
     36         SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100);
     37         SkAutoTUnref<SkSurface> surface(canvas->newSurface(info));
     38         if (surface.get()) {
     39             SkCanvas* surfCanvas = surface->getCanvas();
     40 
     41             draw_content(surfCanvas);
     42             SkBitmap bitmap;
     43 
     44             // test peekPixels
     45             {
     46                 SkImageInfo info;
     47                 size_t rowBytes;
     48                 const void* addr = surfCanvas->peekPixels(&info, &rowBytes);
     49                 if (addr && bitmap.installPixels(info, const_cast<void*>(addr), rowBytes)) {
     50                     canvas->drawBitmap(bitmap, 0, 0, NULL);
     51                 }
     52             }
     53 
     54             // test ROCanvasPixels
     55             canvas->translate(120, 0);
     56             SkAutoROCanvasPixels ropixels(surfCanvas);
     57             if (ropixels.asROBitmap(&bitmap)) {
     58                 canvas->drawBitmap(bitmap, 0, 0, NULL);
     59             }
     60 
     61             // test Surface
     62             canvas->translate(120, 0);
     63             surface->draw(canvas, 0, 0, NULL);
     64         }
     65     }
     66 
     67     virtual uint32_t onGetFlags() const {
     68         // we explicitly test peekPixels and readPixels, neither of which
     69         // return something for a picture-backed canvas, so we skip that test.
     70         return kSkipPicture_Flag;
     71     }
     72 
     73 private:
     74     typedef skiagm::GM INHERITED;
     75 };
     76 
     77 DEF_GM( return SkNEW(PeekPixelsGM); )
     78