From 8a1c16ff38322f0210116fa7293eb8817c7e477e Mon Sep 17 00:00:00 2001 From: "reed@android.com" Date: Wed, 17 Dec 2008 15:59:43 +0000 Subject: grab from latest android git-svn-id: http://skia.googlecode.com/svn/trunk@27 2bbb7eff-a529-9590-31e7-b0007b416f81 --- samplecode/SampleCamera.cpp | 106 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 samplecode/SampleCamera.cpp (limited to 'samplecode/SampleCamera.cpp') diff --git a/samplecode/SampleCamera.cpp b/samplecode/SampleCamera.cpp new file mode 100644 index 0000000000..9a8d1efc8a --- /dev/null +++ b/samplecode/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); + -- cgit v1.2.3