blob: d15f748cc21c9fc12aae4c4703ee2b522710a081 [file] [log] [blame]
junov@google.com61d46a02011-07-28 13:34:31 +00001#include "SampleCode.h"
2#include "SkView.h"
3#include "SkCanvas.h"
4#include "SkShader.h"
5#include "SkUtils.h"
6#include "SkDevice.h"
7
8static void create_bitmap(SkBitmap* bitmap) {
9 const int W = 100;
10 const int H = 100;
11 bitmap->setConfig(SkBitmap::kARGB_8888_Config, W, H);
12 bitmap->allocPixels();
13
14 SkCanvas canvas(*bitmap);
15 canvas.drawColor(SK_ColorRED);
16 SkPaint paint;
17 paint.setColor(SK_ColorBLUE);
18 canvas.drawCircle(SkIntToScalar(W)/2, SkIntToScalar(H)/2, SkIntToScalar(W)/2, paint);
19}
20
21class DrawBitmapView : public SampleView {
22 SkPath fPath;
23public:
24 DrawBitmapView() {}
25
26protected:
27 // overrides from SkEventSink
28 virtual bool onQuery(SkEvent* evt) {
29 if (SampleCode::TitleQ(*evt)) {
30 SampleCode::TitleR(evt, "DrawBitmap");
31 return true;
32 }
33 return this->INHERITED::onQuery(evt);
34 }
35
36 virtual void onDrawContent(SkCanvas* canvas) {
37 SkBitmap bitmap;
38 create_bitmap(&bitmap);
39 int x = bitmap.width() / 2;
40 int y = bitmap.height() / 2;
41 SkBitmap subset;
42 bitmap.extractSubset(&subset, SkIRect::MakeXYWH(x, y, x, y));
43
44 canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
45
46 canvas->drawBitmap(bitmap, 0, 0);
47 canvas->drawBitmap(subset, 0, 0);
48
49 // Now do the same but with a device bitmap as source image
50 SkRefPtr<SkDevice> primaryDevice(canvas->getDevice());
51 SkRefPtr<SkDevice> secondDevice(canvas->createCompatibleDevice(
52 SkBitmap::kARGB_8888_Config, bitmap.width(),
53 bitmap.height(), true));
54 secondDevice->unref();
55 SkCanvas secondCanvas(secondDevice.get());
56 secondCanvas.writePixels(bitmap, 0, 0);
57
58 SkBitmap deviceBitmap = secondDevice->accessBitmap(false);
59 SkBitmap deviceSubset;
60 deviceBitmap.extractSubset(&deviceSubset,
61 SkIRect::MakeXYWH(x, y, x, y));
62
63 canvas->translate(SkIntToScalar(120), SkIntToScalar(0));
64
65 canvas->drawBitmap(deviceBitmap, 0, 0);
66 canvas->drawBitmap(deviceSubset, 0, 0);
67
68 }
69
70private:
71 typedef SampleView INHERITED;
72};
73
74//////////////////////////////////////////////////////////////////////////////
75
76static SkView* MyFactory() { return new DrawBitmapView; }
77static SkViewRegister reg(MyFactory);
78