blob: 4d50b5a6baebc2ea5d204c1c03594cc8e889a8e2 [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 "SkCamera.h"
5#include "SkEmbossMaskFilter.h"
6#include "SkGradientShader.h"
7#include "SkPath.h"
8#include "SkRegion.h"
9#include "SkShader.h"
10#include "SkUtils.h"
11#include "SkRandom.h"
12
13class CameraView : public SkView {
14public:
15 CameraView()
16 {
17 fRX = fRY = fRZ = 0;
18 }
19
20 virtual ~CameraView()
21 {
22 }
23
24protected:
25 // overrides from SkEventSink
26 virtual bool onQuery(SkEvent* evt)
27 {
28 if (SampleCode::TitleQ(*evt))
29 {
30 SampleCode::TitleR(evt, "Camera");
31 return true;
32 }
33 return this->INHERITED::onQuery(evt);
34 }
35
36 void drawBG(SkCanvas* canvas)
37 {
38 canvas->drawColor(0xFFDDDDDD);
reed@android.com8a1c16f2008-12-17 15:59:43 +000039 }
40
41 virtual void onDraw(SkCanvas* canvas)
42 {
43 this->drawBG(canvas);
44
45 canvas->translate(this->width()/2, this->height()/2);
46
47 Sk3DView view;
48 view.rotateX(SkIntToScalar(fRX));
49 view.rotateY(SkIntToScalar(fRY));
50 view.applyToCanvas(canvas);
51
52 SkPaint paint;
53 SkScalar rad = SkIntToScalar(50);
54 SkScalar dim = rad*2;
55
56 if (view.dotWithNormal(0, 0, SK_Scalar1) < 0) {
57 paint.setColor(SK_ColorRED);
58 }
59
60 paint.setAntiAlias(true);
61
62#if 0
63 SkEmbossMaskFilter::Light light;
64 light.fDirection[0] = SK_Scalar1;
65 light.fDirection[1] = SK_Scalar1;
66 light.fDirection[2] = SK_Scalar1;
67 light.fAmbient = 180;
68 light.fSpecular = 16 * 2;
69 paint.setMaskFilter(new SkEmbossMaskFilter(light, SkIntToScalar(4)));
70#endif
71
72 canvas->drawCircle(0, 0, rad, paint);
73 canvas->drawCircle(-dim, -dim, rad, paint);
74 canvas->drawCircle(-dim, dim, rad, paint);
75 canvas->drawCircle( dim, -dim, rad, paint);
76 canvas->drawCircle( dim, dim, rad, paint);
77
78 fRY += 1;
79 if (fRY >= 360)
80 fRY = 0;
81 this->inval(NULL);
82 }
83
84 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y)
85 {
86 SkScalar angle = SkScalarDiv(this->height()/2 - y, this->height());
87 fRX = SkScalarRound(angle * 180);
88 return this->INHERITED::onFindClickHandler(x, y);
89 }
90
91 virtual bool onClick(Click* click)
92 {
93 return this->INHERITED::onClick(click);
94 }
95
96private:
97 int fRX, fRY, fRZ;
98 typedef SkView INHERITED;
99};
100
101//////////////////////////////////////////////////////////////////////////////
102
103static SkView* MyFactory() { return new CameraView; }
104static SkViewRegister reg(MyFactory);
105