aboutsummaryrefslogtreecommitdiffstats
path: root/Samples/SampleCamera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Samples/SampleCamera.cpp')
-rw-r--r--Samples/SampleCamera.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/Samples/SampleCamera.cpp b/Samples/SampleCamera.cpp
new file mode 100644
index 0000000..9a8d1ef
--- /dev/null
+++ b/Samples/SampleCamera.cpp
@@ -0,0 +1,106 @@
+#include "SampleCode.h"
+#include "SkView.h"
+#include "SkCanvas.h"
+#include "SkCamera.h"
+#include "SkEmbossMaskFilter.h"
+#include "SkGradientShader.h"
+#include "SkPath.h"
+#include "SkRegion.h"
+#include "SkShader.h"
+#include "SkUtils.h"
+#include "SkRandom.h"
+
+class CameraView : public SkView {
+public:
+ CameraView()
+ {
+ fRX = fRY = fRZ = 0;
+ }
+
+ virtual ~CameraView()
+ {
+ }
+
+protected:
+ // overrides from SkEventSink
+ virtual bool onQuery(SkEvent* evt)
+ {
+ if (SampleCode::TitleQ(*evt))
+ {
+ SampleCode::TitleR(evt, "Camera");
+ return true;
+ }
+ return this->INHERITED::onQuery(evt);
+ }
+
+ void drawBG(SkCanvas* canvas)
+ {
+ canvas->drawColor(0xFFDDDDDD);
+// canvas->drawColor(0, SkPorterDuff::kClear_Mode);
+ }
+
+ virtual void onDraw(SkCanvas* canvas)
+ {
+ this->drawBG(canvas);
+
+ canvas->translate(this->width()/2, this->height()/2);
+
+ Sk3DView view;
+ view.rotateX(SkIntToScalar(fRX));
+ view.rotateY(SkIntToScalar(fRY));
+ view.applyToCanvas(canvas);
+
+ SkPaint paint;
+ SkScalar rad = SkIntToScalar(50);
+ SkScalar dim = rad*2;
+
+ if (view.dotWithNormal(0, 0, SK_Scalar1) < 0) {
+ paint.setColor(SK_ColorRED);
+ }
+
+ paint.setAntiAlias(true);
+
+#if 0
+ SkEmbossMaskFilter::Light light;
+ light.fDirection[0] = SK_Scalar1;
+ light.fDirection[1] = SK_Scalar1;
+ light.fDirection[2] = SK_Scalar1;
+ light.fAmbient = 180;
+ light.fSpecular = 16 * 2;
+ paint.setMaskFilter(new SkEmbossMaskFilter(light, SkIntToScalar(4)));
+#endif
+
+ canvas->drawCircle(0, 0, rad, paint);
+ canvas->drawCircle(-dim, -dim, rad, paint);
+ canvas->drawCircle(-dim, dim, rad, paint);
+ canvas->drawCircle( dim, -dim, rad, paint);
+ canvas->drawCircle( dim, dim, rad, paint);
+
+ fRY += 1;
+ if (fRY >= 360)
+ fRY = 0;
+ this->inval(NULL);
+ }
+
+ virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y)
+ {
+ SkScalar angle = SkScalarDiv(this->height()/2 - y, this->height());
+ fRX = SkScalarRound(angle * 180);
+ return this->INHERITED::onFindClickHandler(x, y);
+ }
+
+ virtual bool onClick(Click* click)
+ {
+ return this->INHERITED::onClick(click);
+ }
+
+private:
+ int fRX, fRY, fRZ;
+ typedef SkView INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static SkView* MyFactory() { return new CameraView; }
+static SkViewRegister reg(MyFactory);
+