blob: 99c337b28dd8af2b36b409c6536f766c1dd7c81f [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
9class NinePatchView : public SkView {
10public:
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
37 void drawBG(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@android.comc4cae852009-09-23 15:06:10 +000072 virtual void onDraw(SkCanvas* canvas) {
73 this->drawBG(canvas);
74
reed@android.com7d970c72010-04-22 16:07:49 +000075 // canvas->scale(1.5f, 1.5f);
reed@android.com0b9e2db2009-09-16 17:00:17 +000076
reed@android.com8a1c16f2008-12-17 15:59:43 +000077 canvas->drawBitmap(fBM, 0, 0);
78
79 SkIRect margins;
80 SkRect dst;
81 int d = 25;
82
83 margins.set(d, d, d, d);
reed@android.com7d970c72010-04-22 16:07:49 +000084 margins.fLeft = fBM.width()/2 - 1;
85 margins.fTop = fBM.height()/2 - 1;
86 margins.fRight = fBM.width() - margins.fLeft - 1;
87 margins.fBottom = fBM.height() - margins.fTop - 1;
88
89 // canvas->translate(fX/5, fY/5);
90 canvas->translate(0, 76);
91
reed@android.com8a1c16f2008-12-17 15:59:43 +000092 dst.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
reed@android.com8a1c16f2008-12-17 15:59:43 +000093
reed@android.com7d970c72010-04-22 16:07:49 +000094 SkPaint paint;
95 paint.setAntiAlias(false);
96 paint.setDither(true);
97 paint.setFilterBitmap(false);
98 // SkNinePatch::DrawNine(canvas, dst, fBM, margins, &paint);
99 test_rects(canvas, fBM, &paint);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000100 }
101
reed@android.comc4cae852009-09-23 15:06:10 +0000102 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
103 fX = x / 1.5f;
104 fY = y / 1.5f;
reed@android.com7d970c72010-04-22 16:07:49 +0000105 fX = x; fY = y;
reed@android.comc4cae852009-09-23 15:06:10 +0000106 this->inval(NULL);
107 return this->INHERITED::onFindClickHandler(x, y);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000108 }
reed@android.com8a1c16f2008-12-17 15:59:43 +0000109private:
reed@android.comc4cae852009-09-23 15:06:10 +0000110 SkScalar fX, fY;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000111 typedef SkView INHERITED;
112};
113
114//////////////////////////////////////////////////////////////////////////////
115
116static SkView* MyFactory() { return new NinePatchView; }
117static SkViewRegister reg(MyFactory);
118