blob: aa92343a93e416ae12b9137c9921361dd7aec6bb [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.com47ca0362009-09-02 02:07:45 +00008#include "SampleCode.h"
9#include "SkBlurMaskFilter.h"
10#include "SkColorPriv.h"
11#include "SkGradientShader.h"
12#include "SkView.h"
13#include "SkCanvas.h"
14#include "SkUtils.h"
15
16static SkBitmap make_bitmap() {
17 SkBitmap bm;
18 SkColorTable* ctable = new SkColorTable(256);
19
20 SkPMColor* c = ctable->lockColors();
21 for (int i = 0; i < 256; i++) {
22 c[i] = SkPackARGB32(255 - i, 0, 0, 0);
23 }
24 ctable->unlockColors(true);
25 bm.setConfig(SkBitmap::kIndex8_Config, 256, 256);
26 bm.allocPixels(ctable);
27 ctable->unref();
28
29 bm.lockPixels();
30 const float cx = bm.width() * 0.5f;
31 const float cy = bm.height() * 0.5f;
32 for (int y = 0; y < bm.height(); y++) {
33 float dy = y - cy;
34 dy *= dy;
35 uint8_t* p = bm.getAddr8(0, y);
36 for (int x = 0; x < 256; x++) {
37 float dx = x - cx;
38 dx *= dx;
39 float d = (dx + dy) / (cx/2);
40 int id = (int)d;
41 if (id > 255) {
42 id = 255;
43 }
44 p[x] = id;
45 }
46 }
47 bm.unlockPixels();
48 return bm;
49}
50
senorblanco@chromium.orge36ddf02011-07-15 14:28:16 +000051class BlurView : public SampleView {
reed@android.com47ca0362009-09-02 02:07:45 +000052 SkBitmap fBM;
53public:
54 BlurView() {
55 }
reed@google.com0ecc2b792011-02-16 13:06:15 +000056
reed@android.com47ca0362009-09-02 02:07:45 +000057protected:
58 // overrides from SkEventSink
59 virtual bool onQuery(SkEvent* evt) {
60 if (SampleCode::TitleQ(*evt)) {
61 SampleCode::TitleR(evt, "Blur");
62 return true;
63 }
64 return this->INHERITED::onQuery(evt);
65 }
reed@google.com0ecc2b792011-02-16 13:06:15 +000066
reed@android.com47ca0362009-09-02 02:07:45 +000067 void drawBG(SkCanvas* canvas) {
68 canvas->drawColor(0xFFDDDDDD);
69 }
reed@google.com0ecc2b792011-02-16 13:06:15 +000070
senorblanco@chromium.orge36ddf02011-07-15 14:28:16 +000071 virtual void onDrawContent(SkCanvas* canvas) {
reed@android.com47ca0362009-09-02 02:07:45 +000072 drawBG(canvas);
reed@google.com0ecc2b792011-02-16 13:06:15 +000073
reed@android.comda449a32009-09-18 20:57:05 +000074 SkBlurMaskFilter::BlurStyle NONE = SkBlurMaskFilter::BlurStyle(-999);
75 static const struct {
76 SkBlurMaskFilter::BlurStyle fStyle;
77 int fCx, fCy;
78 } gRecs[] = {
79 { NONE, 0, 0 },
80 { SkBlurMaskFilter::kInner_BlurStyle, -1, 0 },
81 { SkBlurMaskFilter::kNormal_BlurStyle, 0, 1 },
82 { SkBlurMaskFilter::kSolid_BlurStyle, 0, -1 },
83 { SkBlurMaskFilter::kOuter_BlurStyle, 1, 0 },
84 };
reed@android.com47ca0362009-09-02 02:07:45 +000085
reed@android.com47ca0362009-09-02 02:07:45 +000086 SkPaint paint;
87 paint.setAntiAlias(true);
reed@google.com0ecc2b792011-02-16 13:06:15 +000088 paint.setTextSize(25);
89 canvas->translate(-40, 0);
reed@android.comda449a32009-09-18 20:57:05 +000090
reed@google.com0ecc2b792011-02-16 13:06:15 +000091 SkBlurMaskFilter::BlurFlags flags = SkBlurMaskFilter::kNone_BlurFlag;
92 for (int j = 0; j < 2; j++) {
93 canvas->save();
94 paint.setColor(SK_ColorBLUE);
95 for (size_t i = 0; i < SK_ARRAY_COUNT(gRecs); i++) {
96 if (gRecs[i].fStyle != NONE) {
97 SkMaskFilter* mf = SkBlurMaskFilter::Create(20,
98 gRecs[i].fStyle,
99 flags);
100 paint.setMaskFilter(mf)->unref();
101 } else {
102 paint.setMaskFilter(NULL);
103 }
reed@google.com261b8e22011-04-14 17:53:24 +0000104 canvas->drawCircle(200 + gRecs[i].fCx*100.f,
105 200 + gRecs[i].fCy*100.f, 50, paint);
reed@android.comda449a32009-09-18 20:57:05 +0000106 }
reed@google.com0ecc2b792011-02-16 13:06:15 +0000107 // draw text
108 {
109 SkMaskFilter* mf = SkBlurMaskFilter::Create(4,
110 SkBlurMaskFilter::kNormal_BlurStyle,
111 flags);
112 paint.setMaskFilter(mf)->unref();
113 SkScalar x = SkIntToScalar(70);
114 SkScalar y = SkIntToScalar(400);
115 paint.setColor(SK_ColorBLACK);
116 canvas->drawText("Hamburgefons Style", 18, x, y, paint);
117 canvas->drawText("Hamburgefons Style", 18, x, y + SkIntToScalar(50), paint);
118 paint.setMaskFilter(NULL);
119 paint.setColor(SK_ColorWHITE);
120 x -= SkIntToScalar(2);
121 y -= SkIntToScalar(2);
122 canvas->drawText("Hamburgefons Style", 18, x, y, paint);
123 }
124 canvas->restore();
reed@google.com11a5ff32011-02-18 20:20:51 +0000125 flags = SkBlurMaskFilter::kHighQuality_BlurFlag;
reed@google.com0ecc2b792011-02-16 13:06:15 +0000126 canvas->translate(350, 0);
reed@android.comda449a32009-09-18 20:57:05 +0000127 }
reed@android.com47ca0362009-09-02 02:07:45 +0000128 }
reed@google.com0ecc2b792011-02-16 13:06:15 +0000129
reed@android.com47ca0362009-09-02 02:07:45 +0000130private:
131 typedef SkView INHERITED;
132};
133
134//////////////////////////////////////////////////////////////////////////////
135
136static SkView* MyFactory() { return new BlurView; }
137static SkViewRegister reg(MyFactory);
138