diff options
author | 2011-03-16 12:10:02 +0000 | |
---|---|---|
committer | 2011-03-16 12:10:02 +0000 | |
commit | 52f57e1d11a00bdc5efb96709446546cdbc1ff9d (patch) | |
tree | dcd66689acda9eb1ff85c7ca9b0faa60b6bf4247 /samplecode/SampleApp.cpp | |
parent | 109a2e3afaf8a14c2b7ff545c80c08d0d6d67a3e (diff) |
add fling
git-svn-id: http://skia.googlecode.com/svn/trunk@946 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode/SampleApp.cpp')
-rw-r--r-- | samplecode/SampleApp.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index b94960dbe4..3a7a1a6330 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -11,6 +11,7 @@ #include "SampleCode.h" #include "GrContext.h" +#include "SkTouchGesture.h" //#define DEFAULT_TO_GPU @@ -224,6 +225,9 @@ protected: virtual bool onEvent(const SkEvent& evt); virtual bool onQuery(SkEvent* evt); + virtual bool onClick(Click* click); + virtual Click* onFindClickHandler(SkScalar x, SkScalar y); + #if 0 virtual bool handleChar(SkUnichar uni); virtual bool handleEvent(const SkEvent& evt); @@ -243,6 +247,8 @@ private: GrContext* fGrContext; SkPath fClipPath; + SkTouchGesture fGesture; + enum CanvasType { kRaster_CanvasType, kPicture_CanvasType, @@ -395,6 +401,20 @@ void SampleWindow::draw(SkCanvas* canvas) { gAnimTimePrev = gAnimTime; gAnimTime = SkTime::GetMSecs(); + // Apply any gesture matrix + if (true) { + const SkMatrix& localM = fGesture.localM(); + if (localM.getType() & SkMatrix::kScale_Mask) { + canvas->setExternalMatrix(&localM); + } + canvas->concat(localM); + canvas->concat(fGesture.globalM()); + + if (fGesture.isActive()) { + this->inval(NULL); + } + } + if (fNClip) { this->INHERITED::draw(canvas); SkBitmap orig = capture_bitmap(canvas); @@ -825,6 +845,49 @@ bool SampleWindow::onHandleKey(SkKey key) { return this->INHERITED::onHandleKey(key); } +/////////////////////////////////////////////////////////////////////////////// + +static const char gGestureClickType[] = "GestureClickType"; + +class GestureClick : public SkView::Click { +public: + GestureClick(SkView* target) : SkView::Click(target) { + this->setType(gGestureClickType); + } + + static bool IsGesture(Click* click) { + return click->isType(gGestureClickType); + } +}; + +SkView::Click* SampleWindow::onFindClickHandler(SkScalar x, SkScalar y) { + return new GestureClick(this); +} + +bool SampleWindow::onClick(Click* click) { + if (GestureClick::IsGesture(click)) { + float x = SkScalarToFloat(click->fCurr.fX); + float y = SkScalarToFloat(click->fCurr.fY); + switch (click->fState) { + case SkView::Click::kDown_State: + fGesture.touchBegin(click, x, y); + break; + case SkView::Click::kMoved_State: + fGesture.touchMoved(click, x, y); + this->inval(NULL); + break; + case SkView::Click::kUp_State: + fGesture.touchEnd(click); + this->inval(NULL); + break; + } + return true; + } + return false; +} + +/////////////////////////////////////////////////////////////////////////////// + void SampleWindow::loadView(SkView* view) { SkView::F2BIter iter(this); SkView* prev = iter.next(); |