blob: 9a8d1efc8a2fd3927fb05afec70f5453dfb7eee1 [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);
39// canvas->drawColor(0, SkPorterDuff::kClear_Mode);
40 }
41
42 virtual void onDraw(SkCanvas* canvas)
43 {
44 this->drawBG(canvas);
45
46 canvas->translate(this->width()/2, this->height()/2);
47
48 Sk3DView view;
49 view.rotateX(SkIntToScalar(fRX));
50 view.rotateY(SkIntToScalar(fRY));
51 view.applyToCanvas(canvas);
52
53 SkPaint paint;
54 SkScalar rad = SkIntToScalar(50);
55 SkScalar dim = rad*2;
56
57 if (view.dotWithNormal(0, 0, SK_Scalar1) < 0) {
58 paint.setColor(SK_ColorRED);
59 }
60
61 paint.setAntiAlias(true);
62
63#if 0
64 SkEmbossMaskFilter::Light light;
65 light.fDirection[0] = SK_Scalar1;
66 light.fDirection[1] = SK_Scalar1;
67 light.fDirection[2] = SK_Scalar1;
68 light.fAmbient = 180;
69 light.fSpecular = 16 * 2;
70 paint.setMaskFilter(new SkEmbossMaskFilter(light, SkIntToScalar(4)));
71#endif
72
73 canvas->drawCircle(0, 0, rad, paint);
74 canvas->drawCircle(-dim, -dim, rad, paint);
75 canvas->drawCircle(-dim, dim, rad, paint);
76 canvas->drawCircle( dim, -dim, rad, paint);
77 canvas->drawCircle( dim, dim, rad, paint);
78
79 fRY += 1;
80 if (fRY >= 360)
81 fRY = 0;
82 this->inval(NULL);
83 }
84
85 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y)
86 {
87 SkScalar angle = SkScalarDiv(this->height()/2 - y, this->height());
88 fRX = SkScalarRound(angle * 180);
89 return this->INHERITED::onFindClickHandler(x, y);
90 }
91
92 virtual bool onClick(Click* click)
93 {
94 return this->INHERITED::onClick(click);
95 }
96
97private:
98 int fRX, fRY, fRZ;
99 typedef SkView INHERITED;
100};
101
102//////////////////////////////////////////////////////////////////////////////
103
104static SkView* MyFactory() { return new CameraView; }
105static SkViewRegister reg(MyFactory);
106