blob: 689afd7e14dca1ef2f0b0cd31e4b222e00bbd50d [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
reed@android.com8a1c16f2008-12-17 15:59:43 +00008#include "SampleCode.h"
9#include "SkView.h"
10#include "SkCanvas.h"
11#include "SkImageDecoder.h"
12#include "SkNinePatch.h"
13#include "SkPaint.h"
14#include "SkUnPreMultiply.h"
15
reed@google.com81e3d7f2011-06-01 12:42:36 +000016class NinePatchView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000017public:
18 SkBitmap fBM;
19
20 NinePatchView() {
reed@android.com7d970c72010-04-22 16:07:49 +000021 SkImageDecoder::DecodeFile("/skimages/btn_default_normal_disable.9.png", &fBM);
reed@android.com0b9e2db2009-09-16 17:00:17 +000022
23 // trim off the edge guide-lines
24 SkBitmap tmp;
25 SkIRect r;
26 r.set(1, 1, fBM.width() - 1, fBM.height() - 1);
27 fBM.extractSubset(&tmp, r);
28 fBM.swap(tmp);
reed@android.comc4cae852009-09-23 15:06:10 +000029
30 fX = SkIntToScalar(fBM.width());
31 fY = 0;
reed@android.com8a1c16f2008-12-17 15:59:43 +000032 }
33
34protected:
35 // overrides from SkEventSink
36 virtual bool onQuery(SkEvent* evt) {
37 if (SampleCode::TitleQ(*evt)) {
38 SampleCode::TitleR(evt, "NinePatch");
39 return true;
40 }
41 return this->INHERITED::onQuery(evt);
42 }
43
reed@google.com81e3d7f2011-06-01 12:42:36 +000044 virtual void onDrawBackground(SkCanvas* canvas) {
reed@android.com7d970c72010-04-22 16:07:49 +000045 SkPaint p;
46 p.setDither(true);
47 p.setColor(0xFF909090);
48 canvas->drawPaint(p);
reed@android.comc4cae852009-09-23 15:06:10 +000049 }
reed@android.com7d970c72010-04-22 16:07:49 +000050
51 static void test_rects(SkCanvas* canvas, const SkBitmap& bm, const SkPaint* paint) {
52 static const SkIRect src[] = {
53 { 0, 0, 18, 34 },
54 { 18, 0, 19, 34 },
55 { 19, 0, 36, 34 },
56 { 0, 34, 18, 35 },
57 { 18, 34, 19, 35 },
58 { 19, 34, 36, 35 },
59 { 0, 35, 18, 72 },
60 { 18, 35, 19, 72 },
61 { 19, 35, 36, 72 },
62 };
63 static const SkRect dst[] = {
64 { 0, 0, 18, 34 },
65 { 18, 0, 283, 34 },
66 { 283, 0, 300, 34 },
67 { 0, 34, 18, 163 },
68 { 18, 34, 283, 163 },
69 { 283, 34, 300, 163 },
70 { 0, 163, 18, 200 },
71 { 18, 163, 283, 200 },
72 { 283, 163, 300, 200 },
73 };
74 for (size_t i = 0; i < SK_ARRAY_COUNT(src); i++) {
75 canvas->drawBitmapRect(bm, &src[i], dst[i], paint);
76 }
77 }
78
reed@google.com81e3d7f2011-06-01 12:42:36 +000079 virtual void onDrawContent(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000080 canvas->drawBitmap(fBM, 0, 0);
81
82 SkIRect margins;
83 SkRect dst;
84 int d = 25;
85
86 margins.set(d, d, d, d);
reed@android.com7d970c72010-04-22 16:07:49 +000087 margins.fLeft = fBM.width()/2 - 1;
88 margins.fTop = fBM.height()/2 - 1;
89 margins.fRight = fBM.width() - margins.fLeft - 1;
90 margins.fBottom = fBM.height() - margins.fTop - 1;
91
92 // canvas->translate(fX/5, fY/5);
93 canvas->translate(0, 76);
94
reed@android.com8a1c16f2008-12-17 15:59:43 +000095 dst.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
reed@android.com8a1c16f2008-12-17 15:59:43 +000096
reed@android.com7d970c72010-04-22 16:07:49 +000097 SkPaint paint;
98 paint.setAntiAlias(false);
99 paint.setDither(true);
100 paint.setFilterBitmap(false);
101 // SkNinePatch::DrawNine(canvas, dst, fBM, margins, &paint);
102 test_rects(canvas, fBM, &paint);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000103 }
104
reed@android.comc4cae852009-09-23 15:06:10 +0000105 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
106 fX = x / 1.5f;
107 fY = y / 1.5f;
reed@android.com7d970c72010-04-22 16:07:49 +0000108 fX = x; fY = y;
reed@android.comc4cae852009-09-23 15:06:10 +0000109 this->inval(NULL);
110 return this->INHERITED::onFindClickHandler(x, y);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000111 }
reed@android.com8a1c16f2008-12-17 15:59:43 +0000112private:
reed@android.comc4cae852009-09-23 15:06:10 +0000113 SkScalar fX, fY;
reed@google.com81e3d7f2011-06-01 12:42:36 +0000114 typedef SampleView INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000115};
116
117//////////////////////////////////////////////////////////////////////////////
118
119static SkView* MyFactory() { return new NinePatchView; }
120static SkViewRegister reg(MyFactory);
121