C++11 override should now be supported by all of {bots,Chrome,Android,Mozilla}
[platform/upstream/libSkiaSharp.git] / gm / peekpixels.cpp
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     SkString onShortName() override {
28         return SkString("peekpixels");
29     }
30
31     SkISize onISize() override {
32         return SkISize::Make(360, 120);
33     }
34
35     void onDraw(SkCanvas* canvas) 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 private:
68     typedef skiagm::GM INHERITED;
69 };
70
71 DEF_GM( return SkNEW(PeekPixelsGM); )