blob: e15828752340d8f60b4f479083531957ab3efd3d [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001#include "SampleCode.h"
2#include "SkView.h"
3#include "SkCanvas.h"
4#include "SkImageDecoder.h"
5#include "SkNinePatch.h"
6#include "SkPaint.h"
7#include "SkUnPreMultiply.h"
8
reed@google.com81e3d7f2011-06-01 12:42:36 +00009class NinePatchView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000010public:
11 SkBitmap fBM;
12
13 NinePatchView() {
reed@android.com7d970c72010-04-22 16:07:49 +000014 SkImageDecoder::DecodeFile("/skimages/btn_default_normal_disable.9.png", &fBM);
reed@android.com0b9e2db2009-09-16 17:00:17 +000015
16 // trim off the edge guide-lines
17 SkBitmap tmp;
18 SkIRect r;
19 r.set(1, 1, fBM.width() - 1, fBM.height() - 1);
20 fBM.extractSubset(&tmp, r);
21 fBM.swap(tmp);
reed@android.comc4cae852009-09-23 15:06:10 +000022
23 fX = SkIntToScalar(fBM.width());
24 fY = 0;
reed@android.com8a1c16f2008-12-17 15:59:43 +000025 }
26
27protected:
28 // overrides from SkEventSink
29 virtual bool onQuery(SkEvent* evt) {
30 if (SampleCode::TitleQ(*evt)) {
31 SampleCode::TitleR(evt, "NinePatch");
32 return true;
33 }
34 return this->INHERITED::onQuery(evt);
35 }
36
reed@google.com81e3d7f2011-06-01 12:42:36 +000037 virtual void onDrawBackground(SkCanvas* canvas) {
reed@android.com7d970c72010-04-22 16:07:49 +000038 SkPaint p;
39 p.setDither(true);
40 p.setColor(0xFF909090);
41 canvas->drawPaint(p);
reed@android.comc4cae852009-09-23 15:06:10 +000042 }
reed@android.com7d970c72010-04-22 16:07:49 +000043
44 static void test_rects(SkCanvas* canvas, const SkBitmap& bm, const SkPaint* paint) {
45 static const SkIRect src[] = {
46 { 0, 0, 18, 34 },
47 { 18, 0, 19, 34 },
48 { 19, 0, 36, 34 },
49 { 0, 34, 18, 35 },
50 { 18, 34, 19, 35 },
51 { 19, 34, 36, 35 },
52 { 0, 35, 18, 72 },
53 { 18, 35, 19, 72 },
54 { 19, 35, 36, 72 },
55 };
56 static const SkRect dst[] = {
57 { 0, 0, 18, 34 },
58 { 18, 0, 283, 34 },
59 { 283, 0, 300, 34 },
60 { 0, 34, 18, 163 },
61 { 18, 34, 283, 163 },
62 { 283, 34, 300, 163 },
63 { 0, 163, 18, 200 },
64 { 18, 163, 283, 200 },
65 { 283, 163, 300, 200 },
66 };
67 for (size_t i = 0; i < SK_ARRAY_COUNT(src); i++) {
68 canvas->drawBitmapRect(bm, &src[i], dst[i], paint);
69 }
70 }
71
reed@google.com81e3d7f2011-06-01 12:42:36 +000072 virtual void onDrawContent(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000073 canvas->drawBitmap(fBM, 0, 0);
74
75 SkIRect margins;
76 SkRect dst;
77 int d = 25;
78
79 margins.set(d, d, d, d);
reed@android.com7d970c72010-04-22 16:07:49 +000080 margins.fLeft = fBM.width()/2 - 1;
81 margins.fTop = fBM.height()/2 - 1;
82 margins.fRight = fBM.width() - margins.fLeft - 1;
83 margins.fBottom = fBM.height() - margins.fTop - 1;
84
85 // canvas->translate(fX/5, fY/5);
86 canvas->translate(0, 76);
87
reed@android.com8a1c16f2008-12-17 15:59:43 +000088 dst.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
reed@android.com8a1c16f2008-12-17 15:59:43 +000089
reed@android.com7d970c72010-04-22 16:07:49 +000090 SkPaint paint;
91 paint.setAntiAlias(false);
92 paint.setDither(true);
93 paint.setFilterBitmap(false);
94 // SkNinePatch::DrawNine(canvas, dst, fBM, margins, &paint);
95 test_rects(canvas, fBM, &paint);
reed@android.com8a1c16f2008-12-17 15:59:43 +000096 }
97
reed@android.comc4cae852009-09-23 15:06:10 +000098 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
99 fX = x / 1.5f;
100 fY = y / 1.5f;
reed@android.com7d970c72010-04-22 16:07:49 +0000101 fX = x; fY = y;
reed@android.comc4cae852009-09-23 15:06:10 +0000102 this->inval(NULL);
103 return this->INHERITED::onFindClickHandler(x, y);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000104 }
reed@android.com8a1c16f2008-12-17 15:59:43 +0000105private:
reed@android.comc4cae852009-09-23 15:06:10 +0000106 SkScalar fX, fY;
reed@google.com81e3d7f2011-06-01 12:42:36 +0000107 typedef SampleView INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000108};
109
110//////////////////////////////////////////////////////////////////////////////
111
112static SkView* MyFactory() { return new NinePatchView; }
113static SkViewRegister reg(MyFactory);
114